excel - 循环中的单元格地址

标签 excel if-statement dynamic vba

我正在遍历一系列单元格以检查值是否为 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/

相关文章:

java - 使用 while 循环根据收到的参数调用方法?

php - MySql 中表的动态 header

javascript - 通过文本而不是值选择属性选项?

excel - 从excel中提取时出现编译错误

excel - 使用 Excel 2010 和参数的可刷新 Web 查询

sql - 将电子表格中的行与数据库中的记录进行比较

excel - 在 VBA 中输入公式数组的问题

java - 函数需要在 if、else if、else 时为 void? HashMap ,java

Swift//NSPopUpButton.addingItems() 问题

iis-7 - iis7 压缩来自自定义处理程序的动态内容