So durchlaufen Sie eine Datenliste auf einem Arbeitsblatt mithilfe von Makros in Excel

Zusammenfassung

Wenn Sie ein VBA-Makro (Microsoft Visual Basic für Applikationen) schreiben, müssen Sie möglicherweise eine Liste der Daten auf einem Arbeitsblatt durchlaufen. Es gibt mehrere Methoden zum Ausführen dieser Aufgabe. Der Abschnitt "Weitere Informationen" dieses Artikels enthält Informationen zu den Methoden, mit denen Sie die folgenden Listentypen durchsuchen können:

  • Eine Liste, die eine bekannte, konstante Anzahl von Zeilen enthält.
  • Eine dynamische Liste oder eine Liste mit einer unbekannten Anzahl von Zeilen.
  • Eine Liste, die einen bestimmten Datensatz enthält.

Mehr Informationen

Microsoft bietet Programmierbeispiele ausschließlich zu Illustrationszwecken an, ohne Gewährleistung, weder ausdrücklich noch impliziert. Dies umfasst unter anderem die stillschweigenden Garantien der Marktgängigkeit oder Eignung für einen bestimmten Zweck. Dieser Artikel geht davon aus, dass Sie mit der Programmiersprache, die gezeigt wird, und mit den Hilfsmitteln vertraut sind, die zum Erstellen und Debuggen von Verfahren verwendet werden. Die Microsoft Support-Spezialisten können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind. In den folgenden Codebeispielen wird davon ausgegangen, dass die Liste über eine Kopfzeile verfügt, die in Zelle A1 beginnt, und daten, die in Zelle A2 beginnen.

So durchsuchen Sie eine Liste mit einer konstanten, bekannten Anzahl von Zeilen

Dieser Code verschiebt spalte A bis zum Ende der Liste nach unten:

   Sub Test1()
      Dim x As Integer
      ' Set numrows = number of rows of data.
      NumRows = Range("A2", Range("A2").End(xldown)).Rows.Count
      ' Select cell a1.
      Range("A2").Select
      ' Establish "For" loop to loop "numrows" number of times.
      For x = 1 To NumRows
         ' Insert your code here.
         ' Selects cell down 1 row from active cell.
         ActiveCell.Offset(1, 0).Select
      Next
   End Sub

So durchsuchen Sie eine dynamische Liste oder Eine Liste mit einer unbekannten Anzahl von Zeilen

Dieser Code verschiebt Spalte A bis zum Ende der Liste nach unten. (In diesem Code wird davon ausgegangen, dass jede Zelle in Spalte A bis zum Ende einen Eintrag enthält.)

   Sub Test2()
      ' Select cell A2, *first line of data*.
      Range("A2").Select
      ' Set Do loop to stop when an empty cell is reached.
      Do Until IsEmpty(ActiveCell)
         ' Insert your code here.
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   End Sub

Anmerkung Wenn in Spalte A leere Zellen vorhanden sind, ändern Sie diesen Code so, dass diese Bedingung berücksichtigt wird. Stellen Sie sicher, dass die leeren Zellen einen konsistenten Abstand voneinander aufweisen. Wenn beispielsweise jede zweite Zelle in Spalte A leer ist (diese Situation kann auftreten, wenn jeder Datensatz zwei Zeilen verwendet, wobei die zweite Zeile um eine Zelle eingerückt ist), kann diese Schleife wie folgt geändert werden:

     ' Set Do loop to stop when two consecutive empty cells are reached.
     Do Until IsEmpty(ActiveCell) and IsEmpty(ActiveCell.Offset(1, 0))
        ' Insert your code here.
        '
       ' Step down 2 rows from present location.
       ActiveCell.Offset(2, 0).Select
     Loop

Eine Liste nach einem bestimmten Datensatz durchsuchen

Dieser Code verschiebt spalte A bis zum Ende der Liste nach unten:

   Sub Test3()
      Dim x As String
      Dim found As Boolean
      ' Select first line of data.
      Range("A2").Select
      ' Set search variable value.
      x = "test"
      ' Set Boolean variable "found" to false.
      found = False
      ' Set Do loop to stop at empty cell.
      Do Until IsEmpty(ActiveCell)
         ' Check active cell for search value.
         If ActiveCell.Value = x Then
            found = TRUE
            Exit Do
         End If
         ' Step down 1 row from present location.
         ActiveCell.Offset(1, 0).Select
      Loop
   ' Check for found.
      If found = True Then
         Msgbox "Value found in cell " & ActiveCell.Address
      Else
         Msgbox "Value not found"
      End If
   End Sub