Excel 循环中的单元地址

Excel 循环中的单元地址,excel,if-statement,dynamic,vba,Excel,If Statement,Dynamic,Vba,我在一系列单元格中循环检查值是否为0。我的逻辑是,如果单元格值为零,那么单元格值就是之前的单元格值。如果前一个单元格也为零,则它是下一个单元格的值。但我说如果最后一个单元格或第一个单元格为零呢?我也需要检查它,因为如果它是第一个单元格或最后一个单元格,那么循环就会失败。我的问题是,通过最后一行作为地址的代码应该是什么。我知道最后一行,但我不知道如何将它写为一个具有已知列的地址。数据从第2行开始,然后转到第X行 For each Cell In rng If Cell.Address="A

我在一系列单元格中循环检查值是否为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
定义为一个范围。
然后在第一个循环中使用(
,用于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
。我将在我的答案中添加另一部分,关于依次查看每一列。