Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1268to1272
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeichenkette mit gleitendem Fenster durchsuchen

Zeichenkette mit gleitendem Fenster durchsuchen
TeiZei
Hallo,
da verzweifle ich wirklich dran...
Ich habe eine Zeichenfolge von n-Zeichen mit den Buchstaben A, C, G und T. Jetzt würde ich gern die komplette Zeichenkette sukzessive durchgehen und den prozentualen Anteil an Gs und Cs in einem definierten Fenster berechnen lassen (z.B. 20 Zeichen). Anschließend möchte ich nur das Fenster ausgegeben haben, welches den höchsten GC-Anteil hat.
Bsp.
Text: "GATAAACCCAGCGAACCATTTGAGGTGATAGGTAAGATTC" --- dieser soll durchsucht werden
1stes Fenster: "GATAAACCCAGCGAACCATT" --- = n1 bis n20; GC:45,0%
2stes Fenster: "ATAAACCCAGCGAACCATTT" --- = n2 bis n21; GC: 40,0%
3test Fenster: .........
....
letztes Fenster: ...........
Zu jedem dieser Fenster würde ich dann den GC-Gehalt berechnen wollen und dann nur den ausgeben haben wollen, der den höchsten GC-Gehalt hat. Und genau das bekomme ich nicht hin ...
Hab es hoffentlich verständlich erklärt und hoffe auf eure Unterstützung!
Danke,
TeiZei

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zeichenkette mit gleitendem Fenster durchsuchen
11.07.2012 14:52:02
harry
Hallo TeiZei,
damit funktioniert's:
Dim deinstring As String
Dim startzeichen As Integer
Dim stopzeichen As Integer
deinstring = "ATAAACCCAGCGAACCATTT"
startzeichen = 2
stopzeichen = 21
'Teilstring mit start/stop erzeugen
deinstring = Right(Left(deinstring, 10), stopzeichen - startzeichen + 1)
'Vorkommen zählen
Stringlänge = Len(deinstring)
g_vorkommen = 0
c_vorkommen = 0
For x = 1 To Stringlänge
If Right(Left(deinstring, x), 1) = "G" Then g_vorkommen = g_vorkommen + 1
If Right(Left(deinstring, x), 1) = "C" Then c_vorkommen = c_vorkommen + 1
Next
MsgBox ((g_vorkommen + c_vorkommen) / Stringlänge) * 100
Gruß
harry
Anzeige
AW: Zeichenkette mit gleitendem Fenster durchsuchen
11.07.2012 16:48:43
TeiZei
Hi Harry,
danke für deinen code!
Ich habe ihn als Vorlage genommen, um zusätzlich zu den ersten 20 Buchstaben im String auch noch die folgenden Fenster zu durchsuchen - und dann noch als Funktion umbebaut.
Bei mir hat es geklappt mit folgendem code:
Public Function sliding_window_GC(DeinString As String, WindowSize As Integer) As Single
Dim DeinStringPart As String
Dim StartZeichen As Integer
Dim StopZeichen As Integer
Dim G_vorkommen As Integer
Dim C_vorkommen As Integer
Dim x As Integer
Dim i As Integer
Dim Limit As Integer
Dim MaxGC As Integer
Limit = Len(DeinString) - WindowSize
MaxGC = 0
For i = 1 To Limit
StartZeichen = i
StopZeichen = StartZeichen + WindowSize
'Teilstring mit start/stop erzeugen
'deinstring = Right(Left(deinstring, 10), stopzeichen - startzeichen + 1)
DeinStringPart = Mid(DeinString, StartZeichen, StopZeichen - StartZeichen)
'Vorkommen zählen
G_vorkommen = 0
C_vorkommen = 0
For x = 1 To WindowSize
If Right(Left(DeinStringPart, x), 1) = "G" Then G_vorkommen = G_vorkommen + 1
If Right(Left(DeinStringPart, x), 1) = "C" Then C_vorkommen = C_vorkommen + 1
Next x
If MaxGC 
Ohne deine initiale Hilfe hätte ich es nicht geschafft - Danke!
@Sheldon: auch dir vielen Dank - ich muss ca. 20000 datensätze durchgehen, da klappt es nicht ohne Makro...
TeiZei
Anzeige
und was ist bei mehrfachem Vorkommen?
11.07.2012 15:22:06
Sheldon
Hi,
in deinem Beispiel gibts mehrere Fenster mit identischem Vorkommen, oder? Ermittlung selbst geht aber auch sehr gut ohne Makro, schau mal hier:
https://www.herber.de/bbs/user/80936.xls
Tabelle1
 CDEF
3GATAAACCCAGCGAACCATTTGAGGTGATAGGTAAGATTC    40
4       
5Abschnittlänge20Anzahl Fenster:20
6       
71GATAAACCCAGCGAACCATT45,00% 
82ATAAACCCAGCGAACCATTT40,00% 
93TAAACCCAGCGAACCATTTG45,00% 
104AAACCCAGCGAACCATTTGA45,00% 
115AACCCAGCGAACCATTTGAG50,00% 
126ACCCAGCGAACCATTTGAGG55,00% 
137CCCAGCGAACCATTTGAGGT55,00% 
148CCAGCGAACCATTTGAGGTG55,00% 
159CAGCGAACCATTTGAGGTGA50,00% 
1610AGCGAACCATTTGAGGTGAT45,00% 
1711GCGAACCATTTGAGGTGATA45,00% 
1812CGAACCATTTGAGGTGATAG45,00% 
1913GAACCATTTGAGGTGATAGG45,00% 
2014AACCATTTGAGGTGATAGGT40,00% 
2115ACCATTTGAGGTGATAGGTA40,00% 
2216CCATTTGAGGTGATAGGTAA40,00% 
2317CATTTGAGGTGATAGGTAAG40,00% 
2418ATTTGAGGTGATAGGTAAGA35,00% 
2519TTTGAGGTGATAGGTAAGAT35,00% 
2620TTGAGGTGATAGGTAAGATT35,00% 
27       
28       

verwendete Formeln
Zelle Formel Bereich
F3 =LÄNGE(C3) 
F5 =F3-D5 
D7 =WENN(C7<>"";TEIL($C$3;C7;$D$5);"") 
E7 =WENN(C7<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D7;"C";"");"G";"")))/$D$5;"") 
C8 =WENN(MAX(C$7:C7)+1<=$F$5;MAX(C$7:C7)+1;"") 
D8 =WENN(C8<>"";TEIL($C$3;C8;$D$5);"") 
E8 =WENN(C8<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D8;"C";"");"G";"")))/$D$5;"") 
C9 =WENN(MAX(C$7:C8)+1<=$F$5;MAX(C$7:C8)+1;"") 
D9 =WENN(C9<>"";TEIL($C$3;C9;$D$5);"") 
E9 =WENN(C9<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D9;"C";"");"G";"")))/$D$5;"") 
C10 =WENN(MAX(C$7:C9)+1<=$F$5;MAX(C$7:C9)+1;"") 
D10 =WENN(C10<>"";TEIL($C$3;C10;$D$5);"") 
E10 =WENN(C10<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D10;"C";"");"G";"")))/$D$5;"") 
C11 =WENN(MAX(C$7:C10)+1<=$F$5;MAX(C$7:C10)+1;"") 
D11 =WENN(C11<>"";TEIL($C$3;C11;$D$5);"") 
E11 =WENN(C11<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D11;"C";"");"G";"")))/$D$5;"") 
C12 =WENN(MAX(C$7:C11)+1<=$F$5;MAX(C$7:C11)+1;"") 
D12 =WENN(C12<>"";TEIL($C$3;C12;$D$5);"") 
E12 =WENN(C12<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D12;"C";"");"G";"")))/$D$5;"") 
C13 =WENN(MAX(C$7:C12)+1<=$F$5;MAX(C$7:C12)+1;"") 
D13 =WENN(C13<>"";TEIL($C$3;C13;$D$5);"") 
E13 =WENN(C13<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D13;"C";"");"G";"")))/$D$5;"") 
C14 =WENN(MAX(C$7:C13)+1<=$F$5;MAX(C$7:C13)+1;"") 
D14 =WENN(C14<>"";TEIL($C$3;C14;$D$5);"") 
E14 =WENN(C14<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D14;"C";"");"G";"")))/$D$5;"") 
C15 =WENN(MAX(C$7:C14)+1<=$F$5;MAX(C$7:C14)+1;"") 
D15 =WENN(C15<>"";TEIL($C$3;C15;$D$5);"") 
E15 =WENN(C15<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D15;"C";"");"G";"")))/$D$5;"") 
C16 =WENN(MAX(C$7:C15)+1<=$F$5;MAX(C$7:C15)+1;"") 
D16 =WENN(C16<>"";TEIL($C$3;C16;$D$5);"") 
E16 =WENN(C16<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D16;"C";"");"G";"")))/$D$5;"") 
C17 =WENN(MAX(C$7:C16)+1<=$F$5;MAX(C$7:C16)+1;"") 
D17 =WENN(C17<>"";TEIL($C$3;C17;$D$5);"") 
E17 =WENN(C17<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D17;"C";"");"G";"")))/$D$5;"") 
C18 =WENN(MAX(C$7:C17)+1<=$F$5;MAX(C$7:C17)+1;"") 
D18 =WENN(C18<>"";TEIL($C$3;C18;$D$5);"") 
E18 =WENN(C18<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D18;"C";"");"G";"")))/$D$5;"") 
C19 =WENN(MAX(C$7:C18)+1<=$F$5;MAX(C$7:C18)+1;"") 
D19 =WENN(C19<>"";TEIL($C$3;C19;$D$5);"") 
E19 =WENN(C19<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D19;"C";"");"G";"")))/$D$5;"") 
C20 =WENN(MAX(C$7:C19)+1<=$F$5;MAX(C$7:C19)+1;"") 
D20 =WENN(C20<>"";TEIL($C$3;C20;$D$5);"") 
E20 =WENN(C20<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D20;"C";"");"G";"")))/$D$5;"") 
C21 =WENN(MAX(C$7:C20)+1<=$F$5;MAX(C$7:C20)+1;"") 
D21 =WENN(C21<>"";TEIL($C$3;C21;$D$5);"") 
E21 =WENN(C21<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D21;"C";"");"G";"")))/$D$5;"") 
C22 =WENN(MAX(C$7:C21)+1<=$F$5;MAX(C$7:C21)+1;"") 
D22 =WENN(C22<>"";TEIL($C$3;C22;$D$5);"") 
E22 =WENN(C22<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D22;"C";"");"G";"")))/$D$5;"") 
C23 =WENN(MAX(C$7:C22)+1<=$F$5;MAX(C$7:C22)+1;"") 
D23 =WENN(C23<>"";TEIL($C$3;C23;$D$5);"") 
E23 =WENN(C23<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D23;"C";"");"G";"")))/$D$5;"") 
C24 =WENN(MAX(C$7:C23)+1<=$F$5;MAX(C$7:C23)+1;"") 
D24 =WENN(C24<>"";TEIL($C$3;C24;$D$5);"") 
E24 =WENN(C24<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D24;"C";"");"G";"")))/$D$5;"") 
C25 =WENN(MAX(C$7:C24)+1<=$F$5;MAX(C$7:C24)+1;"") 
D25 =WENN(C25<>"";TEIL($C$3;C25;$D$5);"") 
E25 =WENN(C25<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D25;"C";"");"G";"")))/$D$5;"") 
C26 =WENN(MAX(C$7:C25)+1<=$F$5;MAX(C$7:C25)+1;"") 
D26 =WENN(C26<>"";TEIL($C$3;C26;$D$5);"") 
E26 =WENN(C26<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D26;"C";"");"G";"")))/$D$5;"") 
C27 =WENN(MAX(C$7:C26)+1<=$F$5;MAX(C$7:C26)+1;"") 
D27 =WENN(C27<>"";TEIL($C$3;C27;$D$5);"") 
E27 =WENN(C27<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D27;"C";"");"G";"")))/$D$5;"") 
C28 =WENN(MAX(C$7:C27)+1<=$F$5;MAX(C$7:C27)+1;"") 
D28 =WENN(C28<>"";TEIL($C$3;C28;$D$5);"") 
E28 =WENN(C28<>"";($D$5-LÄNGE(WECHSELN(WECHSELN(D28;"C";"");"G";"")))/$D$5;"") 

Zahlenformate
Zelle Format Wert
E7 0,00%0,45
E8 0,00%0,4
E9 0,00%0,45
E10 0,00%0,45
E11 0,00%0,5
E12 0,00%0,55
E13 0,00%0,55
E14 0,00%0,55
E15 0,00%0,5
E16 0,00%0,45
E17 0,00%0,45
E18 0,00%0,45
E19 0,00%0,45
E20 0,00%0,4
E21 0,00%0,4
E22 0,00%0,4
E23 0,00%0,4
E24 0,00%0,35
E25 0,00%0,35
E26 0,00%0,35
E27 0,00% 
E28 0,00% 
Zellen mit Format Standard werden nicht dargestellt




Gruß
Sheldon
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige