6.5k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo zusammen,

wegen eines Arbeitsauftrags bleibt mir nichts anderes übrig, als hier um Hilfe zu bitten, da ich trotz meiner informatischen Ausbildung keinen blassen Schimmer von VBA habe.

Es geht darum, dass mir ein Excel-Sheet vorliegt, mit ca. 500.000 Spalten und etwa 30 Zeilen. Die Headline der Spalten ist oft fünf- oder sechsfach vorhanden, d.h. es gibt dort viele Wiederholungen - und genau das ist der Punkt. Benötigt werden nur jene Spalten, die in einer bestimmten Zeile einen bestimmten Wert haben, die restlichen, gleichnamigen Spalten, würden dann im neuen Sheet wegfallen und man hätte nur jene Daten, die wirklich benötigt würden.

Beispiel:

A... 45| 45| 45| 46| 46| 46| 47| 47 ...
B... X | X | X | X | X | X | X | X ...
C... 3 | 1 | Z | 4 | Z | 7 | Z | 2 ...


Die Zellen mit dem Z wären hier bspw. ausschlaggebend. Diese Zeilen und Spalten sollten dann mit allen übrigen Werten dieser Konstellation übernommen werden.

Ich hoffe ihr könnt mir helfen...

7 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

vielleicht geht es nur mir so, aber mir ist nicht klar, was genau du willst:

Benötigt werden nur jene Spalten, die in einer bestimmten Zeile einen bestimmten Wert haben,

Hier würde ich sagen, du willst die betreffende Spalte in ein neues Arbeitsblatt kopiert haben.
Weiter unten schreibst du jedoch:
Diese Zeilen und Spalten sollten dann mit allen übrigen Werten dieser Konstellation übernommen werden.

Soll dann die jeweilige Zeile und Spalte kopiert werden? Oder meinst du was ganz anderes?

Am besten lädst du mal eine Beispieldatei hoch, z.B. hier, in der ein paar Dummydaten ähnlich deiner Ausgangsdatei stehen und auch wie das Ergebnis aussehen soll. Den Link kannst du dann hier posten.

Übrigens hat Excel meines Wissens in den neueren Versionen maximal 16.384 Spalten. Insofern kann auch deine Aussage
ca. 500.000 Spalten und etwa 30 Zeilen.

nicht ganz stimmen (vielleicht Zeilen und Spalten vertauscht?).

Gruß

M.O.
0 Punkte
Beantwortet von
Hi M.O.,

danke für deine Antwort.

Irrtümlicherweise wurden Zeilen und Spalten (wegen der Ansicht in InfoZoom) vertauscht. Du hast also recht.

Soll dann die jeweilige Zeile und Spalte kopiert werden? Oder meinst du was ganz anderes?


Nein, genau das. Die jeweilige Zeile und Spalte soll in das neue Sheet übernommen werden.
Das betrifft mehrere Fälle, sollen aber alle in ein Sheet.

Anbei ein Auszug.
Link

Danke!
0 Punkte
Beantwortet von
Nachtrag:

Hinweis zur Datei:
Wenn bStep = ? und order = y, dann soll diese Zeile&Spalte übernommen werden.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

vielleicht bin ich ja heute schwer von Begriff, aber wie soll denn das Ergebnis aussehen, wenn die betreffende Zeile und Spalte(n) in ein neues Blatt kopiert werden sollen?

bstep und order sind ja zwei Spalten. Soll dann also z.B. die Zeile 3 deiner Beispieldatei mit den betreffenden beiden Spalten in ein neues Blatt kopiert werden.
Stelle am besten mal in deiner Beispieldatei auf einem anderen Tabellenblatt dein gewünschtes Ergebnis dar (und poste das wieder).

Gruß

M.O.
0 Punkte
Beantwortet von
Sorry, wenn ich nicht genau genug war.

Um konkreter zu werden:

Wonach gesucht ist:
bStep = 5 und
order = y

Hier nochmal das Excel-Sheet mit je einem Tabellenblatt für Ausgang und Ergebnis. Die entsprechenden Werte wurden in "ausgang" hervorgehoben.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

also ganz normal die Zeilen kopieren :-).

Das folgende Makro gehört in ein allgemeines Modul deiner Arbeitsmappe:

Sub kopieren()

Dim i As Integer
Dim bExists As Boolean
Dim quelle, wsname As String
Dim lz, zeile, zzeile As Long
Dim Rückgabe

'Name des aktuellen Arbeitsblatts in Variable schreiben
quelle = ActiveSheet.Name

' Testen ob's ein Sheet mit dem Namen des Zielarbeitsblatts gibt
wsname = "Zusammenfassung" 'Name des Zielarbeitsblattes

For i = 1 To Sheets.Count
If Sheets(i).Name = wsname Then
bExists = True
'Frage, ob Daten kopiert werden sollen
Rueckgabe = MsgBox("Das Arbeitsblatt " & wsname & " existiert bereits! Sollen ggf. vorhandene Daten überschrieben werden?", vbYesNo + vbQuestion, "Daten kopieren?")
'Abbruch des Makros
If Rueckgabe = vbNo Then Exit Sub
'alle Daten im Zielarbeitsblatt löschen
lz = Worksheets(wsname).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Sheets(wsname).Range("A1:A" & lz).EntireRow.Delete xlShiftUp
Exit For
End If
Next i

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'Benachrichtigungen ausschalten
Application.DisplayAlerts = False


If bExists = False Then
'Neues Blatt wird am Ende eingefügt
Worksheets.Add After:=Worksheets(Worksheets.Count)
'Neues Blatt benennen
ActiveSheet.Name = wsname
End If

'Überschrift kopieren
Worksheets(quelle).Rows("1:1").Copy Destination:=Worksheets(wsname).Range("A1")

'Marker für einzufügende Zeilen wird gesetzt
zzeile = 2

For zeile = 2 To Worksheets(quelle).UsedRange.SpecialCells(xlCellTypeLastCell).Row
'Prüfen ab in Spalte 13 "5" und in Spalte 24 "y" steht
If Worksheets(quelle).Cells(zeile, 13) = "5" And Worksheets(quelle).Cells(zeile, 24) = "y" Then
Worksheets(quelle).Rows(zeile).Copy Destination:=Worksheets(wsname).Cells(zzeile, 1)
zzeile = zzeile + 1
End If
Next zeile

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

'Benachrichtigungen einschalten
Application.DisplayAlerts = True

'Meldung, dass Daten kopiert wurden
MsgBox "Die Daten wurden kopiert!", 64, "Information"

'auf Arbeitsblatt mit kopierten Daten wechseln
Worksheets(wsname).Activate

End Sub


Der Code ist aus dem Blatt mit den vorhandenen Daten auszuführen. Die gefundenen Daten werden in eine Tabelle mit dem Namen "Zusammenfassung" kopiert (den Namen kannst du beliebig ändern).

Gruß

M.O.
0 Punkte
Beantwortet von palloxus Einsteiger_in (5 Punkte)
Genial! Danke danke danke! :)
...