我正在遍历一系列单元格以检查值是否为 0。我的逻辑是如果单元格值为零,则单元格值是前一个单元格值。如果前一个单元格也为零,那么它就是下一个单元格的值。但我说如果最后一个单元格或第一个单元格为零怎么办?我也需要检查它,因为如果它是第一个单元格或最后一个单元格,则循环失败。我的问题是,通过最后一行作为地址的代码应该是什么。我知道最后一行,但我不知道如何将其写为具有已知列的地址。数据从第 2 行开始,然后转到第 X 行。
For each Cell In rng
If Cell.Address="A2" Then
If Cell.Value=0 Then
Cell.Value=Cell.Offset(1,0).Value
End if
Elseif Cell.Address="AX" Then 'X is the last row
If Cell.Value=0 Then
Cell.Value=Cell.Offset(-1,0).Value
End If
Elseif Cell.Value=0 and Cell.Offset(1,0).Value=0 Then
Cell.Value=Cell.Offset(-1,0).Value
Elseif Cell.Value=0 Then
Cell.Value=Cell.Offset(1,0).Value
Else
Do Nothing
End If
Next
最佳答案
我添加了三行来定义变量和范围。
除此之外,我只对 IF
进行了更改。声明和第一个 ELSEIF
陈述。
Sub Test()
Dim rng As Range
Dim Cell As Range
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:A20")
For Each Cell In rng
If Cell.Address = rng(1).Address Then
If Cell.Value = 0 Then
Cell.Value = Cell.Offset(1, 0).Value
End If
ElseIf Cell.Address = rng(rng.Cells.Count).Address Then
If Cell.Value = 0 Then
Cell.Value = Cell.Offset(-1, 0).Value
End If
ElseIf Cell.Value = 0 And Cell.Offset(1, 0).Value = 0 Then
Cell.Value = Cell.Offset(-1, 0).Value
ElseIf Cell.Value = 0 Then
Cell.Value = Cell.Offset(1, 0).Value
Else
'Do Nothing
End If
Next
End Sub
编辑: (接受答案后)。
要遍历每列中的每个单元格,您需要一个循环来查看每一列,然后另一个循环来查看列中的每个单元格。
在下面的代码中,我定义了
col
作为一个范围。然后在第一个循环中使用它(
For Each col in rng.Columns
)。然后第二个循环查看
col
中的每个单元格。 (For Each Cell in col.Cells
)。Sub Test()
Dim rng As Range
Dim Cell As Range
Dim col As Range
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:Z20")
For Each col In rng.Columns
For Each Cell In col.Cells
If Cell.Address = rng(1).Address Then
If Cell.Value = 0 Then
Cell.Value = Cell.Offset(1, 0).Value
End If
ElseIf Cell.Address = rng(rng.Cells.Count).Address Then
If Cell.Value = 0 Then
Cell.Value = Cell.Offset(-1, 0).Value
End If
ElseIf Cell.Value = 0 And Cell.Offset(1, 0).Value = 0 Then
Cell.Value = Cell.Offset(-1, 0).Value
ElseIf Cell.Value = 0 Then
Cell.Value = Cell.Offset(1, 0).Value
Else
'Do Nothing
End If
Next
Next col
End Sub
关于excel - 循环中的单元格地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47515141/