Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Arrays zusammenführen VBA

Arrays zusammenführen VBA
KLE
Hallo,
ich noch mal. Dachte das könnte ich allein - klappt aber irgendwie nicht.
Daher brauche ich noch einmal Eure Hilfe mit Arrays.
Code:
Sub tt()
Dim i As Long, arrTmp(1 To 50), sBody As String
For i = 1 To 50
arrTmp(i) = Cells(i, 1) & ": " & Cells(i, 2)
Next
sBody = Join(arrTmp, vbCrLf)
'sBody dann in die Mail einfügen
End Sub

Habe nun den Code genutzt. Jetzt ist es aber so, dass ich mehrere Bereiche habe (naja, Cheffe).
(Zeile 1-9 und Zeile 15-24 und Zeile 37-40 sowie Zeile 50 einzeln)
Dachte ich lege einzelne Arrays an:
arrTmp1, arrTmp2 usw. mit den jeweiligen Bereichen. Aber wie bekomme ich nun alle arrTmp's in ein Gesamt arrTmpGesamt ?!?!
Vielen Dank und Gruß
Kay
PS:
Das war die Frage vorhin, deren Code ich nun nutze:
https://www.herber.de/forum/messages/1186262.html
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Arrays zusammenführen VBA
11.11.2010 14:11:49
Rudi
Hallo,
ein Array reicht.
Sub tt()
Dim i As Long, arrTmp(), sBody As String, iCounter As Integer
ReDim arrTmp(1 To 100)
For i = 1 To 9
iCounter = iCounter + 1
arrTmp(iCounter) = Cells(i, 1) & ": " & Cells(i, 2)
Next
For i = 15 To 24
iCounter = iCounter + 1
arrTmp(iCounter) = Cells(i, 1) & ": " & Cells(i, 2)
Next
For i = 37 To 40
iCounter = iCounter + 1
arrTmp(iCounter) = Cells(i, 1) & ": " & Cells(i, 2)
Next
iCounter = iCounter + 1
arrTmp(iCounter) = Cells(50, 1) & ": " & Cells(50, 2)
ReDim Preserve arrTmp(1 To iCounter)
sBody = Join(arrTmp, vbCrLf)
'sBody dann in die Mail einfügen
End Sub

Gruß
Rudi
Anzeige
AW: Danke !
11.11.2010 22:15:17
KLE
Hi Rudi,
sorry, dass ich mich erst jetzt melde...kam nicht vorher dazu. ;o(
Habe es probiert und es klappt. Danke !
Vielleicht, wenn es jemand weiß - würde es mich schon interessieren,
wie man mehrere Arrays zusammen packen kann. Gibt es dafür auch
irgend eine Anweisung ?
Gruß
Kay
Anzeige
AW: Danke !
12.11.2010 09:59:21
Rudi
Hallo,
mit eindimensionalen Arrys geht das relativ einfach:
Sub xxx()
Dim arr1(1 To 10), arr2(1 To 5), arr3(1 To 8), arr0
Dim str1 As String, str2 As String, str3 As String
Dim i As Integer
Const sDelim As String = "|"  'Trennzeichen
'Array füllen
With Sheets(1)
For i = 9 To 18
arr1(i - 8) = .Cells(i, 1) & ":" & .Cells(i, 2)
Next
For i = 24 To 28
arr2(i - 23) = .Cells(i, 1) & ":" & .Cells(i, 2)
Next
For i = 35 To 42
arr3(i - 34) = .Cells(i, 1) & ":" & .Cells(i, 2)
Next
End With
'Arrays in Strings umwandeln
str1 = Join(arr1, sDelim)
str2 = Join(arr2, sDelim)
str3 = Join(arr3, sDelim)
arr0 = Join(Array(str1, str2, str3), sDelim) 'die 3 Strings zusammenführen
arr0 = Split(arr0, sDelim)  'String in Array umwandeln
'Alternativ ohne Zwischenschritte
'  arr0 = Split(Join(Array(Join(arr1, sDelim), Join(arr2, sDelim), Join(arr3, sDelim)), sDelim), _
sDelim)
End Sub

Bei mehrdimensionalen Arrays nur per Schleife.
Gruß
Rudi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Arrays zusammenführen mit VBA


Schritt-für-Schritt-Anleitung

Um Arrays in Excel VBA zusammenzuführen, kannst du die folgende Schritt-für-Schritt-Anleitung nutzen. Diese Anleitung zeigt dir, wie du mehrere Bereiche in einem Array zusammenfassen kannst.

  1. Deklaration der Variablen:

    Dim arrTmp() As String
    Dim i As Long, iCounter As Integer
  2. Redimensioniere das Array:

    ReDim arrTmp(1 To 100) ' Anpassung je nach Bedarf
  3. Fülle das Array mit Daten: Hier fügst du die gewünschten Zelleninhalte in das Array ein.

    For i = 1 To 9
       iCounter = iCounter + 1
       arrTmp(iCounter) = Cells(i, 1) & ": " & Cells(i, 2)
    Next
  4. Füge weitere Bereiche hinzu:

    For i = 15 To 24
       iCounter = iCounter + 1
       arrTmp(iCounter) = Cells(i, 1) & ": " & Cells(i, 2)
    Next
  5. Redimensioniere das Array, um die genaue Größe zu berücksichtigen:

    ReDim Preserve arrTmp(1 To iCounter)
  6. Verwende die Join-Funktion: Füge die Elemente des Arrays in einen String zusammen.

    Dim sBody As String
    sBody = Join(arrTmp, vbCrLf)
  7. Füge den String in die E-Mail ein.


Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des Bereichs."

    • Lösung: Überprüfe, ob du die Array-Größe korrekt dimensioniert hast. Stelle sicher, dass der Index innerhalb der festgelegten Grenzen liegt.
  • Fehler: sBody wird nicht korrekt gefüllt.

    • Lösung: Überprüfe, ob alle Schleifen korrekt durchlaufen werden und dass du das Array nach dem Füllen nicht zu früh redimensionierst.

Alternative Methoden

Es gibt mehrere Möglichkeiten, um Arrays zusammenzuführen. Eine alternative Methode ist die Verwendung von Strings anstelle von Arrays.

Sub JoinArrays()
    Dim arr1(1 To 10), arr2(1 To 5)
    Dim str1 As String, str2 As String
    Dim sDelim As String
    sDelim = "|"

    ' Arrays füllen
    ' ...

    ' Arrays in Strings umwandeln
    str1 = Join(arr1, sDelim)
    str2 = Join(arr2, sDelim)

    ' Zusammenführen der Strings
    Dim combined As String
    combined = str1 & sDelim & str2
End Sub

Diese Methode ist besonders nützlich, wenn du die Werte in einem bestimmten Format benötigen möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele, die du in deinen Projekten nutzen kannst:

  1. Ein einfaches Beispiel für das Zusammenführen von zwei Arrays:

    Sub SimpleArrayJoin()
       Dim arr1() As String
       Dim arr2() As String
       Dim result() As String
    
       arr1 = Split("A|B|C", "|")
       arr2 = Split("1|2|3", "|")
    
       result = Join(Array(Join(arr1, "|"), Join(arr2, "|")), "|")
       MsgBox Join(result, "|")
    End Sub
  2. Zusammenführen von mehrdimensionalen Arrays:

    Sub MergeMultiDimensionalArrays()
       Dim i As Long
       Dim arr(1 To 3, 1 To 2) As String
    
       ' Fülle das Array
       For i = 1 To 3
           arr(i, 1) = "Wert" & i
           arr(i, 2) = "Zusatz" & i
       Next i
    
       ' Ausgabe
       For i = 1 To 3
           Debug.Print arr(i, 1) & " " & arr(i, 2)
       Next i
    End Sub

Tipps für Profis

  • Verwende ReDim Preserve sorgfältig: Diese Funktion kann die Leistung beeinträchtigen, wenn sie zu oft aufgerufen wird. Optimiere die Dimensionierung, wo immer möglich.
  • Nutze benannte Bereiche: Dies kann helfen, deine Codequalität zu verbessern und die Lesbarkeit zu erhöhen.
  • Teste deinen Code: Stelle sicher, dass du genügend Testdaten hast, um alle möglichen Szenarien abzudecken.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Arrays in einem einzigen Array zusammenführen? Du kannst die Join-Funktion verwenden, um die Arrays in Strings umzuwandeln und diese dann erneut in ein Array zu splitten.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der Code sollte in allen modernen Versionen von Excel funktionieren, die VBA unterstützen.

3. Was ist der Unterschied zwischen eindimensionalen und mehrdimensionalen Arrays? Eindimensionale Arrays haben nur eine Dimension (z.B. eine Liste), während mehrdimensionale Arrays mehrere Dimensionen haben (z.B. eine Tabelle).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige