Excel Tabelle in eine "Liste" umwandeln

...komplette Frage anzeigen

2 Antworten

geht in einem Schub nur mit einem Makro:

Sub BereichAlsSpalteListen() 'Vorr: markierter Bereich
Dim c
'Range("B32:V44").Select 'optional, ist auskommentiert. ggf. Bereich anpassen
Activesheet.Range("B99") = "einspaltige Liste aus Bereich:"
Activesheet.Range("B100") = Selection.address

For Each c In Selection
On Error Resume Next

If IsError(c.Value) Or c.Value = False Then
GoTo weiter
'hier kein Doppelpunkt!
Else
Range("B99").End(xlDown).Offset(1, 0).Value = c.FormulaLocal
End If
weiter:
'weiter ist eine so benannte Zeile, auch Sprungmarke genannt. Der : ist unbedingt nötig!
Next

End Sub

Das kopiert von links nach rechts und dann zeilenweise nach unten in den Bereich B102:Bnn. Formeln würden dabei erhalten bleiben mit ihren ursprünglichen Bezügen.
Alles was Falsch oder Fehler (#Bezug!, #Wert!, #Div/0! etc) ergibt, wird übersprungen, auch leere Zellen.

Willst Du den Bereich erst von oben nach unten und dann erst spaltenweise von links nach rechts auswerten, musst Du ihn erst stürzen (dabei musst Du auf den Erhalt von Formeln verzichten):
kopiere den Bereich. Geh auf einen ausreichend großen freien Platz (nicht persönlich, sondern mit dem Cursor ;), wähle Inhalte einfügen, Werte und setz das Häkchen bei Transponieren.
bevor Du das Makro startest, musst Du den Bereich auswählen (mit shift+Pfeiltasten oder Maus markieren)! (Selection ist die Auswahl, for each c in Selection liest xl als Prüfe jede Zelle der Auswahl)
Der Bereich B99 und unterhalb wird überschrieben, falls da was drinsteht! ggf andere Adresse ins Makro schreiben!

Eine gute Anweisung zur Installation eines Makros/einer Funktion kam mal von Suboptimierer in
www.gutefrage.net/frage/formel-problem-bei-ms-excel
(als Kommentar recht weit unten in der hilfreichsten Antwort)

Iamiam 28.01.2013, 00:07

wenn Du keine Formeln übernehmen willst, schreib im Makro anstelle von
c.FormulaLocal
einfach
c.Value
Dann werden nur die fixen Werte übertragen bzw die Formelergebnisse als fixe Werte.

0
Iamiam 28.01.2013, 13:26
@Iamiam

Hab Dir noch ein Makro auf Deine speziellen Daten zurechtgestrickt:

Sub BereichSZinSpaltenListen()
Dim s, Sl, Sr, z, Zo, Zu 'Spalte links 2=B , Spalte rechts 22=V , Zeile oben 32 , Zeile unten 44 ist Vorgabe googleFTW Sl = 2: Sr = 22: Zo = 32: Zu = 44 '<<ggf neu definieren! getestet mit 2,5,95,98
Activesheet.Range("B99") = Now 'Now: Zelle formatieren =>Datums-/Zeit-ZAHL, oder als Text: Format(Now, "d.MMM'YY, hh:mm")
Range("B100") = Range(Cells(Zo, Sl), Cells(Zu, Sr)).Address
For s = Sl To Sr 's = Sl To Sr wenn erst s(s aussen, z innen):erst nach unten, dann weitere Spalten
For z = Zo To Zu 'z = Zo To Zu wenn erst z(z aussen, s innen):erst nach rechts, dann weitere Zeilen
On Error Resume Next
If IsError(Cells(z, s).Value) Or Cells(z, s).Value = False Then
GoTo weiter
Else
Range("B99").End(xlDown).Offset(1, 0).Value = Cells(z, s).Value 'oder .FormulaLocal :übernimmt dann Formeln
End If
weiter:
Next z 's,z korrespondierend zu For ... vertauschen: innen<=>innen, aussen<=>aussen jeweils gleich
Next s
Range("B99:B999").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'schiebt kopierte Daten eins nach rechts
End Sub

in der vorliegenden Form werden erst die Zellen einer Spalte gelistet, dann die der nächsten Spalte: anders als beim ersten µ, aber einstellbar.
Wenn Du den Zielbereich ändern willst, musst Du mehrere Adressen ändern! Das Makro macht das ursprüngliche Zielgebiet wieder frei, die gewünschte Formatierung in B99:B100 (und ggf darunter) solltest Du in den entsprechenden Zellen der Spalte A einfügen, sie werden dann immer beim Versetzen der alten in die neuen leeren Zellen kopiert. ich hoffe, Du kommst damit zurecht!

0

Also spontan fällt mir nur ein, dass ganze "zu Fuß" zu machen, zumal es sich in diesem Fall ja um eine überschaubare Anzahl an Daten handelt. Soll heissen: z.B. die Daten in Spalte C markieren, rechte Maustaste drücken, ausschneiden und unter Spalte B wieder einfügen (vorher natürlich auch die rechte Maustaste drücken), dann das gleiche mit Spalte D usw. Die Zellen, in denen FALSCH steht können anschließend einfach gelöscht werden. Das System fragt dann automatisch, ob die darünterliegenden Zellen nach oben geschoben werden sollen. Das dann einfach anklicken und et voilá - eine neue Liste ist fertig.

googleFTW 27.01.2013, 23:00

das ist nicht der sinn von excel. alle werte in der tabelle sind abhängig von anderen variablen, sodass ich das theoretisch jedes mal machen müsste, wenn ich eine variable ändere.

0
Tueddelband 27.01.2013, 23:06

Eventuell könnte dann der allseits beliebte SVERWEIS helfen (findest du unter FUNKTIONEN). Ist jetzt allerdings etwas kompliziert den SVERWEIS hier zu erklären bzw. wäre es natürlich besser, wenn ich die Tabelle sehen könnte. Aber ich nehme mal an, du hast den eh schon ausgetestet?

0

Was möchtest Du wissen?