VBA: wie kann ich einzelne Bereiche kopieren und in einer anderen Tabelle richtig anordnen?
Hallo Zusammen,
ich habe folgendes Problem: Ich soll aus einem ziemlich unübersichtlichen Tabellenblatt Zellen aus bestimmten Spalten (mit bestimmter Überschrift) kopieren und in eine andere Tabelle einfügen, wenn der Inhalt > 0 ist. Das blöde hierbei ist, dass sich die Überschriften nach einiger Zeit wiederholen, die Zellen mit den Werten aber immer weiter unten auftauchen (vielleicht wird das ja im beigefügten Bild deutlich, auch wenn die Farben gewöhnungsbedürftig sind :D). Ich möchte also quasi diese Blöcke nehmen und untereinander anordnen, wobei nicht immer alle Überschriften (also auch die Spaltenanzahl) identisch sind :/
Ich bin für jeden Ansatz dankbar. Schönen Gruß Jan

2 Antworten
Leider kann man mit dem Bild, auch vergrößert nichts anfangen.
Versuche es doch noch mal mit kleineren Ausschnitten und mehreren Bildern.
Am besten mit sichtbaren Spalten- und Zeilenköpfen.
Dazu musst Du hier selbst eine Antwort auf Deine Frage geben.
Wenn Du hier in einem Kommentar darauf hinweist, sehe ich das auch in meiner Übersicht.
Einige Fragen hätte ich auch:
Das Bild suggeriert an einer Stelle, dass es Überlappungen gibt (über dem türkisen Balken rechts stehen farblose Einträge). Ist das so oder ist der erste Eintrag in einer Spalte immer die Überschrift? Falls nicht: Wie wird zwischen Überschrift und Inhalten unterschieden?
Wieviele Zeilen und Spalten gibt es (hinsichtlich Performance)?
Ein erster grober Ansatz (aber nicht unbedingt laufzeitoptimiert...) wäre es Spalte für Spalte durchzugehen. Taucht eine Überschrift auf (bei meinem Beispiel A, B, C) wird die Zielspalte (also wohin das Ergebnis kopiert werden soll) für die weiteren Einträge in dieser Spalte festgelegt, bis eine neue Überschrift erscheint. Im Beispiel stehen die Werte in einer Matrix von 10 Zeilen und 10 Spalten
Sub tt()
For i = 1 To 10 'spalten
For j = 1 To 10 ' zeilen
If Cells(j, i).Value <> "" Then
Select Case Cells(j, i).Value
Case "A": zielspalte = 12
Case "B": zielspalte = 13
Case "C": zielspalte = 14
Case Else: Cells(Cells(Rows.Count, zielspalte).End(xlUp).Row + 1, zielspalte).Value = Cells(j, i).Value
End Select
End If
Next j
Next i
End Sub
Moin Ninombre,
vielen Dank für den Ansatz, den werde ich erstmal weiter verfolgen :)
Gruß
Jan