Tollen VBA-Code erweitern

26/09/2007 - 13:32 von Frank Vellner | Report spam
Moin,

um Zellinhalte sehr fix zu kombinieren, nutze ich einen tollen Code von
Melanie Breden. Ich weiss nicht, ob ich unten wirklich das Original von
ihr oder eine meiner diversen Varrianten und mit Abwandlungen gepostet
habe. Jedenfalls funktioniert er wie er soll.

Man markiert zwei Bereiche in einem Arbeitblatt. Das Makro nimmt jeden
Wert aus Bereich 1 (1 spaltig) und kombiniert in mit jedem aus Bereich
2 (1 spaltig) und schreibt alles in ein neues Tabellenblatt. So weit so
toll.

Nun benötige ich folgende Erweiterung (an der ich scheitere): Ich
möchte weitere 2 Spalten hinzunehmen. Die Bereiche müssen dafür nicht
"unabhàngig" sein wie bisher. Das Makro behandelt also immer einen 4
spaltigen, zusammenhàngenden Bereich (2 neue Spalten und die bisherigen
Bereiche 1 und 2).

In Spalte 1 ist nun Überschrift 1, in Spalte 2 Überschrift 2, in Spalte
3 die Var. und in Spalte 4 die Const. Bei den Überschriften steht ein
Wert und dann solange nichts mehr, wie nicht ein neuer Set Var.
verarbeitet werden soll. Diese Var. werden jeweils mit den selben
Const. kombiniert.

Nun möchte ich einen Bereich dieser Tabelle selektieren, den das Makro
dann behandelt. Es soll im neuen Tabellenblatt 3 Spalten entstehen:
zunàchst Überschrift 1, dann Überschrift 2 dann die Kombination von
Var. und Const. kommen. Und das so oft, wie Kombis möglich sind. Ein
Beispiel:

Überschr 1|Üb 2|Var.|Cons.
Immobilien|Auto|auto|haus
| |kfz |casa
| |car |hütte
Hausverw. |Radl|radl|
| |bike|
| |fah.|

Ab der Zeile mit neuem Eintrag in 1 und 2 (Immobilien|Radl) soll der
neue Set in 3 mit dem alten in 4 kombiniert werden.

Herauskomen soll im neuen Tabellenblatt:

Immobilien|Auto|auto haus|
Immobilien|Auto|auto casa|
Immobilien|Auto|auto hütte|
Immobilien|Auto|kfz haus|
Immobilien|Auto|kfz casa|
Immobilien|Auto|kfz hütte|
Immobilien|Auto|car haus|
Immobilien|Auto|car casa|
Immobilien|Auto|car hütte|
Hausverw. |Radl|radl haus|
Hausverw. |Radl|radl casa|
Hausverw. |Radl|radl hütte|
Hausverw. |Radl|bike haus|
Hausverw. |Radl|bike casa|
Hausverw. |Radl|bike hütte|
Hausverw. |Radl|fah. haus|
Hausverw. |Radl|fah. casa|
Hausverw. |Radl|fah. hütte|

Und hier das Makro als Grundlage, wo ich aber in diesem Fall an der
Erweiterung gescheitert bin:

Sub Verketten()
Dim wks As Worksheet
Dim rngArea As Range
Dim rngColA As Range
Dim rngColB As Range
Dim rngCellA As Range
Dim rngCellB As Range
Dim lngRow As Long
Dim lngZeilen As Long
Dim intcol As Integer

' Anzahl Zeilen je Spalte die geschrieben werden
lngZeilen = 10000

Set rngArea = Selection
Set wks = Worksheets.Add
' Jede Spalte
For Each rngColA In rngArea.Columns
' Jede Spalte
For Each rngColB In rngArea.Columns
If rngColA.Column <> rngColB.Column Then
' jede Zelle Spalte A
For Each rngCellA In rngColA.Cells
If rngCellA.Value = "" Then Exit For
' jede Zelle Spalte B
For Each rngCellB In rngColB.Cells
If rngCellB.Value = "" Then Exit For
' Anzahl Zeilen je Spalte
If lngRow Mod lngZeilen = 0 Then lngRow = 0: intcol
= intcol + 1
lngRow = lngRow + 1
wks.Cells(lngRow, intcol).Value = rngCellA.Value &
_
" " & rngCellB.Value
Next rngCellB
Next rngCellA
Exit Sub
End If
Next rngColB
Next rngColA
End Sub

Viele Grüße
Frank
 

Lesen sie die antworten

#1 Frank Vellner
27/09/2007 - 16:05 | Warnen spam
Liebe Gruppe,

vielleicht war mein Fehler, dass ich von einer Erweiterung des
vorhandenen Codes ausging. Weil ich mir nichts anderes vorstellen kann.
Wenn natürlich jemand eine Idee hat, die das Problem löst und dabei
ganz andere Wege geht, freue ich mich genau so ;-)

Viele Grüße
Frank

Ähnliche fragen