Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1332to1336
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

Sortieren von Spalten

Sortieren von Spalten
22.10.2013 23:15:18
Spalten
Hallo zusammen,
habe folgendes Problem:
Ich habe mit Hilfe von Franz (fcs) aus mehreren Textdateien Daten in
eine Exceltabelle eingelesen. Der VBA-Code funktioniert soweit sehr gut.
Was ich nicht bedacht habe ist, daß das Datum nicht aufsteigend nacheinander
eingelesen wird. (Siehe Anhang)
Ich brauche nun Eure Hilfe, um die Spalten G, H, I, ... nach dem Datum zu
sortieren und zwar so, daß natürlich auch der Spalteninhalt 'mitgenommen' wird.
Ich hoffe, daß mir jemand mit VBA-Code weiterhelfen kann.
Gruß
Georg
https://www.herber.de/bbs/user/87762.xls

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sortieren in Bereichen von Spalten ...
23.10.2013 00:00:53
Spalten
Hallo Georg
In Deinem Bsp. gehts ja nur um
Range("N7:N34") und Range("M7:M34")
Mit:
Range("N7:N34").Cut
Range("M7:M34").Insert Shift:=xlToRight
geht das ganz einfach.
Wenn Du das für alle Spalten brauchst ab dem das Datum steht, solltest Du eine Schleife benutzen
in der Du den größten Datenwert (Datum ist gemeint) ermittelst. Diesen Bereich in der Spalte tauschst Du dann aus mit dem Bereich in der letzten Spalte in der ein Datum steht.
Dann das 2.kleinste Datum und vor das größte Datum setzen usw.
In Deiner Datei hab ich das mal nur für ("M:N") als Denkanstoß realisiert:
Bei jedem Klick werden die beiden Spaltenbereiche getauscht
https://www.herber.de/bbs/user/87764.xls
Wenn Du das nun per Schleife machst kannst Du die Spaltebereiche sortieren.
Also immer das grüßte Datum nach hinten schieben
Lies Dich mal in der Hilfe schlau über Cut und Insert
Gruß Matthias

Anzeige
AW: Sortieren in Bereichen von Spalten ...
23.10.2013 10:45:57
Spalten
Hallo Matthias,
vielen Dank für Deinen Beitrag.
Ich habe dazu noch eine Frage:
Gibt es nicht einen Sortierbefehl für einen gesamten Bereich ?
Beim Einfügen von Filialen im Beispiel (Spalte G) habe ich von FCS
folgenden Code bekommen:
With .Range(.Rows(7), .Rows(lngA))
.Sort key1:=.Cells(1,7), order1:=xlAscending, Header:=xlYes
End With
wobei lngA die Anzahl der Zeilen ist.
Für Info wäre ich dankbar.
Gruß
Georg

AW: Sortieren in Bereichen von Spalten ...
23.10.2013 11:30:09
Spalten
Hallo
Mit dem Codeschnipsel
kann ich nichts anfangen, da definitiv da etwas fehlt.
Wenn Du schreibst:
With .Range muss ein erstes With vorangestellt sein, da Du vor Range einen Punkt hast.
Gruß Matthias

Anzeige
AW: Sortieren in Bereichen von Spalten ...
23.10.2013 12:35:33
Spalten
Hallo Matthias,
ich habe den kompletten VBA-Code, den ich von Franz erhalten habe angehängt.
Hoffe, damit kannst Du mehr anfangen.
Gruß
Georg
https://www.herber.de/bbs/user/87719.xls

fcs: Franz Deine Hilfe wird benötigt ...
24.10.2013 00:38:52
Matthias
Hallo
Sorry, das ist mir zu umfangreich. Warte ob Franz sich meldet
Ich habe mir Deine Datei zwar angesehen, aber Testen konnte ich das ja logischerweise nicht.
Gruß Matthias

AW: Makro-Anpassung für Spaltensortierung
24.10.2013 11:28:37
fcs
Hallo Georg,
hier der 1. Teil des Hauptmakros.
Die zu ändernden/neuen Zeilen sind gekennzeichnet.
mfg
Franz
Sub TxtLesen_Georg()
Dim arrFiles(1 To 9999) As String, lngF As Long, ii As Long
Dim anzeige As String, strVz As String, strVzout As String, strFile As String, _
strFirma As String
Dim wbkTXT As Workbook, wbkXLS As Workbook
Dim wksTXT As Worksheet, wksXLS As Worksheet
Dim lngA As Long, lngZ As Long, lngZeile As Long, lngSpaDatum As Long
Dim anzahl As Long, bewanzahl As Long, verkaufanzahl As Long
Dim varDatum As Variant, varSpalte As Variant, varFiliale As Variant
Dim rngFiliale As Range
Dim bolSort As Boolean, bolSortColumns As Boolean                    'FCS geändert
Application.ScreenUpdating = False
strVz = Range("E9").Value     'Verzeichnis mit den TXT-Dateien
strVzout = Range("E12").Value 'Verzeichnis mit den XLS-Bestands-Dateien
'Zähler auf Startwerte setzen - bei 0 nicht unbedengt nötig, da numerische _
deklarierte Variablen den Standardwert 0 haben
lngF = 0
anzahl = 0
bewanzahl = 0
verkaufanzahl = 0
' Liste der Textdateien in Datenarray einlesen
arrFiles(1) = Dir(strVz & "BESTAND_*.txt")
Do While arrFiles(lngF + 1)  ""
lngF = lngF + 1
arrFiles(lngF + 1) = Dir
Loop
' Abarbeiten der Datei-Liste
For ii = 1 To lngF
Application.StatusBar = "Datei " & Format(ii, "000") & " von " _
& Format(lngF, "000") & " wird bearbeitet"
' Öffnen der Textdatei
Workbooks.OpenText Filename:=strVz & arrFiles(ii), Origin:=xlWindows, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Other:=True, _
OtherChar:="|", FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _
Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), _
Array(8, 1), Array(9, 2), Array(10, 2))
Set wbkTXT = ActiveWorkbook
Set wksTXT = wbkTXT.Worksheets(1)
With wksTXT
lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row ' Anzahl Zeilen in Textdatei
strFile = strVzout & "BESTAND_" & .Cells(2, 10).Text _
& "_ARTIKEL " & .Cells(2, 1).Text & ".xls"
End With 'wksTXT
If Dir(strFile)  "" Then
' Excelmappe existiert bereits
Set wbkXLS = Workbooks.Open(strFile)         'Bestandsdatei öffnen
Set wksXLS = wbkXLS.Worksheets(1)
bolSortColumns = False                                               'FCS neu
bolSort = False                                                      'FCS neu
With wksXLS
' Anzahl bestehende Zeilen in Bestandsdatei in Spalte "Filiale"
lngA = .Cells(.Rows.Count, 7).End(xlUp).Row
'Datum aus Textdatei in Bestandsdatei in Zeile 7 suchen
varDatum = CDate(wksTXT.Cells(2, 9).Text)
varSpalte = Application.Match(CLng(varDatum), .Rows(7), 0)
If IsError(varSpalte) Then
'neues Datum
lngSpaDatum = .Cells(7, .Columns.Count).End(xlToLeft).Column + 1
Call prcDatumFormat(Bereich:=.Cells(7, lngSpaDatum))
.Cells(7, lngSpaDatum).Value = varDatum
bolSortColumns = True                                           'FCS neu
Else
'Datum schon vorhanden
lngSpaDatum = varSpalte
End If
'Daten in Textdatei zeilenweise abarbeiten - Filialen suchen und Werte eintragen
For lngZeile = 2 To lngZ
varFiliale = wksTXT.Cells(lngZeile, 7).Value
'Filiale in Spalte G der Bestandsdatei suchen
Set rngFiliale = .Range(.Cells(8, 7), .Cells(lngA, 7)).Find(What:=varFiliale, _
LookIn:=xlValues, lookat:=xlWhole)
If rngFiliale Is Nothing Then
'Filiale ist neu
lngA = lngA + 1
'Spalten A bis G kopieren
wksTXT.Range(wksTXT.Cells(lngZeile, 1), wksTXT.Cells(lngZeile, 7)).Copy _
Destination:=.Cells(lngA, 1)
'Bestand in Datumspalte eintragen
.Cells(lngA, lngSpaDatum).Value = wksTXT.Cells(lngZeile, 8).Value
bolSort = True 'Merker, dass Daten sortiert werden müssen
Else
'Bestand in Datumspalte eintragen
.Cells(rngFiliale.Row, lngSpaDatum).Value = wksTXT.Cells(lngZeile, 8).Value
End If
Next
'ggf. Zeilen neu sortieren nach Filialen (Spalte G)
If bolSort Then
With .Range(.Rows(7), .Rows(lngA))
.Sort Key1:=.Cells(1, 7), Order1:=xlAscending, Header:=xlYes, _
Orientation:=xlSortColumns                           'FCS geändert
End With
End If
'Breite der bearbeiten/angefügten Datumsspalte optimal setzen
.Columns(lngSpaDatum).AutoFit
'FCS neu - Start
'ggf. Spalten im Datenbereich nach Datum in Zeile 7 Sortieren
If bolSortColumns = True Then
varSpalte = .Cells(7, .Columns.Count).End(xlToLeft).Column
With .Range(.Cells(7, 8), .Cells(lngA, varSpalte))
.Sort Key1:=.Rows(1), Order1:=xlAscending, Header:=xlNo, _
Orientation:=xlSortRows
.EntireColumn.AutoFit
End With
End If
'FCS neu - Ende
End With 'wksXLS
wbkXLS.Close True                            ' Sichere und schließe Excelmappe
wbkTXT.Close False                           ' Schließe Textdatei ohne Sichern
Set wksTXT = Nothing: Set wbkTXT = Nothing
Set wksXLS = Nothing: Set wbkXLS = Nothing
Else

Anzeige
AW: Makro-Anpassung für Spaltensortierung
24.10.2013 11:48:21
Georg
Hallo Franz,
vielen Dank für Deine nochmalige Hilfe.
So funktioniert es wie gewünscht.
Auch an Matthias nochmals einen Dank für seine Bemühungen.
Gruß
Georg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige