Function Translation3(Txt As String, Optional FrameNum As Long = 1, Optional StartCodon As String, Optional EntryStartCodon As Long = 1) As String
' ZVI:2024-06-10 https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&TID=165512
' Convert Txt nucleotide sequence into an amino acid translation
'
' Function arguments
' Txt - Nucleotide sequence. Spases can be used as they are ignored
' [FrameNum] = [1],2,3 - Frame number
' [StartCodon] - Codon to find
' [EntryStartCodon] = [1] - Codons count to start from
Dim a(), i As Long, j As Long, k As Long, sTxt As String, sCodon As String
sTxt = Mid$(Replace(Txt, " ", vbNullString), FrameNum)
k = Len(sTxt)
If k = 0 Then Exit Function
If StartCodon <> vbNullString Then
For i = 1 To EntryStartCodon
Do
j = InStr(j + 1, sTxt, StartCodon, vbBinaryCompare)
Loop While j <> 0 And ((j - 1) Mod 3) <> 0
If j = 0 Then Exit Function
Next
End If
If j = 0 Then j = 1
ReDim a(j To k)
For i = j To k - 2 Step 3
sCodon = Mid$(sTxt, i, 3)
Select Case sCodon
Case "GCA", "GCC", "GCG", "GCT": a(i) = "A"
Case "TGC", "TGT": a(i) = "C"
Case "GAC", "GAT": a(i) = "D"
Case "GAA", "GAG": a(i) = "E"
Case "TTC", "TTT": a(i) = "F"
Case "GGA", "GGC", "GGG", "GGT": a(i) = "G"
Case "CAC", "CAT": a(i) = "H"
Case "ATA", "ATC", "ATT": a(i) = "I"
Case "AAA", "AAG": a(i) = "K"
Case "CTA", "CTC", "CTG", "CTT", "TTA", "TTG": a(i) = "L"
Case "ATG": a(i) = "M"
Case "AAC", "AAT": a(i) = "N"
Case "CCA", "CCC", "CCG", "CCT": a(i) = "P"
Case "CAA", "CAG": a(i) = "Q"
Case "AGA", "AGG", "CGA", "CGC", "CGG", "CGT": a(i) = "R"
Case "AGC", "AGT", "TCA", "TCC", "TCG", "TCT": a(i) = "S"
Case "ACA", "ACC", "ACG", "ACT": a(i) = "T"
Case "GTA", "GTC", "GTG", "GTT": a(i) = "V"
Case "TGG": a(i) = "W"
Case "TAC", "TAT": a(i) = "Y"
Case "TAA", "TAG", "TGA": Exit For
Case Else: a(i) = "?(" & sCodon & ")" ' comment to skip this line
End Select
Next
Translation3 = Join(a, vbNullString)
End Function
Private Sub Test1_Translation3()
Const Codon$ = "ATG"
Dim Txt$
'Txt = ThisWorkbook.Sheets(1).Range("C2").Value
Txt = "ATGGATCCAATGACTGATGTGTCAAGATGCTTTCAGGTAGATTATGGCTTTCTTTGGATGCATGTCCGCAAATACGAATGGTTGCAGACTTAA"
Debug.Print "Txt", Txt
Debug.Print
Debug.Print "Frame = 1 to 3"
Debug.Print "Fr1", Translation3(Txt)
Debug.Print "Fr2", Translation3(Txt, 2)
Debug.Print "Fr3", Translation3(Txt, 3)
Debug.Print
Debug.Print "Frame = 1 to 3, Codon = " & Chr(34) & Codon & Chr(34)
Debug.Print "Fr1 ", Translation3(Txt, 1, Codon)
Debug.Print "Fr2 ", Translation3(Txt, 2, Codon)
Debug.Print "Fr3 ", Translation3(Txt, 3, Codon)
Debug.Print
Debug.Print "Frame = 1, Codon = " & Chr(34) & Codon & Chr(34) & ", EntryStartCodon = 1 to 3"
Debug.Print "Fr1 Ent1", Translation3(Txt, 1, Codon, 1)
Debug.Print "Fr1 Ent2", Translation3(Txt, 1, Codon, 2)
Debug.Print "Fr1 Ent3", Translation3(Txt, 1, Codon, 3)
Debug.Print
Debug.Print "Frame = 2, Codon = " & Chr(34) & Codon & Chr(34) & ", EntryStartCodon = 1 to 3"
Debug.Print "Fr2 Ent1", Translation3(Txt, 2, Codon, 1)
Debug.Print "Fr2 Ent2", Translation3(Txt, 2, Codon, 2)
Debug.Print "Fr2 Ent3", Translation3(Txt, 2, Codon, 3)
Debug.Print
Debug.Print "Frame = 3, Codon = " & Chr(34) & Codon & Chr(34) & ", EntryStartCodon = 1 to 3"
Debug.Print "Fr3 Ent1", Translation3(Txt, 3, Codon, 1)
Debug.Print "Fr3 Ent2", Translation3(Txt, 3, Codon, 2)
Debug.Print "Fr3 Ent3", Translation3(Txt, 3, Codon, 3)
End Sub
|