Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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

Datenfeld

Datenfeld
20.02.2023 17:11:25
Siegfried
Hallo zusammen,
Ich möchte Daten über eine mehrere Schleifen in ein Datenfeld aufnehmen und nach dem Verlassen der Schleife damit weiterarbeiten. Wie muss ich das anstellen.
Bis hier hab e ich folgenden Code gebastelt:
Sub ZahlenTest_starten()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim n1 As Integer, n2 As Integer, n3 As Integer
Dim Durchgänge As Integer, Treffer As Integer
Dim Wiederholung As String
Dim ArrWiederholungen() As Variant
Dim RngZahl As range, RngPrüfbereich As range
Dim ArrZahlen() As Variant
Dim dteStart As Date, dteEnde As Date

Durchgänge = Frm_Test.Lbl_Durchgänge_Test.Caption
dteStart = Timer

' prüft das Vorkommen von Zahlen
ReDim ArrZahlen(0 To 9)
For n1 = 0 To 9
Treffer = 0
' durchläuft die relevanten Zahlenreihen
For n2 = 0 To Durchgänge - 1
Tabelle1.Activate
' definiert die zu prüfende Zahl
Set RngZahl = range("Zahlen.Gesamt").Offset( _
Frm_Test.Lbl_Startdatum_Zeile.Caption + 1 - range("Zahlen.Gesamt").Row + n2, 9)
' definiert den Prüfbereich
Set RngPrüfbereich = range(Cells(Frm_Test.Lbl_Startdatum_Zeile.Caption + 1 + n2, _
range("Zahlen.Gesamt").Column + 3), _
Cells(Frm_Test.Lbl_Startdatum_Zeile.Caption + 1 + n2, _
range("Zahlen.Gesamt").Column + 8))

If RngZahl = n1 Then
Treffer = Treffer + 1
Wiederholung = n2 + 1 & Chr(32)
For n3 = 1 To Len(Wiederholung)
ReDim Preserve ArrWiederholungen(0 To 9, 1 To Len(Wiederholung))
If Mid(Wiederholung, n3, 1) = Chr(32) Then
ArrWiederholungen(n1, 1) = n1
ArrWiederholungen(n1, 2) = Wiederholung
' diese Überprüfung bringt die gewünschten Ergebnisse
Debug.Print n1, n2, Wiederholung, ArrWiederholungen(n1, 2)
End If
Next n3
End If
Next n2

ArrZahlen(n1) = Treffer

Next n1

' hier soll mit den Einträgen aus dem Datenfeld "ArrWiederholungen" weitergearbeitet werden
' ich erhalte jedoch nur den letzten Wert

Frm_Test.Hide
dteEnde = Timer

Debug.Print "Zahlen Testdauer bei " & Durchgänge & " Durchgängen " _
& Format(dteEnde - dteStart, "0.00") & " sec"
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenfeld
20.02.2023 21:20:28
Yal
Hallo Siegfried,
Eigentlich fängt die Frage genau an der Stelle, wo der Code aufhört:
    ' hier soll mit den Einträgen aus dem Datenfeld "ArrWiederholungen" weitergearbeitet werden
    ' ich erhalte jedoch nur den letzten Wert
Lass den Code in Schritt-Modus (F8) bei offenen Lokalfenster (Ansicht, Lokalfenster) laufen. So kannst Du die Variablen und deren Inhalt sehen. Ich gehe nicht davon aus, dass dein Datenfeld ArrWiederholung leer ist oder nur eine Wert hat. Nur die Art und Weise wie Du darauf greifst, ist vielleicht nicht richtig.
Dein Coding enthält ziemlich viele "Anteil", die gar nicht benötigt werden:
_ RngPrüfbereich wird z.B. nie verwendet.
_ Wenn Schleife N1 = 0 bis 9, nur um zu prüfen, ob RngZahl = n1, warum nicht direkt mit RngZahl arbeiten?
_ "For n2 = 0 to Durchgänge - 1" aber überall wird nur "n2 + 1" verwendet. Warum nicht gleich "For n2 = 1 to Durchgänge" und dann "n2" verwenden?
_ Du machst einen "Debug.Print" mit letzter Ausgabe in der Zeile "Wiederholung", dessen Unterschied nur zusätzliche Leerzeichen sind: diese sind nicht sichtbar würde es mit Punkte auch gehen (kann man am Ende mit Replace durch Leerzeichen ersetzen)
_ Die Kombination
                Wiederholung = n2 & Chr(32)
                For n3 = 1 To Len(Wiederholung)
                    If Mid(Wiederholung, n3, 1) = Chr(32) Then
                        ArrWiederholungen(n1, 1) = n1
ist nur "Falsch" (also ohne in den "If" reinzugehen) bei n3 = Len(n2), man könnte also
                Wiederholung = n2 & Chr(32)
                For n3 = Len(n2) + 1 To Len(Wiederholung)
                    ArrWiederholungen(n1, 1) = n1
Ich sage nicht, dass etwas falsch wäre. Es gibt sicher einige Gründe, die hier nicht ersichtlich sind, warum Du es so gemacht hast. Aber vielleicht hilft Dir dieses Hinterfragen, dein Code wieder zu denken, und diese anders oder gar schlanker zu gestalten.
Achte auf ein sauberes Einrücken, besonders wenn viele "For" und "If" verschachtelte sind ;-)
VG
Yal
Anzeige
AW: Datenfeld
21.02.2023 23:47:09
Siegfried
Hi Yal
Auch wenn Du mit meinem Code schwanger gegangen bist, für mich war er völlig o.k.
Die Werte kamen wie gewollt in das Datenfeld.
Die eigentliche Frage war ja, wie kann ich ein mehrdimensionales Datenfeld später auslesen?
Aber Danke für Deine Antwort.
Gruß
Siegfried
AW: Datenfeld
22.02.2023 08:53:50
Yal
Hallo Siegfried,
genauso wie Du eine Zelle aus dem Array mit Wert befüllst:
ArrWiederholungen(n1, 1) = 1
So auch
MsgBox ArrWiederholungen(n1, 1)
VG
Yal
AW: Datenfeld
22.02.2023 14:34:53
Siegfried
Hi Yal,
so wie Du es schreibst, habe ich es versucht, aber ohne den gewünschten Erfolg.
Mein Datenfeld soll in der 1.Dimension einen Grundwert (0 To 9) aufnehmen,
gewissermaßen die Zeilenwerte der ersten Spalte einer Matrix,
in der 2. Dimension sollen unterschiedlich viele Zahlen (0 To Len(Wiederholung)) aus der GrundwertZeile aufgenommen werden,
also die Werte aus den weiteren Spalten.
Gruß
Siegfried
Anzeige
AW: Datenfeld
22.02.2023 16:33:28
Yal
Hallo Siegfried,
Du kannst den Inhalt der ArrWiederholung,wie gesagt beim offenen Lokalfenster ansehen, aber nur im Schrittmodus.
Wenn Du das gesamte Array wiedergeben möchtest, kannst Du das mit einer doppelte Schleife machen:
    For n1 = 0 To UBound(ArrWiederholungen, 1) 'Letzter Index in Dimension 1
        For n2 = 0 To UBound(ArrWiederholungen, 2) 'Letzter Index in Dimension 2
            Debug.Print n1, n2, ArrWiederholungen(n1, n2) & "." 'Da der Inhalt eine String mit Ende nur Leerzeichen gibt der Punkt einen HInweis, wo der letzte Leerzeichen steht.
        Next n2
    Next n1
Da ich das gesamte auf Basis des Codes nicht ganz durchschauen kann, kann ich keine Aussage machen, warum dein Array nicht befüllt wäre. Da müsste eine Beispieldatei hochgeladen werden (bereinigt von sensiblen Daten).
VG
Yal
Anzeige
AW: Datenfeld
22.02.2023 18:01:28
Siegfried
Hi Yal,
das sieht gut aus, ich werde das mal testen und melde mich danach noch.
Danke und Gruß
Siegfried
AW: Datenfeld
23.02.2023 09:23:42
Siegfried
Hi Yal,
mit Deinem Code erhalte ich die Inhalte des Datenfeldes.
Danke und Gruß
Siedfried

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige