Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ReDim Preserve

ReDim Preserve
30.05.2022 09:32:17
Jan
Hallo ich möchte ein Array erstellen, dass die Größe automatisch anpasst:

(Ziel: wenn eine Zahl glatt teilbar ist, dann soll die Nenner und Teiler in das Array eingetragen werden)
Sub Division()
Dim i As Long, j As Long, a As Long, LongA() As Long
i = 0
j = 5
a = 1
For i = 1 To 5000
If i Mod j = 0 Then
ReDim Preserve LongA(a,2)
LongA(a, 1) = i
LongA(a, 2) = j
a = a + 1
End If
Next i
End 

Sub
Könnt ihr mal schauen, wo der Fehler liegt. Ich komme irgendwo nicht drauf


		

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ReDim Preserve
30.05.2022 09:36:34
Rudi
Hallo,
du kannst nur die letzte Dimension ändern.
Gruß
Rudi
AW: ReDim Preserve
30.05.2022 09:38:51
Oberschlumpf
Hi Jan,
kannst du bitte deine Frage erneut stellen, und dabei bitte den Erklärtext mit Hilfe von Klick auf Code pre code (in gelber Farbe) "vernünftig" von deinem Code-Versuch trennen?
...so nach dem Schema...
Hier Erklärtext...

Sub Test()
...hier dein Code...
End Sub
...und hier vllt weiterer Erklärtext
Is nich böse gemeint! Und ich weiß eigtl, wie das mit Preserve funktioniert, aber bei deiner "Darstellung" komm ich in fast jeder Zeile wieder durcheinander.
Danke schön!
Ciao
Thorsten
Anzeige
AW: ReDim Preserve
30.05.2022 09:52:26
Jan

Sub Division()
Dim i As Long, j As Long, a As Long, LongA() As Long
'Definition der Variablen
i = 0
j = 5
a = 1
'Schleife für die Nenner des Bruchs
For i = 1 To 5000
' Ist der Nenner glatt durch den Teiler teilbar, dann trage ihn ins Array ein, sonst mache nichts
If i Mod j = 0 Then
' Vergrößere das Array entsprechend, a ist die Zeilennummer
ReDim Preserve LongA(a,2)
' Tage Teiler und Nenner in die Spalten ein (a Zeile, Zahl = Spalte)
LongA(a, 1) = i
LongA(a, 2) = j
' Erhöhe die Zeilennummer um eins
a = a + 1
End If
Next i
End Sub 

AW: ReDim Preserve
30.05.2022 10:11:26
Oberschlumpf
hi Jan,

Sub Division()
Dim i As Long, j As Long, a As Long, LongA() As Long
'Definition der Variablen
i = 0
j = 5
a = 1
ReDim LongA(1, 0)
'Schleife für die Nenner des Bruchs
For i = 1 To 5000
' Ist der Nenner glatt durch den Teiler teilbar, dann trage ihn ins Array ein, sonst mache nichts
If i Mod j = 0 Then
' Tage Teiler und Nenner in die Spalten ein (a Zeile, Zahl = Spalte)
LongA(0, UBound(LongA, 2)) = i
LongA(1, UBound(LongA, 2)) = a
' Vergrößere das Array entsprechend, a ist die Zeilennummer
ReDim Preserve LongA(1, UBound(LongA, 2) + 1)
' Erhöhe die Zeilennummer um eins
a = a + 1
End If
Next i
ReDim Preserve LongA(1, UBound(LongA, 2) - 1)
Stop 'hier stoppt der Code; schau dir mal den Inhalt von LongA im Überwachungsfenster an
End Sub
Sollte helfen; tut es das?
Ciao
Thorsten
Anzeige
AW: ReDim Preserve
30.05.2022 09:59:59
Alwin
Hallo Jan,
vielleicht so:

Sub Division()
Dim i As Long, j As Long, k As Long, LongA() As Long
i = 0
j = 5
k = 0
For i = 1 To 5000
If i Mod j = 0 Then k = k + 1
Next i
ReDim LongA(k - 1, 2)
k = 0
For i = 1 To 5000
If i Mod j = 0 Then
LongA(k, 1) = i
LongA(k, 2) = j
k = k + 1
End If
Next i
End Sub
Gruß Uwe
AW: ReDim Preserve
30.05.2022 10:09:22
Alwin
vielleicht noch zur Erklärung:
Preserve kann nur die letzte Dimension erweitern, dass bedeudet in deinem Fall, dass die letzte Dimension die 2. (eine neue Spalte ist).
Man kann mit einem 1. Durchlauf die Zahl der Treffer ermitteln - dann das Array neu dimensionieren und in einem 2. Durchlauf die Treffer ins Array übergeben.
Gruß Uwe
Anzeige
AW: ReDim Preserve
30.05.2022 11:06:32
Rudi
Hallo,
mir ist zwar schleierhaft, wozu das gut sein soll, aber trotzdem ein anderer Ansatz:

Sub Division()
Dim i As Long, j As Long, a As Long, LongA() As Long
Dim objDiv As Object, oDiv
Set objDiv = CreateObject("scripting.dictionary")
j = 5
For i = 1 To 5000
If i Mod j = 0 Then
objDiv(i) = j
End If
Next i
ReDim LongA(1 To objDiv.Count, 1 To 2)
For Each oDiv In objDiv
a = a + 1
LongA(a, 1) = oDiv
LongA(a, 2) = objDiv(oDiv)
Next oDiv
Set objDiv = Nothing
End Sub
Gruß
Rudi
AW: ReDim Preserve
30.05.2022 14:16:54
Yal
Hallo Jan,
auf Basis der gegebenen Schnipsel würde ich es so zusammmenfassen:

Sub Division()
Dim i As Long
Dim Liste()
'Definition der Variablen
Const cTeiler = 5
Const cEnde = 5000
ReDim Liste(Int(cEnde / cTeiler), 2)
'Schleife für die Nenner des Bruchs
For i = cTeiler To Int(cEnde / cTeiler)
Liste(i, 0) = i * cTeiler
Liste(i, 1) = cTeiler
Next i
End Sub
Aber verallgemeint und wie bereits gesagt: nur die letzte Dimension ist redimensionierbar.

Sub Division()
Dim i As Long
Dim Liste()
'Definition der Variablen
Const cTeiler = 5
Const cEnde = 5000
ReDim Liste(1, 0)
'Schleife für die Nenner des Bruchs
For i = cTeiler To cEnde
If i Mod cTeiler Then
Liste(0, UBound(Liste)) = i
Liste(1, UBound(Liste)) = cTeiler
ReDim Preserve Liste(1, UBound(Liste) + 1)
End If
Next i
ReDim Preserve Liste(1, UBound(Liste) - 1)
End Sub
Da aber Liste eine lokale Variable und daraus nichts gemacht wird, ist der Code in diesem Stand nicht vollständig.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige