Excel 循环中的单元地址
我在一系列单元格中循环检查值是否为0。我的逻辑是,如果单元格值为零,那么单元格值就是之前的单元格值。如果前一个单元格也为零,则它是下一个单元格的值。但我说如果最后一个单元格或第一个单元格为零呢?我也需要检查它,因为如果它是第一个单元格或最后一个单元格,那么循环就会失败。我的问题是,通过最后一行作为地址的代码应该是什么。我知道最后一行,但我不知道如何将它写为一个具有已知列的地址。数据从第2行开始,然后转到第X行Excel 循环中的单元地址,excel,if-statement,dynamic,vba,Excel,If Statement,Dynamic,Vba,我在一系列单元格中循环检查值是否为0。我的逻辑是,如果单元格值为零,那么单元格值就是之前的单元格值。如果前一个单元格也为零,则它是下一个单元格的值。但我说如果最后一个单元格或第一个单元格为零呢?我也需要检查它,因为如果它是第一个单元格或最后一个单元格,那么循环就会失败。我的问题是,通过最后一行作为地址的代码应该是什么。我知道最后一行,但我不知道如何将它写为一个具有已知列的地址。数据从第2行开始,然后转到第X行 For each Cell In rng If Cell.Address="A
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
定义为一个范围。然后在第一个循环中使用(
,用于rng.Columns中的每个列)
。然后,第二个循环查看
col
(col.Cells中每个单元格的)
我添加了三行来定义变量和范围。
除此之外,我只对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
定义为一个范围。
然后在第一个循环中使用(,用于rng.Columns中的每个列)
。
然后,第二个循环查看col
(col.Cells
中每个单元格的)
范围的定义方式是否可能重复?如果RANGE
确实是(名称不正确的)变量,则RANGE(RANGE.Rows.Count,RANGE.Columns.Count).Address将给出该范围内的最后一个单元格。已澄清问题。范围是一个范围,我的实际名称不同。将范围更改为rngMy注释仍然保留在rng
-rng(rng.cells.count)。地址或rng(1)。地址是返回第一个和最后一个单元格地址的另一种方法。如果需要该列,可以使用rng(1)。列如何定义范围的可能重复项?如果RANGE
确实是(名称不正确的)变量,则RANGE(RANGE.Rows.Count,RANGE.Columns.Count).Address将给出该范围内的最后一个单元格。已澄清问题。范围是一个范围,我的实际名称不同。将范围更改为rngMy注释仍然保留在rng
-rng(rng.cells.count)。地址或rng(1)。地址是返回第一个和最后一个单元格地址的另一种方法。如果您想要该列,可以使用rng(1)。column
如果我的范围扩展到多个列怎么办?我想我会得到一个类似于我在问题中定义范围的答案。如果不是,则每列都是一个范围,我可以有多个循环。如果rng
设置为A1:Z20
,则rng(rng.Cells.Count)。Address
将返回Z20
。我将在我的答案中添加另一个关于依次查看每一列的部分。如果我的范围扩展到多个列怎么办?我想我会得到一个类似于我在问题中定义范围的答案。如果不是,则每列都是一个范围,我可以有多个循环。如果rng
设置为A1:Z20
,则rng(rng.Cells.Count)。Address
将返回Z20
。我将在我的答案中添加另一部分,关于依次查看每一列。