엑셀 시트에서 DNA 서열의 다중 정렬의 SNP에 착색하는 매크로
소개
여러 DNA 서열의 정렬에 대해, 엑셀 시트상에서, 컨센서스 배열과 다른 곳에 색을 붙이고 싶은 것이 있군요.
이번에는 다중 배열 정렬 (1 셀 1 염기)에서 컨센서스 배열을 찾는 매크로와 다중 배열 정렬의 컨센서스 배열과 다른 염기의 셀의 색을 바꾸는 매크로의 두 가지를 설명합니다.
목표로 하는 기능
이런 데이터를,
이런 식으로합니다.
물론 배열의 수가 더 많아도, 혹은 더 길어도 괜찮게 합니다.
컨센서스 배열을 만드는 매크로
컨센서스 배열을 찾고자 하는 다중 정렬 부분을 선택한 다음 매크로를 실행하면 선택한 각 열에 대해 첫 번째 셀에 가장 높은 빈도를 가진 문자를 출력할 수 있습니다. 맨 위 행은 비워 두어야 합니다.
Mac이라면 VBA에서는 사전 기능을 사용할 수 없다는 것으로 (충격), DNA 한정으로 만듭니다.
Sub コンセンサス()
Dim a As Integer
Dim c As Integer
Dim g As Integer
Dim t As Integer
Dim char As String
For Column = Selection(1).Column To Selection(Selection.Count).Column
a = 0
c = 0
g = 0
t = 0
For Row = Selection(1).Row To Selection(Selection.Count).Row
char = UCase(Cells(Row, Column).value)'入力が小文字の時もあるかもしれないので大文字に。
If char = "A" Then a = a + 1
If char = "C" Then c = c + 1
If char = "G" Then g = g + 1
If char = "T" Then t = t + 1
Next Row
If a > c And a > g And a > t Then
Cells(1, Column) = "A"
ElseIf c > a And c > g And c > t Then
Cells(1, Column) = "C"
ElseIf g > a And g > c And g > t Then
Cells(1, Column) = "G"
ElseIf t > a And t > c And t > g Then
Cells(1, Column) = "T"
Else
Cells(1, Column) = "?"
End If
Next Column
End Sub
... 특히 어려운 곳은 없었어요. 같은 수의 경우는?가 되어 있습니다. 이제 1행째에 컨센서스 배열이 표시되게 되었습니다.
계속해서 컨센서스와 다른 곳에 색을 칠하게 합니다.
Sub 異なるところに色を塗る()
'コンセンサス配列を1行目に入れておく
'選択範囲の各セルについて、1行目と異なれば、背景色を赤にする。
For Row = Selection(1).Row To Selection(Selection.Count).Row
For Column = Selection(1).Column To Selection(Selection.Count).Column
If Cells(Row, Column).value <> Cells(1, Column).value Then
If Cells(Row, Column).value = "A" Then
Cells(Row, Column).Interior.ColorIndex = 4
ElseIf Cells(Row, Column).value = "C" Then
Cells(Row, Column).Interior.ColorIndex = 33
ElseIf Cells(Row, Column).value = "G" Then
Cells(Row, Column).Interior.ColorIndex = 15
ElseIf Cells(Row, Column).value = "T" Then
Cells(Row, Column).Interior.ColorIndex = 3
Else
Cells(Row, Column).Interior.ColorIndex = 44
End If
End If
Next Column
Next Row
End Sub
이제 컨센서스와 다른 곳에 색을 칠할 수 있게 되었습니다.
끝에
두 번 매크로를 실행하는 것이 귀찮다면 한 번에 둘 다 해주도록 해도 좋을지도 모릅니다. 생각한 것을 할 수 있었다는 것으로, 이번은 이것으로 끝내고 싶습니다.
Reference
이 문제에 관하여(엑셀 시트에서 DNA 서열의 다중 정렬의 SNP에 착색하는 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yoho/items/50ff3d225fbf48421267
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이런 데이터를,
이런 식으로합니다.
물론 배열의 수가 더 많아도, 혹은 더 길어도 괜찮게 합니다.
컨센서스 배열을 만드는 매크로
컨센서스 배열을 찾고자 하는 다중 정렬 부분을 선택한 다음 매크로를 실행하면 선택한 각 열에 대해 첫 번째 셀에 가장 높은 빈도를 가진 문자를 출력할 수 있습니다. 맨 위 행은 비워 두어야 합니다.
Mac이라면 VBA에서는 사전 기능을 사용할 수 없다는 것으로 (충격), DNA 한정으로 만듭니다.
Sub コンセンサス()
Dim a As Integer
Dim c As Integer
Dim g As Integer
Dim t As Integer
Dim char As String
For Column = Selection(1).Column To Selection(Selection.Count).Column
a = 0
c = 0
g = 0
t = 0
For Row = Selection(1).Row To Selection(Selection.Count).Row
char = UCase(Cells(Row, Column).value)'入力が小文字の時もあるかもしれないので大文字に。
If char = "A" Then a = a + 1
If char = "C" Then c = c + 1
If char = "G" Then g = g + 1
If char = "T" Then t = t + 1
Next Row
If a > c And a > g And a > t Then
Cells(1, Column) = "A"
ElseIf c > a And c > g And c > t Then
Cells(1, Column) = "C"
ElseIf g > a And g > c And g > t Then
Cells(1, Column) = "G"
ElseIf t > a And t > c And t > g Then
Cells(1, Column) = "T"
Else
Cells(1, Column) = "?"
End If
Next Column
End Sub
... 특히 어려운 곳은 없었어요. 같은 수의 경우는?가 되어 있습니다. 이제 1행째에 컨센서스 배열이 표시되게 되었습니다.
계속해서 컨센서스와 다른 곳에 색을 칠하게 합니다.
Sub 異なるところに色を塗る()
'コンセンサス配列を1行目に入れておく
'選択範囲の各セルについて、1行目と異なれば、背景色を赤にする。
For Row = Selection(1).Row To Selection(Selection.Count).Row
For Column = Selection(1).Column To Selection(Selection.Count).Column
If Cells(Row, Column).value <> Cells(1, Column).value Then
If Cells(Row, Column).value = "A" Then
Cells(Row, Column).Interior.ColorIndex = 4
ElseIf Cells(Row, Column).value = "C" Then
Cells(Row, Column).Interior.ColorIndex = 33
ElseIf Cells(Row, Column).value = "G" Then
Cells(Row, Column).Interior.ColorIndex = 15
ElseIf Cells(Row, Column).value = "T" Then
Cells(Row, Column).Interior.ColorIndex = 3
Else
Cells(Row, Column).Interior.ColorIndex = 44
End If
End If
Next Column
Next Row
End Sub
이제 컨센서스와 다른 곳에 색을 칠할 수 있게 되었습니다.
끝에
두 번 매크로를 실행하는 것이 귀찮다면 한 번에 둘 다 해주도록 해도 좋을지도 모릅니다. 생각한 것을 할 수 있었다는 것으로, 이번은 이것으로 끝내고 싶습니다.
Reference
이 문제에 관하여(엑셀 시트에서 DNA 서열의 다중 정렬의 SNP에 착색하는 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yoho/items/50ff3d225fbf48421267
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Sub コンセンサス()
Dim a As Integer
Dim c As Integer
Dim g As Integer
Dim t As Integer
Dim char As String
For Column = Selection(1).Column To Selection(Selection.Count).Column
a = 0
c = 0
g = 0
t = 0
For Row = Selection(1).Row To Selection(Selection.Count).Row
char = UCase(Cells(Row, Column).value)'入力が小文字の時もあるかもしれないので大文字に。
If char = "A" Then a = a + 1
If char = "C" Then c = c + 1
If char = "G" Then g = g + 1
If char = "T" Then t = t + 1
Next Row
If a > c And a > g And a > t Then
Cells(1, Column) = "A"
ElseIf c > a And c > g And c > t Then
Cells(1, Column) = "C"
ElseIf g > a And g > c And g > t Then
Cells(1, Column) = "G"
ElseIf t > a And t > c And t > g Then
Cells(1, Column) = "T"
Else
Cells(1, Column) = "?"
End If
Next Column
End Sub
Sub 異なるところに色を塗る()
'コンセンサス配列を1行目に入れておく
'選択範囲の各セルについて、1行目と異なれば、背景色を赤にする。
For Row = Selection(1).Row To Selection(Selection.Count).Row
For Column = Selection(1).Column To Selection(Selection.Count).Column
If Cells(Row, Column).value <> Cells(1, Column).value Then
If Cells(Row, Column).value = "A" Then
Cells(Row, Column).Interior.ColorIndex = 4
ElseIf Cells(Row, Column).value = "C" Then
Cells(Row, Column).Interior.ColorIndex = 33
ElseIf Cells(Row, Column).value = "G" Then
Cells(Row, Column).Interior.ColorIndex = 15
ElseIf Cells(Row, Column).value = "T" Then
Cells(Row, Column).Interior.ColorIndex = 3
Else
Cells(Row, Column).Interior.ColorIndex = 44
End If
End If
Next Column
Next Row
End Sub
두 번 매크로를 실행하는 것이 귀찮다면 한 번에 둘 다 해주도록 해도 좋을지도 모릅니다. 생각한 것을 할 수 있었다는 것으로, 이번은 이것으로 끝내고 싶습니다.
Reference
이 문제에 관하여(엑셀 시트에서 DNA 서열의 다중 정렬의 SNP에 착색하는 매크로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoho/items/50ff3d225fbf48421267텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)