엑셀 시트에서 DNA 서열의 다중 정렬의 SNP에 착색하는 매크로

12029 단어 VBA정렬ExcelDNA

소개



여러 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

이제 컨센서스와 다른 곳에 색을 칠할 수 있게 되었습니다.

끝에



두 번 매크로를 실행하는 것이 귀찮다면 한 번에 둘 다 해주도록 해도 좋을지도 모릅니다. 생각한 것을 할 수 있었다는 것으로, 이번은 이것으로 끝내고 싶습니다.

좋은 웹페이지 즐겨찾기