Elimine células utilizando um "Para Cada... Ciclo seguinte no Excel
Resumo
O Microsoft Excel 2002 e versões posteriores do Excel eliminam células num "Para Cada... O ciclo seguinte é diferente do Microsoft Excel 97 e das versões anteriores do Excel.
Este artigo descreve as diferenças e fornece um exemplo de macro Visual Basic for Applications que ilustra como eliminar células num ciclo.
Mais informações
A Microsoft fornece exemplos de programação apenas a título informativo, sem qualquer garantia expressa ou implícita, incluindo, sem limitações, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador está familiarizado com a linguagem de programação demonstrada e as ferramentas utilizadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um procedimento específico. No entanto, não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às suas necessidades específicas.
Dados de exemplo
Para utilizar a macro neste artigo, escreva os seguintes dados de exemplo numa folha de cálculo:
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
Macro de exemplo
Num novo módulo de macro, escreva a seguinte macro.
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
Comportamento da macro de exemplo no Excel 2002 e em versões posteriores do Excel
Quando executa a macro DeleteCells no Excel 2002 e em versões posteriores do Excel, apenas as linhas 3, 6 e 8 são eliminadas. Embora as linhas 4 e 9 contenham um "x" na coluna A, a macro não elimina as linhas. Os resultados da macro são os seguintes:
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
Quando o Microsoft Excel elimina a linha 3, todas as células são movidas para cima uma linha. Por exemplo, a célula A3 assume o conteúdo da célula A4, a célula A4 assume o conteúdo da célula A5 e assim sucessivamente. Depois de For Each... O ciclo seguinte avalia uma célula, avalia a célula seguinte; Por conseguinte, quando as células são movidas, podem ser ignoradas pelo ciclo.
Comportamento da macro de exemplo no Microsoft Excel 5.0 e Microsoft Excel 7.0
Quando executa a macro DeleteCells no Excel 5.0 e no Excel 7.0, a macro elimina todas as linhas que contêm um "x". Os resultados da macro são os seguintes:
A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10
Quando a linha 3 é eliminada, todas as células são movidas para cima uma linha. Em seguida, a célula A3 assume o conteúdo da célula A4, a célula A4 assume o conteúdo da célula A5 e assim sucessivamente.
No entanto, ao contrário do comportamento do ciclo no Excel 2002 e em versões posteriores do Excel, quando "Para Cada... O ciclo seguinte avalia uma célula no Excel 5.0 e, no Excel 7.0, o ciclo reavalia a célula se for eliminada no ciclo. Por conseguinte, as células não são ignoradas.
Método recomendado para utilizar um ciclo para eliminar células
Utilize a seguinte macro quando quiser utilizar um ciclo para eliminar células:
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
Os resultados desta macro em todas as versões do Excel são os seguintes:
A1: a B1: 1
A2: b B2: 2
A3: c B3: 5
A4: d B4: 7
A5: e B5: 10
Método adicional para utilizar um ciclo para eliminar células
Este é um método alternativo para o método apresentado acima. Este método produz os mesmos resultados.
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
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários