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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla