Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1876to1880
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

Werte einer txt-Datei sortieren

Werte einer txt-Datei sortieren
29.03.2022 13:17:21
Reiner
Hallo zusammen,
ich habe eine Excel Tabelle mit Hilfe eines Makros ausgelesen und die Daten in einer txt-Datei abgelegt. Da die Daten in meiner Excel Tabelle nicht sortiert waren, sind sie in der txt-Datei auch nicht sortiert. Die Excel Tabelle vor dem auslesen ist unmöglich, da feste Vorgabe. In der Ausgabedatei sind die Einträge der einzelnen Zellen durch Semikolon getrennt. In der Spalte 5 befindet sich eine 5-stellige Nummer, nach der aufsteigend sortiert werden soll. Ich füge die txt-Datei bei.
Hier der Pfad: https://www.herber.de/bbs/user/152129.txt

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 13:22:52
Oberschlumpf
Hi Reiner
die txt-Datei ist doch schon nach Spalte 5 (E) aufsteigend sortiert?
Ciao
Thorsten
AW: Werte einer txt-Datei sortieren
29.03.2022 13:40:37
Reiner
Hallo Thorsten,
schön dass du dich meldest. Habe gar nicht damit gerechnet, dass das so schnell geht.
Wenn du die Datei nach unten scrolls, wirst du sehen, dass die Nummern in der Spalte 5 mit 2 an zweiter Stelle anfangen an, dann folgt die 4, die 5, die 3, die 6 und am Ende die 7 und die 9. Die Nummern sollen in nummerischer Reihenfolge sortiert werden.
Gruß
Reiner
AW: Werte einer txt-Datei sortieren
29.03.2022 13:45:00
Oberschlumpf
huch, muss mich korrigieren!
zwischendrin sind dann doch mal Zahlen, die wieder kleiner sind, als die Vorhergehenden.
Aber Chris hat schon recht.
1. VOR dem Exportieren in txt-Datei alles kopieren und in ein neues Tabellenblatt einfügen
2. Daten im neuen Blatt nach Spalte E sortieren
3. Daten aus neuem Blatt in txt-Datei exportieren
4. neues Blatt löschen
alles ist gut :-)
Hilft das?
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 13:52:48
Reiner
Hallo Thorsten,
die Lösung geht leider nicht. Die Daten in der txt-Datei sind von mehreren Reitern unterschiedlicher Ausprägung. Ein manuelles zusammen sortieren wäre ein riesen Aufwand.
Gruß
Reiner
AW: Werte einer txt-Datei sortieren
29.03.2022 13:58:23
UweD
Hallo nochmal
Dann schreib die Daten NICHT sofort in die Textdatei, sondern in ein "Neues" Tabellenblatt, sortiere dann (per VBA) und exportiere die Datei als CSV (mit der .TXT Endung)
Das temporäre Blatt kannst du dann verwerfen.
LG UweD
AW: Werte einer txt-Datei sortieren
29.03.2022 13:28:14
ChrisL
Hi Rainer
Kopiere die Daten bzw. das Blatt vor dem Export, sortieren, exportieren und dann die Kopie verwerfen.
Unabhängig vom exakten vorgehen, sollten die Daten vor dem Export sortiert werden. Es macht keinen Sinn die Daten erst zu exportieren, dann wieder nach Excel zu importieren, nur ums sie zu sortieren und dann wieder zu exportieren.
cu
Chris
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 13:48:54
Reiner
Hallo Chris,
dein Vorschlag ist sicher nicht einer der schlechtesten. Doch geht leider nicht. Ich brauche hier die Sortierung über das VBA, da ich die Zahlen als Datensätze weiter verarbeiten muss.
Gruß
Reiner
AW: Werte einer txt-Datei sortieren
29.03.2022 13:51:58
Oberschlumpf
Hi Reiner,
wie jetzt?
In der Tabelle darf nix geändert werden, aber die Daten müssen trotzdem sortiert sein?
Ja, und wohin solln die Daten dann geschrieben werden?
Nur mit VBA sortiert, heißt ja, dass die - sortierten Daten - dann nur im Arbeitsspeicher sind...und nur im Speicher..nirgdwo anders...
Sorry, jetzt kapier ich gar nix mehr
Ciao
Thorsten
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 13:58:40
Reiner
Hallo Thorsten,
die txt-Datei ist die Ausgabedatei meines Makros. In ihr sind die Daten der Excel Tabellenblätter zusammen geschrieben. Da die Daten von Tabellenblatt 1 mit den Nummern 2, 4 u 5 beginnen, die Daten aus Tabellenblatt 2 mit 3 u 6 beginnen und die Daten aus Tabellenblatt 3 mit 7 u 9 beginnen, benötige ich die Sortierung in der txt-Datei. Eine Sortierung in Excel ist nicht möglich, da in jedem Tabellenblatt die Werte in anderen Spalten stehen.
Gruß
Reiner
AW: Werte einer txt-Datei sortieren
29.03.2022 13:54:29
UweD
Hallo
&GT&GTIch brauche hier die Sortierung über das VBA
das sollst du ja gar nicht manuell vornehmen. Das Sortieren kannst du ja im Makro ausführen lassen.
Zeig doch mal deinen Code
LG UweD
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 14:48:44
UweD
Hallo
mangels Daten habe ich das nur überflogen und nicht getestet.
- 1) Anstelle des Open...legt du eine neue Datei an
- 2) Innerhalb der Schleife, wo die die Sätze schreibst füllst du die Zellen im neuen Blatt
- 3) wo du die Ausgabedatei schließt, speicherst du stattdessen die Neue Datei als csv
So machst du es

Open "stat-blk" For Output Access Write As hnd_blk   '1)
Print #hnd_blk, to_write  '2)
Close #hnd_blk   '3)
Hier mal die analogen Anweisungen

Pfad = "E:\Excel\Temp\" 'mit \am Ende
Datei = "stat-blk"
'1)
Set tmp = Workbooks.Add
'deine Schleife
'2)
tmp.Sheets(1).Cells(Z + 1, 1) = to_write
Z = Z + 1
'Ende deine Schleife
'3)
tmp.SaveAs Filename:=Pfad & Datei & ".txt", FileFormat:=xlCSV
tmp.Close

Anzeige
Hatte ja
29.03.2022 15:36:30
UweD
..das Sortieren noch nicht drin.
so

to_write = "HP;K;47056789;2022;02000;599500;599500;;605000;597200;626125;" 'Test
Pfad = "E:\Excel\Temp\" 'mit \am Ende
Datei = "stat-blk"
'1)
Set tmp = Workbooks.Add
'deine Schleife
'2)
tmp.Sheets(1).Cells(Z + 1, 1) = to_write
Z = Z + 1
'Ende deine Schleife
'3)
'Neu Sortieren
With tmp.Sheets(1)
.Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, Semicolon:=True
.Sort.SortFields.Add2 Key:=.Columns(5), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("A1:L3")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
tmp.SaveAs Filename:=Pfad & Datei & ".txt", FileFormat:=xlCSV, Local:=True
tmp.Close
LG UweD
Anzeige
AW: Hatte ja
29.03.2022 15:41:16
UweD
sorry war nur auf mein Muster begrenzt.
Ändern in

With .Sort
.SetRange tmp.Sheets(1).UsedRange

nur mal so ne Frage...
29.03.2022 19:43:27
Oberschlumpf
Reiner, wieso machst du es uns denn so schwer?
Wieso zeigst du den Code in einer txt-Datei und nicht gleich in einer Bsp-Excel-Datei?
Schau dir mal die txt-Datei mit Code selbst an - da is so vieles durcheinander...war mein erster Eindruck....so, dass zumindest ich keine Lust hab, das alles erst mal lauffähig in eine xlsm-Datei zu übertragen...
von Kanonen und Spatzen
29.03.2022 13:59:12
Kanonen
Hallo,
als Beispiel:

Sub StartExport()
Dim vntARR() As Variant
Dim i As Long, j As Long
Dim strOUT As String
With Cells(1, 1).CurrentRegion
ReDim vntARR(1 To .Rows.Count, 1 To .Columns.Count)
vntARR = .Value
End With
Call prcSort(Array(5), vntARR)
Open "c:\test\test.txt" For Output As #1
For i = 1 To UBound(vntARR)
strOUT = vbNullString
For j = 1 To UBound(vntARR, 2)
strOUT = strOUT & ";" & vntARR(i, j)
Next j
Print #1, Mid(strOUT, 2)
Next i
Close #1
End Sub
Sub prcSort(vntSortKey As Variant, vntArray() As Variant)
Dim intIndex As Integer
Dim lngIndex1 As Long, lngIndex2 As Long, lngRowsArray() As Long
Dim lngRowsCount As Long, lngRangeCount As Long
Dim vntTemp As Variant
ReDim lngRowsArray(0 To 1, 0 To UBound(vntArray) * 2)
Dim i As Integer
'Array für den 1. Sortierlauf
lngRowsArray(0, 0) = LBound(vntArray)
lngRowsArray(0, 1) = UBound(vntArray)
lngRowsCount = 1
For intIndex = LBound(vntSortKey) To UBound(vntSortKey)
'Wenn eine Spalte angegeben
If vntSortKey(intIndex)  0 Then
lngRangeCount = -1
'Schleife zum sortieren der einzelnen Bereiche
For lngIndex1 = 0 To lngRowsCount Step 2
'Sortieren des Bereichs, wenn Zeilenzahl größer 1
If lngRowsArray(0, lngIndex1)  lngRowsArray(0, lngIndex1 + 1) Then
Call prcQuickSort(CLng(lngRowsArray(0, lngIndex1)), _
CLng(lngRowsArray(0, lngIndex1 + 1)), CInt(Abs(vntSortKey(intIndex))), _
CBool(vntSortKey(intIndex) > 0), vntArray())
'sortierten Bereich merken
lngRangeCount = lngRangeCount + 2
lngRowsArray(1, lngRangeCount - 1) = lngRowsArray(0, lngIndex1)
lngRowsArray(1, lngRangeCount) = lngRowsArray(0, lngIndex1 + 1)
End If
Next
lngRowsCount = -1
'Durchsuchen der soeben sortierten Spalte nach Wertewechsel
For lngIndex1 = 0 To lngRangeCount Step 2
'1. Zeile des zu sortierenden Bereichs
vntTemp = vntArray(lngRowsArray(1, lngIndex1), Abs(vntSortKey(intIndex)))
lngRowsCount = lngRowsCount + 1
lngRowsArray(0, lngRowsCount) = lngRowsArray(1, lngIndex1)
'Suche nach Wechsel innerhalb des Bereichs
For lngIndex2 = lngRowsArray(1, lngIndex1) To lngRowsArray(1, lngIndex1 + 1)
If vntTemp  vntArray(lngIndex2, Abs(vntSortKey(intIndex))) Then
lngRowsCount = lngRowsCount + 2
lngRowsArray(0, lngRowsCount - 1) = lngIndex2 - 1
lngRowsArray(0, lngRowsCount) = lngIndex2
vntTemp = vntArray(lngIndex2, Abs(vntSortKey(intIndex)))
End If
Next
'letzte Zeile des zu sortierenden Bereichs
lngRowsCount = lngRowsCount + 1
lngRowsArray(0, lngRowsCount) = lngRowsArray(1, lngIndex1 + 1)
Next
End If
Next
End Sub
Private Sub prcQuickSort(lngLbound As Long, lngUbound As Long, _
intSortColumn As Integer, bntSortKey As Boolean, vntArray() As Variant)
Dim intIndex As Integer
Dim lngIndex1 As Long, lngIndex2 As Long
Dim vntTemp As Variant, vntBuffer As Variant
lngIndex1 = lngLbound
lngIndex2 = lngUbound
vntBuffer = vntArray((lngLbound + lngUbound) \ 2, intSortColumn)
Do
If bntSortKey Then
Do While vntArray(lngIndex1, intSortColumn)  vntBuffer
lngIndex1 = lngIndex1 + 1
Loop
Do While vntBuffer > vntArray(lngIndex2, intSortColumn)
lngIndex2 = lngIndex2 - 1
Loop
End If
If lngIndex1  _
vntArray(lngIndex2, intSortColumn) Then
For intIndex = LBound(vntArray, 2) To UBound(vntArray, 2)
vntTemp = vntArray(lngIndex1, intIndex)
vntArray(lngIndex1, intIndex) = _
vntArray(lngIndex2, intIndex)
vntArray(lngIndex2, intIndex) = vntTemp
Next
End If
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
ElseIf lngIndex1 = lngIndex2 Then
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngLbound 
Gruß
Rudi
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 14:12:06
Daniel
Hi
Schritt 1: Datei mit Excel öffnen, da Semikolon das Trennzeichen ist, den Zusatz Local:=True verwenden
Schritt 2: Tabelle wie gewünscht sortieren
Schritt 3: Tabelle mit Save speichern.

Workbooks.Open "Dein Pfad und Dateiname.txt", local:=True
ActiveWorkbook.Sheets(1).Sort Key:=.Cells(1, 5), order1:=xlascending, header:=xlno
ActiveWorkbook.Save
ActiveWorkbook.Close
besser ist natürlich, das Erstellungsmakro so umzuschreiben, dass die Daten zuerst in eine gemeinsame Exceltabelle zusammenkopiert werden, dann kannst du sie dort sortieren und danach die Text-Datei erstellen.
ist wahrscheinlich etwas umständlich, das in ein bestehendes Makro einzubauen, aber das hier ist nachträgliche Flickschusterei.
Gruß Daniel
Anzeige
AW: Werte einer txt-Datei sortieren
29.03.2022 15:21:24
Reiner
Hallo ihr fleißigen Helfen,
ich muss mich jetzt erst einmal sortieren und mir die vielen Möglichkeiten, die ihr aufgezeigt habt, ansehen. Ich melde mich wieder. Habt aber erst einmal herzlichen Dank für die schnelle Hilfe.
Gruß
Reiner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige