Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte zählen (Häufigkeit) in externer Textdatei

Werte zählen (Häufigkeit) in externer Textdatei
28.11.2012 16:34:17
Andi
Hallo,
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte zählen (Häufigkeit) in externer Textdatei
28.11.2012 16:44:23
Rudi
Hallo,
dafür ist ein Dictionary-Objekt immer gut.
Sollte so klappen:
Sub ext_top()
Dim oFso As Object, oTextFile As Object
Dim sWert As String, oWert As Object
Set oWert = CreateObject("Scripting.Dictionary")
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)
oWert(sWert) = oWert(sWert) + 1
Loop
oTextFile.Close
With Sheets("Daten")
.Cells(1, 1).Resize(oWert.Count) = WorksheetFunction.Transpose(oWert.Keys)
.Cells(2, 1).Resize(oWert.Count) = WorksheetFunction.Transpose(oWert.items)
End With
End Sub

Gruß
Rudi

Anzeige
AW: Werte zählen (Häufigkeit) in externer Textdatei
28.11.2012 16:58:44
Andi
Hallo Rudi,
vielen Dank für die schnelle(!) und (für mich) leicht nachvollziehbare Lösung. Weil einfach manchmal einfach zu einfach ist, wie? ;-)
Zwar hatte ich mich selbst bei einer Variablen verschreiben (o_Fso statt oFso) aber Excel macht einen ja auf so was immer wieder gerne aufmerksam. Dabei versuche ich immer, NICHT schlampig zu proggen... :-)
Das "Sub" läuft jedenfalls genau so, wie ich es brauche - also DANKE dir nochmal!
Gruß aus München
Andi

332 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige