nachdem mir das Forum schon oft bei kniffligen Dingen weiter geholfen, auf mein sehr spezielles Problem jedoch scheinbar noch keine adäquate Lösung vorhanden ist, wäre ich für Tipps und Hinweise dankbar...
Ausgangslage: Zählung unbestimmt vieler Werte in einer Tabelle
Beim 1. Beispiel stehen alle zu verarbeitenden Werte in Tabelle 1, Spalte A. Mein "Sub" erfasst alle Werte nochmals (einmalig) in Tabelle 2, Spalte A und zählt diese zusätzlich in der Spalte B dahinter. So erreiche ich eine Art "Top-Liste" über die am häufigsten enthaltenen Werte inkl. der Anzahl ihres Vorkommens.
Sub top()
Dim iLastRow As Long, s As Long
Dim rSuchBereich As Range, rTeilBereich As Range
iLastRow = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
Set rSuchBereich = Tabelle1.Range(Cells(1, 1), Cells(iLastRow, 1))
s = 1
For Each rTeilBereich In rSuchBereich
If Not IsEmpty(rTeilBereich) And Tabelle2.[A:A].Find(rTeilBereich, LookAt:=xlWhole) Is _
Nothing Then
Tabelle2.Cells(s, "A") = rTeilBereich
Tabelle2.Cells(s, "B") = Application.CountIf(rSuchBereich, rTeilBereich)
s = s + 1
End If
Next rTeilBereich
Tabelle2.Select
Tabelle2.Columns("A:B").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlNo
End Sub
Mein eigentliches, aktuelle Problem ist nun aber, dass ich die zu erfassenden / zu zählenden Werte gar nicht in einer Tabelle (Excel) sondern als gewöhnliche Textdatei vorliegen habe.
Mein Ansatz wäre also zunächst folgender:
Sub ext_top()
Dim oFso As Object, oTextFile As Object
Dim sWert As String
Set oFso = CreateObject("Scripting.FileSystemObject")
Set oTextFile = o_Fso.OpenTextFile("X:\LISTE.TXT", 1, False)
Do While oTextFile.AtEndOfStream True
sWert = Right(Left(oTextFile.ReadLine, 20), 8)
' Hier sollte nun eine Erfassung und Zählung des jew. ext. Wertes erfolgen
Loop
oTextFile.Close
End Sub
Hinweis:
Ich kann die Datei NICHT zunächst komplett einlesen und in Excel (auf die mir bekannte Weise) verarbeiten, da die Textdatei auch mal größer als die berühmten 65.536 Zeilen lang sein kann.
Ich müsste wohl alle externen Daten in ein Array einlesen, oder?
Irgendwie steh' ich auf'm Schlauch und wäre für ne kleine Hilfestellung dankbar, da ich mit Arrays eigentlich eher wenig bis keine Ahnung habe :-)
Danke & Gruß Andi