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

Werte Array in anderes Array übergeben

Forumthread: Werte Array in anderes Array übergeben

Werte Array in anderes Array übergeben
06.01.2018 17:38:02
SteffenS
Hallo Zusammen,
ich bin gerade dabei mich in die Thematik der Array einzuarbeiten und habe folgendes Problem.
Ich lese in ein Array einen Zellbereich ein:
Dim ImpDatArray AS Variant
ImpDatArray = Range("A1:AG" & last_cell).Value
~f~
Im Anschluss prüfe ich einige Werte, was unter anderem dazu führt, dass die "Zeile" ungültig wird und später nicht mehr verwendet werden soll.
Um dieses Ausschluss zu erreichen, wollte ich die gültigen Werte in ein Zweites Array übergaben z.B.:
~f~
If Prüfung = True Then
ErgDataArray? = ImDatArray -> Spalte 1 (A) bis 34 (AG) der aktuellen Zeile (z.B.: ImDatArray(i,?)
End IF
Wie kann ich dies machen, da ich vorher nicht weiß ErgDataArray wird (Anzahl Zeilen)
Definiert habe ich das zweite Array mit Dim ErgDataArray AS Variant.
Über Eure Hilfe würde ich mich sehr freuen.
VG Steffen
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Sag mal, meinst Du mit 'VBA gut' eigentlich...
06.01.2018 18:51:21
Mullit
...Dein Level, oder das potentieller Helfer....?
...fragt sich Mullit.
AW: Sag mal, meinst Du mit 'VBA gut' eigentlich...
06.01.2018 19:55:24
SteffenS
Hallo,
ich habe schon eine Menge gemacht nur habe ich noch keine Erfahrungen mit Arrays.
Könnt ihr mir vielleicht helfen?
Vielen lieben Dank
Steffen
AW: Werte Array in anderes Array übergeben
06.01.2018 19:54:18
ransi
Hallo,
Du kannst die Werte mit einer Schleife in ein anderes Array umschaufeln, oder machst es so:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Sub machs()
    Dim ImpDatArray As Variant
    Dim last_cell As Long
    Redim ErgDataArray(0) As Variant
    Dim lngIndex As Long
    last_cell = 10000 'einfach mal 10000 Zeilen genommen...
    Dim L As Long
    ImpDatArray = Tabelle1.Range("A1:AG" & last_cell).Value
    For L = LBound(ImpDatArray) To UBound(ImpDatArray) 'Im Anschluss prüfe ich einige Werte
        If ImpDatArray(L, 1) = 10 Then '..If Prüfung = True Then.##Einfach mal ne Prüfung ob der erste Wert der Spalte =10. Musst du anpassen
            Redim Preserve ErgDataArray(lngIndex)
            ErgDataArray(lngIndex) = WorksheetFunction.Index(ImpDatArray, L, 0) 'ie gültigen Werte in ein Zweites Array übergaben
            lngIndex = lngIndex + 1
        End If
    Next
    With Tabelle2.Range("a1").Resize(lngIndex, UBound(ImpDatArray, 2))
        .ClearContents
        .Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ErgDataArray)) 'ausgeben
    End With
End Sub


ransi
Anzeige
AW: Werte Array in anderes Array übergeben
06.01.2018 19:59:39
SteffenS
Hallo Ransi,
Danke für die schnelle Antwort.
Noch eine Frage, werden beim einsetzen in die Tabelle alle Spalten des Arrays übernommen?
VG Steffen
AW: Werte Array in anderes Array übergeben
06.01.2018 19:59:40
SteffenS
Hallo Ransi,
Danke für die schnelle Antwort.
Noch eine Frage, werden beim einsetzen in die Tabelle alle Spalten des Arrays übernommen?
VG Steffen
Anzeige
AW: Werte Array in anderes Array übergeben
06.01.2018 19:59:41
SteffenS
Hallo Ransi,
Danke für die schnelle Antwort.
Noch eine Frage, werden beim einsetzen in die Tabelle alle Spalten des Arrays übernommen?
VG Steffen
AW: Werte Array in anderes Array übergeben
06.01.2018 20:01:37
ransi
HAllo Steffen,
Ja.
ransi
;
Anzeige
Anzeige

Infobox / Tutorial

Werte Array in ein anderes Array übergeben


Schritt-für-Schritt-Anleitung

Um ein Array in VBA zu übergeben, kannst du die folgenden Schritte befolgen:

  1. Deklariere die Variablen: Lege die Variablen für das Eingangs- und Ausgangsarray fest.

    Dim ImpDatArray As Variant
    Dim ErgDataArray As Variant
    Dim last_cell As Long
    Dim lngIndex As Long
  2. Lese den Zellbereich ein: Weise dem ImpDatArray die Werte aus einem bestimmten Zellbereich zu.

    last_cell = 10000 ' Beispielwert
    ImpDatArray = Range("A1:AG" & last_cell).Value
  3. Initialisiere das Ausgangsarray: Nutze Redim, um das Array dynamisch zu erstellen.

    ReDim ErgDataArray(0) As Variant
  4. Schleife durch das Input-Array: Prüfe die gewünschten Bedingungen und übergebe die gültigen Werte in das neue Array.

    For L = LBound(ImpDatArray) To UBound(ImpDatArray)
       If ImpDatArray(L, 1) = 10 Then ' Beispielbedingung
           ReDim Preserve ErgDataArray(lngIndex)
           ErgDataArray(lngIndex) = WorksheetFunction.Index(ImpDatArray, L, 0)
           lngIndex = lngIndex + 1
       End If
    Next L
  5. Gib die Werte in die Tabelle aus: Übertrage die Werte aus dem ErgDataArray in den gewünschten Bereich in Excel.

    With Sheet2.Range("A1").Resize(lngIndex, UBound(ImpDatArray, 2))
       .ClearContents
       .Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ErgDataArray))
    End With

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb der Grenzen": Dieser Fehler tritt auf, wenn du versuchst, auf ein Element außerhalb der Dimensionen eines Arrays zuzugreifen. Stelle sicher, dass du die Grenzen mit LBound und UBound korrekt bestimmst.

  • Lösung: Überprüfung der Array-Dimensionen: Verwende Debugging, um die Dimensionen deines Arrays zu überprüfen und sicherzustellen, dass du nur gültige Indizes verwendest.


Alternative Methoden

Eine alternative Methode, um ein Array in VBA zu übergeben, besteht darin, eine Funktion zu erstellen, die das Array zurückgibt. Beispiel:

Function GetValidDataArray() As Variant
    Dim ImpDatArray As Variant
    Dim ErgDataArray As Variant
    ' ... (Code wie oben)
    GetValidDataArray = ErgDataArray
End Function

Du kannst diese Funktion dann aufrufen und das Ergebnis in einer Variablen speichern.


Praktische Beispiele

Hier ist ein praktisches Beispiel für den Einsatz der oben beschriebenen Schritte:

Sub TestArrayUebergeben()
    Dim ImpDatArray As Variant
    Dim ErgDataArray As Variant
    Dim last_cell As Long
    Dim lngIndex As Long

    last_cell = 10000
    ImpDatArray = Range("A1:AG" & last_cell).Value
    ReDim ErgDataArray(0)

    For L = LBound(ImpDatArray) To UBound(ImpDatArray)
        If ImpDatArray(L, 1) > 10 Then ' Beispielbedingung
            ReDim Preserve ErgDataArray(lngIndex)
            ErgDataArray(lngIndex) = WorksheetFunction.Index(ImpDatArray, L, 0)
            lngIndex = lngIndex + 1
        End If
    Next L

    With Sheet2.Range("A1").Resize(lngIndex, UBound(ImpDatArray, 2))
        .ClearContents
        .Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ErgDataArray))
    End With
End Sub

Tipps für Profis

  • Effiziente Nutzung von Redim Preserve: Achte darauf, dass Redim Preserve nur dann verwendet wird, wenn es notwendig ist, da es die Performance beeinträchtigen kann, wenn es häufig in Schleifen verwendet wird.

  • Verwendung von WorksheetFunction: Nutze die WorksheetFunction.Index-Methode, um gezielt Werte aus einem Array zu extrahieren, anstatt sie einzeln zuzuweisen.


FAQ: Häufige Fragen

1. Frage
Wird beim Einfügen in die Tabelle wirklich das gesamte Array übernommen?
Antwort: Ja, wenn du das Array korrekt übergibst, werden alle Spalten und Zeilen übernommen.

2. Frage
Wie kann ich sicherstellen, dass nur gültige Werte in das neue Array übernommen werden?
Antwort: Verwende Bedingungen innerhalb deiner Schleife, um die Werte zu prüfen, bevor du sie in das Ausgangsarray überträgst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige