Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array element finden und ändern

Forumthread: Array element finden und ändern

Array element finden und ändern
09.12.2019 14:18:47
John
Hallöchen,
vllt kann mir jemand von euch weiterhelfen. Ich möchte einen Array mit einem Datum füllen. Das klappt ganz gut:
Sub Test()
Dim Abzisse()
For i = 1 To 365
ReDim Preserve Abzisse(0, i)
Abzisse(0, i) = DateAdd("d", i, Date)
Next i
End Sub
Nun würde ich gerne ein bestimmtes Datum suchen (z.B. 01.01.2020) und den restlichen Array mit diesem Wert auffüllen. Kennt jemand eine Lösung?
Danke!
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array element finden und ändern
09.12.2019 14:26:11
Rudi
Hallo,
Sub Test()
Dim Abzisse(1 To 365)
Dim i As Integer
For i = 1 To 365
Abzisse(i) = Application.Min(Date + i, CDate("1.1.2020"))
Next i
End Sub

Gruß
Rudi
AW: Array element finden und ändern
09.12.2019 14:42:25
John
Ok, das Funktioniert aber leider dachte ich es muss anders gehen ^^. Ich habe nämlich noch einen 2. Array der die gleiche länge hat und wir ab dem gesuchten Datum den Wert des anderen Arrays auch ändern. Also Beispiel:
Sub Test()
Dim Abzisse(1 To 365)
Dim i As Integer
For i = 1 To 365
Abzisse(i) = Application.Min(Date + i, CDate("1.1.2020"))
Ordinate(i) = i
Next i
End Sub
und an der Stelle wo das datum 01.01.2020 ist soll das Array den Wert 50 annehmen. und für die nachfolgenden dann auch.
Anzeige
AW: Array element finden und ändern
09.12.2019 14:49:02
volti
Hallo John,
du füllst ein Array mit Daten für einen Jahreszeitraum und möchtest anschließend ein Datum in diesem Array suchen und ab der gefundenen Position das Array mit diesem Datum bis Jahresende überschreiben?
Der Sinn der Vorgehensweise ist mir zwar gerade nicht klar, auch nicht, warum Du ein zweidimensionales Array verwendest, aber gut, probiere mal dieses hier aus:
Sub Test()
 Dim Abzisse(), i As Integer, sDatum As String
 For i = 1 To 365
   ReDim Preserve Abzisse(0, i)
   Abzisse(0, i) = DateAdd("d", i, Date)
 Next i
 i = WorksheetFunction.Match("01.01.2020", Abzisse, 0)
 sDatum = Abzisse(0, i - 1)
 For i = i To 365
    Abzisse(0, i) = sDatum
 Next i
End Sub

viele Grüße
Karl-Heinz


Anzeige
AW: Array element finden und ändern
09.12.2019 15:03:19
John
Danke, so kann ich es umschreiben, dass es funktioniert!
;
Anzeige

Infobox / Tutorial

Array-Element finden und ändern in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Array deklarieren: Du musst zunächst ein Array deklarieren, um Daten für einen Zeitraum zu speichern. Hier ein einfaches Beispiel, um ein Array mit Daten für ein Jahr zu füllen:

    Sub Test()
        Dim Abzisse() As Variant
        Dim i As Integer
        For i = 1 To 365
            ReDim Preserve Abzisse(0, i)
            Abzisse(0, i) = DateAdd("d", i, Date)
        Next i
    End Sub
  2. Datum suchen: Verwende die Funktion WorksheetFunction.Match, um das gesuchte Datum zu finden. In diesem Fall suchen wir nach dem Datum "01.01.2020":

    i = WorksheetFunction.Match("01.01.2020", Abzisse, 0)
  3. Werte ändern: Nachdem du das Datum gefunden hast, kannst du die gewünschten Werte im Array ändern. Hier wird das gefundene Datum und die nachfolgenden Werte auf einen bestimmten Wert gesetzt:

    For i = i To 365
        Abzisse(0, i) = sDatum
    Next i

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert": Stelle sicher, dass du das Array korrekt deklariert hast. Verwende Variant, wenn du die Größe des Arrays nicht im Voraus festlegen kannst.

  • Fehler: "Match-Funktion gibt Fehler zurück": Dieser Fehler tritt häufig auf, wenn das Datum nicht im Array vorhanden ist. Überprüfe die Formatierung des Datums und stelle sicher, dass es im Array korrekt gespeichert ist.


Alternative Methoden

Anstelle der Match-Funktion kannst du auch eine Schleife verwenden, um das Datum manuell zu suchen. Dies könnte in Situationen nützlich sein, in denen du eine benutzerdefinierte Logik anwenden möchtest:

For i = 1 To UBound(Abzisse, 2)
    If Abzisse(0, i) = CDate("01.01.2020") Then
        ' Hier kannst du die gewünschten Änderungen vornehmen.
    End If
Next i

Praktische Beispiele

Hier ist ein vollständiges Beispiel, das sowohl das Suchen als auch das Ändern eines Arrays zeigt:

Sub Test()
    Dim Abzisse() As Variant
    Dim i As Integer
    Dim sDatum As String

    ' Array mit Daten füllen
    For i = 1 To 365
        ReDim Preserve Abzisse(0, i)
        Abzisse(0, i) = DateAdd("d", i, Date)
    Next i

    ' Datum suchen
    i = WorksheetFunction.Match("01.01.2020", Abzisse, 0)
    sDatum = Abzisse(0, i - 1)

    ' Werte ändern
    For i = i To 365
        Abzisse(0, i) = sDatum
    Next i
End Sub

Tipps für Profis

  • Verwendung von ReDim Preserve: Beachte, dass ReDim Preserve nur die letzte Dimension des Arrays beibehält. Plane deine Arrays entsprechend.

  • Debugging: Nutze Debug.Print oder das lokale Fenster, um den Inhalt deines Arrays während der Ausführung zu überprüfen. Dies kann dir helfen, Fehler schneller zu erkennen.

  • Performance: Bei großen Arrays kann die Performance beeinträchtigt werden. Versuche, die Anzahl der ReDim Preserve-Aufrufe zu minimieren, indem du die Größe des Arrays im Voraus festlegst, wenn möglich.


FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array verwenden?
Du kannst ein mehrdimensionales Array einfach deklarieren, indem du die Dimensionen angibst, z.B. Dim Abzisse(1 To 365, 1 To 2).

2. Welche Excel-Version benötige ich für die Verwendung von VBA?
VBA ist in den meisten Desktop-Versionen von Excel verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Excel für Microsoft 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige