Hallo,
ich mach mal den ersten Vorschlag:
Option Explicit
Sub EinAnfang()
Dim csvFile As String
Dim Path As String
Dim WsCsv As Worksheet
Dim csvColumnDataType() As Variant
Dim csvData As Variant
Dim csvZeile As Long, csvSpalte As Long
Dim i As Long, iSpalte As Long, iZeile As Long, nZeilen As Long
Dim dict As Object
Dim myData As Variant
ReDim myData(1 To 200000, 1 To 4) ' Datenfeld, in das das Ergebnis geschrieben wird
myData(1, 1) = "GENE": myData(1, 2) = "silent"
myData(1, 3) = "Missense": myData(1, 4) = "Unknown"
nZeilen = 1
Set dict = CreateObject("Scripting.Dictionary") ' im dict werden die Zeilennummern verwaltet
csvSpalte = 2 ' 2 für Spalte B, 20 für Spalte T => anpassen!
'festlegen, wie die Spalten der CSV-Dateien geparst werden sollen:
ReDim csvColumnDataType(0 To 200)
For i = 0 To 200: csvColumnDataType(i) = Array(i, 1): Next 'xlGeneralFormat
Path = ThisWorkbook.Path & "\"
csvFile = Dir(Path & "*.csv")
Do While csvFile <> ""
'csv-Datei öffnen
Workbooks.OpenText Filename:=Path & csvFile, _
Origin:=xlWindows, _
StartRow:=2, _
DataType:=xlDelimited, _
Comma:=True, _
FieldInfo:=csvColumnDataType, _
DecimalSeparator:="."
Set WsCsv = ActiveWorkbook.Sheets(1)
csvData = WsCsv.UsedRange.Value
For csvZeile = 1 To UBound(csvData) ' Schleife über alle Zeilen der CSV-Datei
'Spaltennummer herausfinden
iSpalte = 0
If InStr(LCase(csvData(csvZeile, csvSpalte)), "silent") Then
iSpalte = 2
ElseIf InStr(LCase(csvData(csvZeile, csvSpalte)), "missense") Then
iSpalte = 3
ElseIf InStr(LCase(csvData(csvZeile, csvSpalte)), "unknown") Then
iSpalte = 4
Else
'in Spalte csvSpalte der CSV wurden die drei Begriffe nicht gefunden, was nun? => mach nichts
End If
If iSpalte > 0 Then ' einer der drei Begriffe wurde gefunden
'Zeilenummer herausfinden
If dict.exists(csvData(csvZeile, 1)) Then
iZeile = dict(csvData(csvZeile, 1))
Else
nZeilen = nZeilen + 1
dict.Add csvData(csvZeile, 1), nZeilen
iZeile = nZeilen
myData(iZeile, 1) = csvData(csvZeile, 1)
End If
myData(iZeile, iSpalte) = myData(iZeile, iSpalte) + 1 'Wert in Array speichern
End If
Next
WsCsv.Parent.Close savechanges:=False 'CSV-DAtei schließen
csvFile = Dir() 'nächster Dateiname
Loop
With ThisWorkbook.Worksheets.Add
.Range("A1").Resize(nZeilen, 4).Value = myData 'Daten in einem neuen Tabellenblatt ausgeben
End With
End Sub
Ich bin einfach mal davon ausgegangen, dass du nicht mehr als 200000 verschiedene Begriffe hast, die in Spalte A vorkommen.
Dem Bild habe ich entnommen, dass die Spalte der CSV-Datei, die nach den Begriffen (silent, Missense, Unknown) durchsucht werden muss, Spalte B ist. Im Text schreibst du etwas von Spalte T?! Das kannst / musst du über die Variable "csvSpalte" anpassen.
Ja, da ist "Bildschirmgeflacker". Das interessiert mich aber nicht so wirklich ;-). Wie gesagt, das ist ein Anfang, auf dem du aufbauen kannst (aber immerhin funktionstüchtig und kurz getestet).
Grüße, Ulich
|