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

Tabelle mit Hilfe VBA sortieren

Tabelle mit Hilfe VBA sortieren
03.01.2014 21:13:07
Björn
Hallo zusammen,
bisher war das Forum für mich eine große Hilfe bei Problemen rund um Excel. Nun habe ich ein größeres Problem und konnte bisher keine für mich passende Lösung finden. Vielleicht habt Ihr einen Tipp.
Folgendes Problem: Ich habe 500 Excel Dateien(https://www.herber.de/bbs/user/88666.xlsx) mit vorgegebenen Überschriften (Zeile 1), darunter folgen die Werte. Nun war jemand so schlau und hat damit gespielt und die Zeilen wurden eingerückt. Z.B. sind die Werte für Ort plötzlich an der Stelle für die Straße. Kennt Ihr eine Möglichkeit die Liste wieder in die richtige Reihenfolge zu bekommen? Ich habe leider keine Sicherheitskopie der ursprünglichen Daten.
Die Dateien liegen in einem Verzeichnis und die Spalte A + B sind noch richtig gefüllt.
Schönes Wochenende und schon mal vielen Dank!

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle mit Hilfe VBA sortieren
03.01.2014 23:43:37
Chris
Hallo Björn,
es sind hoffentlich keine 500 Dateien, sondern nur 500 Zeilen!
Der einfachste Weg wäre, nach den jeweiligen Spalten (ab Spalte 3) zu sortieren und bei den falschen Einträgen Zellen einzufügen.
Wenn es wirklich 500 Dateien sind, dann hoffe ich für dich, dass jemand anderes dir helfen kann!
LG Chris

AW: Tabelle mit Hilfe VBA sortieren
04.01.2014 00:00:23
Björn
Hallo Chris,
es sind 500 Dateien mit 100 - 2500 Zeilen.
Bei einer Datei würde ich das händisch machen, bei der Menge ist das ne Aufgabe für einen Monat.

AW: Tabelle mit Hilfe VBA sortieren
04.01.2014 00:10:21
Chris
Sorry, da habe ich leider auch keine Idee. Hatte mal ein ähnliches Problem, aber nur mit ein paar Dacteien. Wenn es da eine Lösung gibt, würde sie mich auch interessieren.
LG Chris

Anzeige
AW: Tabelle mit Hilfe VBA sortieren
04.01.2014 00:13:41
Matze
Hallo Björn,
na wer hat denn das geschafft so ein Chaos anzurichten?
Frage zu den Überschriften:
Wert_(Adresse) Wert_(Plz) Wert_(Ort) Wert_(Website),
wie würde denn ein Orginaleintrag dieser Überschriften lauten?
Zahl_(Adresse),Zahl_(PlZ).....?
Plz könnte über numerisch sortiert werden,wird aber auch komplex, ich wart mal deine Antwort ab.
Gruß Matze

AW: Tabelle mit Hilfe VBA sortieren
04.01.2014 00:41:48
Matze
Hallo Björn,
noch eine Frage ist den nach SpalteB wirklich gleich Spalte C mit der richtigen Überschrift?
Oder sind ab Spalte B 2 ausgeblendete Spalten versteckt ?
Ist ja fast unmöglich das wieder gerade zu rücken, zumal dir nachher eh Daten fehlen werden
wenn zb PLZ schon in Spalte C steht wie in deiner Musterdatei dann ist davor nix mehr da.
Matze

Anzeige
AW: Tabelle mit Hilfe VBA sortieren
04.01.2014 01:53:25
Björn
Hallo Matze,
das ist so richtig, es gibt halt Werte die noch fehlen, bedingt dadurch wurde auch das Chaos ausgelöst. Das Chaos hat ein Freund von mir angerichtet, ein Excel Spezialist :-).
Du musst Dir das so vorstellen, Der Wert in den Spalten A, C , E, G, I, K immer gleich (Firma, Adresse 1 ...). Bedingt durch die Anpassung durch den Freund wurden die Zellen ohne Wert gelöscht und alles nach Links gezogen.
Firma | Wert_Firma | Adresse 1 | Wert_Adresse | *leer* | *leer* | PLZ | Wert_PLZ | Ort | Wert_Ort | Website | Wert_Website
Hatte schon was mit Index versucht. Als Bezug hat man ja in jedem Fall immer Spalte A + B, wobei letzteres eine eindeutige Zuordnung wäre.
Björn

Anzeige
AW: Tabelle mit Hilfe VBA sortieren
04.01.2014 02:26:39
Chris
Hast du die Dateien als .csv bekommen?
Chris

Tabelle restrukturieren (VBA)
04.01.2014 02:42:18
Erich
Hi Björn,
ums Sortieren geht es wohl weniger. Ich vermute als Ziel, dass die Daten wieder spaltengerecht in der Tabelle stehen.
Die Beispieltabelle in 88666.xlsx zeigt leider wenig Unterschied zwischen Überschriften und Daten.
Zeile 1 (Überschriften?) ist z. B. identisch mit Zeile 12.
Wie soll denn das Ergebnis aussehen? Wo soll es gespeichert werden?
Hier eine Möglichkeit:
 NOPQRS
1FirmaAdresse 1StraßePLZOrtWebsite
2Wert_FirmaWert_Adresse Wert_PLZWert_OrtWert_Website
3Wert_Firma Wert_StraßeWert_PLZWert_OrtWert_Website
4Wert_Firma  Wert_PLZWert_OrtWert_Website
5Wert_FirmaWert_Adresse    
6Wert_FirmaWert_Adresse    
7Wert_Firma   Wert_OrtWert_Website
8Wert_Firma Wert_StraßeWert_PLZWert_OrtWert_Website
9Wert_Firma  Wert_PLZWert_OrtWert_Website
10Wert_FirmaWert_Adresse    
11Wert_Firma   Wert_OrtWert_Website
12Wert_FirmaWert_AdresseWert_StraßeWert_PLZWert_OrtWert_Website
13Wert_FirmaWert_Adresse Wert_PLZWert_OrtWert_Website
14Wert_Firma   Wert_OrtWert_Website
15Wert_FirmaWert_Adresse    
16Wert_FirmaWert_Adresse    
17Wert_Firma   Wert_OrtWert_Website
18Wert_Firma Wert_StraßeWert_PLZWert_OrtWert_Website
19Wert_Firma  Wert_PLZWert_OrtWert_Website
20Wert_FirmaWert_Adresse    
21Wert_Firma   Wert_OrtWert_Website
22Wert_FirmaWert_AdresseWert_StraßeWert_PLZWert_OrtWert_Website
23Wert_FirmaWert_Adresse Wert_PLZWert_OrtWert_Website
24Wert_Firma   Wert_OrtWert_Website


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Dass man hier nicht so furchtbar viel erkennen kann, liegt an deinen Beispieldaten...
Es fehlen jedenfalls die Daten in den Quellzellen B1, D1, F1, H1, J1, L1. (In Zeile 1 sollten Überschriften stehen.)
Soll das Ergebnis so werden?
Erstellt habe ich das (erst mal ein gerade aktives Blatt) mit Option Explicit Sub ReStrukt() Dim lngZ As Long, lngS As Long, arQ, arE() Dim zz As Long, ss As Long, tt As Long lngZ = Cells(Rows.Count, 1).End(xlUp).Row lngS = Cells(1, Columns.Count).End(xlToLeft).Column arQ = Cells(1, 1).Resize(lngZ, lngS) ReDim arE(1 To lngZ, 1 To lngS / 2) For ss = 1 To UBound(arE, 2) arE(1, ss) = arQ(1, 2 * ss - 1) Next ss For zz = 2 To UBound(arQ) For ss = 1 To UBound(arQ, 2) For tt = 1 To UBound(arE, 2) If arE(1, tt) = arQ(zz, ss) Then arE(zz, tt) = arQ(zz, ss + 1) Exit For End If Next tt Next ss Next zz Cells(1, lngS + 2).Resize(lngZ, UBound(arE, 2)) = arE End Sub Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Tabelle restrukturieren (VBA)
04.01.2014 10:52:55
Björn
Hallo Erich,
das sieht sehr gut aus! Da ich nun eine Sicherheitskopie der Daten habe, könnten diese im gleichen Verzeichnis mit gleichem Namen gespeichert werden. Die Werte werden nach ausführen des Codes ab Spalte V eingefügt. Ich müsste eine Möglichkeit haben, dass die Dateien nacheinander geöffnet werden, Spalte A-U gelöscht und abgespeichert wird.
Kannst Du mir da auch weiter helfen?
Vielen lieben Dank für die Hilfe!
Björn

AW: Tabelle restrukturieren (VBA)
04.01.2014 12:55:52
Erich
Hi Björn,
vor weiterer Hilfe wären m. E. noch ein paar Fragen zu klären.
Ich hatte geschrieben:
"Es fehlen jedenfalls die Daten in den Quellzellen B1, D1, F1, H1, J1, L1. (In Zeile 1 sollten Überschriften stehen.)"
1. Frage:
Ist das so in Ordnung, dass die Daten in B1 usw. einfach wegfallen?
2. Frage:
Eine Excelmappe enthält oft mehrere Tabellenblätter. Ist das bei deinen Mappen so?
Oder soll immer ein bestimmtes Blatt (Name?) der jeweiligen Mappe bearbeitet werden?
3. Frage:
Zumindest beim Testen würde mich sehr stören, dass die Ursprungsdaten überschrieben werden.
Damit ist kein Test einfach wiederholbar. Willst du das trotzdem so handhaben?
4. Frage: Du schreibst:
"Die Werte werden nach ausführen des Codes ab Spalte V eingefügt. Ich müsste eine Möglichkeit haben,
dass die Dateien nacheinander geöffnet werden, Spalte A-U gelöscht und abgespeichert wird."
Das verstehe ich nicht.
Wer oder was fügt welche Werte nach Ausführen des Codes ab Spalte V ein?
Wann sollen wodurch die Spalten A:U gelöscht werden?
5. ist keine Frage, sondern eine Bitte:
Lad doch bitte mal eine konkrete Beispielmappe hoch, in der Überschriften und Daten als solche erkennbar sind.
So ca. 5 Datensätze sollten ausreichen, die Daten kannst du ja anonymisieren.
Die Mappe sollte ein Blatt mit dem derzeitigen Aufbau und ein zweites Blatt mit dem gewünschten Ergebnis
enthalten.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
noch eine Frage
04.01.2014 13:01:42
Erich
Hi Björn,
in deiner Beispieltabelle stehen in E5:E6 die Texte Straße und PLZ, aber die Zellen F5:F6 sind leer.
(tritt auch weiter unten mehrfach auf)
Kommt derartiges in deinen realen Daten auch vor?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: noch eine Frage
04.01.2014 14:00:51
Björn
Hallo Erich,
1.) Ja, das wäre in Ordnung, ist sogar besser als die vorherige Version. Ich weiß ja anhand der Überschrift, wo was ist.
2.) Nein, immer nur eine um immer Tabelle1
3.) Ich habe jetzt mal 10 Dateien getestet, funktioniert einwandfrei. Ich habe zur Not eine Sicherung der Daten gemacht. :-)
4.) In der Original Datei stehen die Werte in Spalte A - T, wenn ich das Script ausführe, werden die Daten richtig in Spalte V - AE rekonstruiert, deshalb müssten nach deinen geposteten Script die Spalten A:U gelöscht werden, dann wäre die Tabelle im richtigen Zustand.
5.) Ich habe Dir eine angepasste Originaldatei hochgeladen mit 3 Tabellen. https://www.herber.de/bbs/user/88671.xlsx
a.) Quelldatei: Ist das Original
b.) Quelldatei nach Script: Wie die Datei nach Ausführung des VBA´s aussieht
c.) Zieldatei: Wie es aussehen soll
Bezüglich der E5:E6 und F5:F6, das war ein Fehler beim erstellen der Datei.
Vielen Dank für die Hilfe!
Liebe Grüße
Björn

Anzeige
mit Dateienschleife
04.01.2014 16:55:38
Erich
Hi Björn,
du schriebst ja, dass du eine Sicherung hast...
Probier mal

Option Explicit
Sub SchleifeDateien()
Dim strVz As String, strD As String
Const cVrz As String = "c:\temp"    ' hier Verzeichnis festlegen
Const cTyp As String = "xlsx"       ' hier Dateityp    festlegen
strVz = cVrz & IIf(Right(cVrz, 1) = "\", "", "\")
strD = Dir(strVz & "*." & cTyp)
Do While strD  ""
Workbooks.Open strVz & strD   ' öffnet die nächste Mappe
Sheets("Tabelle1").Select
ReStrukt
Workbooks(strD).Close True    ' speichert und schließt die Mappe
strD = Dir()
Loop
End Sub
Sub ReStrukt()  ' arbeitet auf dem gerade aktiven Tabellenblatt
Dim lngZ As Long, lngS As Long, arQ, arE()
Dim zz As Long, ss As Long, tt As Long
lngZ = Cells(Rows.Count, 1).End(xlUp).Row
lngS = Cells(1, Columns.Count).End(xlToLeft).Column
arQ = Cells(1, 1).Resize(lngZ, lngS)
ReDim arE(1 To lngZ, 1 To lngS / 2)
For ss = 1 To UBound(arE, 2)
arE(1, ss) = arQ(1, 2 * ss - 1)
Next ss
For zz = 2 To lngZ
For ss = 1 To lngS
If IsEmpty(arQ(zz, ss)) Then Exit For
For tt = 1 To UBound(arE, 2)
If arE(1, tt) = arQ(zz, ss) Then
arE(zz, tt) = arQ(zz, ss + 1)
Exit For
End If
Next tt
Next ss
Next zz
Range(Cells(1, 1), Cells(1, lngS)).EntireColumn.Delete
Cells(1, 1).Resize(lngZ, UBound(arE, 2)) = arE
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: mit Dateienschleife
04.01.2014 22:01:36
Björn
Hallo Erich,
ich weiß nicht wie ich das in Worte fassen soll was ich grade denke.
Du hast mir echt viel Arbeit erspart, vielen vielen Dank für die Hilfe. Hat super funktioniert, 500 Dateien in unter 5 Minuten.
1000 Dank!
Björn

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige