Usuń komórki za pomocą elementu "Dla każdego... Dalej" pętla w programie Excel
Podsumowanie
Program Microsoft Excel 2002 i nowsze wersje programu Excel usuwają komórki w pliku "Dla każdego... Dalej" pętla w inny sposób niż w programie Microsoft Excel 97 i starszych wersjach programu Excel.
W tym artykule opisano różnice i przedstawiono Visual Basic for Applications przykład makra, który ilustruje sposób usuwania komórek w pętli.
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 działania określonej procedury. Nie będą oni jednak modyfikować tych przykładów w celu dodania funkcji ani konstruować nowych procedur celem dostosowania ich do potrzeb użytkownika.
Przykładowe dane
Aby użyć makra w tym artykule, wpisz następujące przykładowe dane w arkuszu:
A1: a B1: 1
A2: b B2: 2
A3: x B3: 3
A4: x B4: 4
A5: c B5: 5
A6: x B6: 6
A7: d B7: 7
A8: x B8: 8
A9: x B9: 9
A10: e B10: 10
Przykładowe makro
W nowym module makra wpisz następujące makro.
Sub DeleteCells()
'Loop through cells A1:A10 and delete cells that contain an "x."
For Each c in Range("A1:A10")
If c = "x" Then c.EntireRow.Delete
Next
End Sub
Zachowanie przykładowego makra w programie Excel 2002 i nowszych wersjach programu Excel
Po uruchomieniu makra DeleteCells w programie Excel 2002 i nowszych wersjach programu Excel usuwane są tylko wiersze 3, 6 i 8. Mimo że wiersze 4 i 9 zawierają znak "x" w kolumnie A, makro nie usuwa wierszy. Wyniki makra są następujące:
A1: a B1: 1
A2: b B2: 2
A3: x B3: 4
A4: c B4: 5
A5: d B5: 7
A6: x B6: 9
A7: e B7: 10
Gdy program Microsoft Excel usunie wiersz 3, wszystkie komórki zostaną przeniesione w górę o jeden wiersz. Na przykład komórka A3 zakłada zawartość komórki A4, komórka A4 przyjmuje zawartość komórki A5 itd. Po for each... Następna pętla ocenia komórkę, oblicza następną komórkę; W związku z tym, gdy komórki są przesunięte, mogą być pomijane przez pętlę.
Zachowanie przykładowego makra w programach Microsoft Excel 5.0 i Microsoft Excel 7.0
Po uruchomieniu makra DeleteCells w programie Excel 5.0 i w programie Excel 7.0 makro usuwa wszystkie wiersze zawierające znak "x". Wyniki makra są następujące:
A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10
Po usunięciu wiersza 3 wszystkie komórki są przenoszone w górę o jeden wiersz. Następnie komórka A3 zakłada zawartość komórki A4, komórka A4 zakłada zawartość komórki A5 itd.
Jednak w przeciwieństwie do zachowania pętli w programie Excel 2002 i w nowszych wersjach programu Excel, gdy "Dla każdego... Następnie pętla ocenia komórkę w programie Excel 5.0, a w programie Excel 7.0 pętla ponownie ocenia komórkę, jeśli zostanie usunięta w pętli. W związku z tym komórki nie są pomijane.
Zalecana metoda usuwania komórek przy użyciu pętli
Gdy chcesz użyć pętli do usuwania komórek, użyj następującego makra:
Sub DeleteCells2()
Dim rng As Range
Dim i As Integer, counter As Integer
'Set the range to evaluate to rng.
Set rng = Range("A1:A10")
'initialize i to 1
i = 1
'Loop for a count of 1 to the number of rows
'in the range that you want to evaluate.
For counter = 1 To rng.Rows.Count
'If cell i in the range contains an "x",
'delete the row.
'Else increment i
If rng.Cells(i) = "x" Then
rng.Cells(i).EntireRow.Delete
Else
i = i + 1
End If
Next
End Sub
Wyniki tego makra we wszystkich wersjach programu Excel są następujące:
A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10
Dodatkowa metoda usuwania komórek przy użyciu pętli
Jest to metoda alternatywna do metody pokazanej powyżej. Ta metoda generuje te same wyniki.
Sub DeleteCells3()
Dim rng As Range, i As Integer
'Set the range to evaluate to rng.
Set rng = Range("A1:A10")
'Loop backwards through the rows
'in the range that you want to evaluate.
For i = rng.Rows.Count To 1 Step -1
'If cell i in the range contains an "x", delete the entire row.
If rng.Cells(i).Value = "x" Then rng.Cells(i).EntireRow.Delete
Next
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