Thema Datum  Von Nutzer Rating
Antwort
25.11.2018 14:19:19 Frank
NotSolved
Blau Daten in Excel einlesen
25.11.2018 21:57:09 Ulrich
NotSolved
26.11.2018 15:41:13 Rene
NotSolved
26.11.2018 15:52:06 Ulrich
NotSolved
26.11.2018 17:09:34 Frank
NotSolved

Ansicht des Beitrags:
Von:
Ulrich
Datum:
25.11.2018 21:57:09
Views:
531
Rating: Antwort:
  Ja
Thema:
Daten in Excel einlesen

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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
25.11.2018 14:19:19 Frank
NotSolved
Blau Daten in Excel einlesen
25.11.2018 21:57:09 Ulrich
NotSolved
26.11.2018 15:41:13 Rene
NotSolved
26.11.2018 15:52:06 Ulrich
NotSolved
26.11.2018 17:09:34 Frank
NotSolved