Jak zapętlać listę danych w arkuszu przy użyciu makr w programie Excel

Podsumowanie

Podczas pisania makra języka Microsoft Visual Basic for Applications (VBA) może być konieczności zapętlenia listy danych w arkuszu. Istnieje kilka metod wykonywania tego zadania. Sekcja „Więcej informacji” tego artykułu zawiera informacje o metodach, których można użyć do wyszukiwania następujących typów list:

  • Lista zawierająca znaną, stałą liczbę wierszy.
  • Lista dynamiczna lub lista z nieznaną liczbą wierszy.
  • Lista zawierająca określony rekord.

Więcej informacji

Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost ani dorozumianej, w tym także, ale nie tylko, dorozumianej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu, jak działa określona procedura, ale nie będą modyfikować tych przykładów ani dodawać żadnych funkcji i konstruować nowych procedur w celu dostosowania ich do określonych potrzeb użytkownika. Poniższe przykłady kodu zakładają, że lista ma wiersz nagłówka, który rozpoczyna się w komórce A1 i dane, które rozpoczyna się w komórce A2.

Aby wyszukać listę ze stałą, znaną liczbą wierszy

Ten kod przenosi kolumnę A w dół na koniec listy:

   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

Aby wyszukać listę dynamiczną lub listę z nieznaną liczbą wierszy

Ten kod przenosi kolumnę A w dół na koniec listy. (Ten kod zakłada, że każda komórka w kolumnie A zawiera wpis do końca).

   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

Uwaga Jeśli w kolumnie A w danych znajdują się puste komórki, zmodyfikuj ten kod, aby uwzględnić ten warunek. Upewnij się, że puste komórki są w stałej odległości od siebie. Na przykład, jeśli co druga komórka w kolumnie A jest pusta (na przykład ta sytuacja może wystąpić, jeśli każdy „rekord” używa dwóch wierszy, z drugą komórką z wcięciem drugiego wiersza), tę pętlę można zmodyfikować w następujący sposób:

     ' 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

Aby wyszukać listę w poszukiwaniu określonego rekordu

Ten kod przenosi kolumnę A w dół na koniec listy:

   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