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

Array verändern/erweitern

Forumthread: Array verändern/erweitern

Array verändern/erweitern
12.06.2004 20:06:05
NE
Hallo zusammen,
mal eine Frage, wie kann ich aus einem Array das so ausschaut
arr(0)=1
arr(1)=2
arr(2)=3
arr(3)=4
arr(4)=5
arr(5)=6
sowas machen:
arr(0)=1
arr(1)=2
arr(2)=0
arr(3)=3
arr(4)=4
arr(5)=0
arr(6)=5
arr(7)=6
arr(8)=0
also immer nach zwei Werten einen Wert mit 0 hinzufügen.
Hab' schon rumgedoktert, sitz aber total auf der Leitung momentan.
Denke nun bald, das geht überhaupt nich ...

Sub z()
Dim i%, arr#(0 To 5)
For i = 0 To 5
arr(i) = i + 1
Next
'crazy arr
End Sub


Sub crazy(x)
Dim i%
For i = LBound(x) To UBound(x) Step 2
ReDim Preserve x(0 To i + 1)
x(i + 1) = 0
Next
End Sub

Gruss
Nancy
Anzeige
AW: Array verändern/erweitern
K.Rola
Hallo,
meinst du das so?
Option Explicit
Option Base 1

Sub Beispiel()
Dim arr(30) As Long, i As Long, j As Long
For i = 1 To 30
If i Mod 3 = 0 Then
arr(i) = 0
Else
j = j + 1
arr(i) = j
End If
Next
End Sub

Gruß K.Rola
AW: Array verändern/erweitern
NE
Hi K.Rola :-)
Dank Dir erstmal for codez,
So mein ich das ... is aber eben nur theoretisch so machbar, leider.
Das Problem an der Kiste ist praktisch so, dass arr(30) nicht bekannt ist
und ich arr(?) nicht fülle, sondern es wurde gefüllt,
und ist somit für mich gegeben ;-)
Ich müsste also arr(?) umbiegen in ein neues Array,
irgendwie sowas dann arrNeu(? + ?/3) oder so
Hoffe das kommt irgendwie rüber, was ich mein,
und probier scho ne Ecke rum, hab' aber absolut keine Peilung mehr,
sowas geht auch nich:

Sub z()
Dim i%, arr#(0 To 5)
For i = 0 To 5
arr(i) = i + 1
Next
crazy arr
End Sub


Sub crazy(oldArr)
Dim i%, newArr
newArr = oldArr
For i = LBound(oldArr) To UBound(oldArr) Step 2
ReDim Preserve newArr(0 To i + 1)
newArr(i + 1) = 0
Next
oldArr = newArr
End Sub

Gruss
Nancy
Anzeige
AW: Array verändern/erweitern
K.Rola
Hallo,
ich beginne zu verstehen, glaub ich.
Du hast ein Array, du Glückspilz, sowas suche ich seit Jahren, von dem
du die Dimension nicht kennst, willst es in ein neues Array umschaufeln
und nach jedem zweiten Element eine 0 einbauen? So richtig?
Gruß K.Rola
AW: Array verändern/erweitern
K.Rola
Hallo,
hab jetzt gerade erst die Antwort von FP gesehen, das zweite Beispiel
sollte funktionieren.
Gruß K.Rola
Anzeige
Egal, trotzdem thx@you
NE
Hi K.Rola,
ja, grade gelesen & probiert gehabt.
Danke nochmals trotzdem ;-)
Gruss Nancy
AW: Array verändern/erweitern
FP
Hallo Nancy,
und warum nicht so?
Public arr1(33) As Integer
Public arr2() As Integer

Sub FillArr1()
Dim intC1     As Integer
For intC1 = 0 To UBound(arr1)
arr1(intC1) = Fix(Rnd * 99) + 1
Next
ResizeArr arr1()
End Sub


Sub ResizeArr(arr)
Dim intC1     As Integer
Dim intC2     As Integer
ReDim arr2(Fix(UBound(arr) * 1.5) + 2)
For intC1 = 0 To UBound(arr)
If intC2 Mod 3 = 0 Then intC2 = intC2 + 1
arr2(intC2) = arr(intC1)
intC2 = intC2 + 1
Next
End Sub

Servus aus dem Salzkammergut
Franz
Anzeige
AW: Array verändern/erweitern
FP
Hallo Nancy,
meinst Du das so?

Sub Nancy1()
Dim arr(11) As Integer
Dim intC    As Integer
Dim intMax  As Integer
For intC = 0 To UBound(arr)
If intC Mod 3 Then
intMax = intMax + 1
arr(intC) = intMax
End If
Next
End Sub

oder so ? ( bestehendes Array vergrössern )
Public arr1(7) As Integer
Public arr2() As Integer

Sub Nancy2()
Dim intC1     As Integer
Dim intC2     As Integer
For intC1 = 0 To UBound(arr1)
arr1(intC1) = Fix(Rnd * 99) + 1
Next
ReDim arr2(UBound(arr1) + Fix(UBound(arr1) / 2) + 1)
For intC1 = 0 To UBound(arr1)
If intC2 Mod 3 = 0 Then intC2 = intC2 + 1
arr2(intC2) = arr1(intC1)
intC2 = intC2 + 1
Next
For intC2 = 0 To UBound(arr2)
Debug.Print intC2, arr2(intC2)
Next
End Sub

Servus aus dem Salzkammergut
Franz
Anzeige
AW: Array verändern/erweitern
NE
Hallo Franz,
'Nancy2' kommt dem doch schon sehr nahe, vümoas Danke :-)
Statt dem "Leer" müsste zwar noch ne 0 rein und item(0) darf auch nich 0 bzw. leer sein,
aber Du hast mir da schonmal nen guten Ansatz gegeben,
mal schauen ob ich die Nuss noch selber knacken kann ;-)
Muchas Gracias
Gruss Nancy

Anzeige
AW: Array verändern/erweitern
FP
Hallo Nancy,
dazu brauchst Du nur die Zeile mit MOD wie folgt ersetzen
If (intC2 + 1) Mod 3 = 0 Then intC2 = intC2 + 1
dann wird Element 0 und 1 belegt 2 nicht, 3 + 4 belegt, 5 nicht ...
Servus aus dem Salzkammergut
Franz
perfekt
NE
Dank Dir nochmal Franz :-)
Gruss Nancy
;
Anzeige

Infobox / Tutorial

Array in VBA verändern und erweitern


Schritt-für-Schritt-Anleitung

Um ein bestehendes Array in VBA zu erweitern und nach jedem zweiten Element eine 0 einzufügen, kannst du die folgenden Schritte befolgen:

  1. Erstelle ein neues Sub: Beginne mit dem Erstellen einer Subroutine in deinem VBA-Editor.

  2. Definiere das Array: Lege ein Array fest, das du erweitern möchtest. Zum Beispiel:

    Dim arr(0 To 5) As Integer
    Dim i As Integer
    For i = 0 To 5
       arr(i) = i + 1
    Next
  3. Erstelle eine Funktion zur Erweiterung: Verwende ReDim Preserve, um das Array zu erweitern. Hier ein Beispiel:

    Sub Erweiterung(arr() As Integer)
       Dim i As Integer, newArr() As Integer
       ReDim newArr(0 To (UBound(arr) * 2))
       Dim j As Integer
       j = 0
       For i = LBound(arr) To UBound(arr)
           newArr(j) = arr(i)
           j = j + 1
           If (i + 1) Mod 2 = 0 Then
               newArr(j) = 0
               j = j + 1
           End If
       Next
       arr = newArr
    End Sub
  4. Rufe die Funktion auf: Führe die Erweiterungsroutine auf deinem ursprünglichen Array aus.


Häufige Fehler und Lösungen

  • Fehler: Array out of bounds
    Wenn du versuchst, auf ein Element außerhalb der Grenzen deines Arrays zuzugreifen, wirst du einen Fehler erhalten. Stelle sicher, dass du die LBound und UBound Funktionen verwendest, um die Grenzen deines Arrays korrekt zu prüfen.

  • Fehler: Typkonflikt
    Wenn du versuchst, verschiedene Datentypen in dein Array zu speichern, kann dies zu einem Typkonflikt führen. Achte darauf, dass alle Elemente im Array denselben Datentyp haben.


Alternative Methoden

Eine alternative Methode, um ein Array zu erweitern, ist die Nutzung eines temporären Arrays. Du kannst ein neues Array mit einer größeren Größe erstellen und die Werte des alten Arrays dorthin kopieren. Hier ein Beispiel:

Sub AlternativeErweiterung(arr() As Integer)
    Dim i As Integer, tempArr() As Integer
    ReDim tempArr(0 To UBound(arr) * 2)
    For i = LBound(arr) To UBound(arr)
        tempArr(i) = arr(i)
    Next i
    arr = tempArr
End Sub

In dieser Methode kannst du anschließend die Nullen nach jedem zweiten Element hinzufügen.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen können:

  1. Beispiel mit festen Werten:

    Sub Beispiel1()
       Dim arr(0 To 5) As Integer
       Dim i As Integer
       For i = 0 To 5
           arr(i) = i + 1
       Next
       Erweiterung arr
    End Sub
  2. Beispiel mit zufälligen Werten:

    Sub Beispiel2()
       Dim arr(0 To 10) As Integer
       Dim i As Integer
       For i = 0 To 10
           arr(i) = Int(Rnd * 100)
       Next
       Erweiterung arr
    End Sub

Tipps für Profis

  • Nutze Option Base: Wenn du die Basis des Arrays auf 1 setzen möchtest, füge Option Base 1 an den Anfang deines Moduls hinzu.
  • Vermeide unnötige Umwandlungen: Halte deine Arrays so einfach wie möglich, um die Leistung zu optimieren.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um mit unerwarteten Situationen umzugehen.

FAQ: Häufige Fragen

1. Wie kann ich die Größe eines Arrays dynamisch anpassen?
Verwende ReDim oder ReDim Preserve, um die Größe eines Arrays während der Laufzeit zu ändern.

2. Kann ich ein mehrdimensionales Array erweitern?
Ja, du kannst mehrdimensionale Arrays mit ReDim Preserve erweitern, aber du musst vorsichtig sein, da nur die letzte Dimension beibehalten werden kann.

3. Was ist der Unterschied zwischen ReDim und ReDim Preserve?
ReDim ändert die Größe eines Arrays und entfernt alle vorhandenen Werte, während ReDim Preserve die bestehenden Werte beibehält.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige