VBA Excel 2016遍历多个范围返回偏移值

时间:2018-10-08 06:47:43

标签: excel vba excel-vba excel-2016

问题:

K和L列中有值,具体取决于单元格是否具有要返回偏移值=RC[-4]的值(数字)

以下工作正常:

K4有一个值,L4有一个值,什么都不做。
K5有一个值,L5没有一个值,值= =RC[-4]

当L被一个数字覆盖(允许)时,我遇到了问题,但是当宏运行时,VBA仍然覆盖了这个数字。例如:

=RC[-4]等于20 如果K4有一个值并且L4是10,请跳过此单元格。目前,VBA会将L4中的值覆盖为20

从另一个角度查看它:
如果K4 <>“”和L4 =“”然后“ = RC [-4]”其他跳过/下一个单元格(K5 / L5,K6 / L6等)

这是我想要的输出,但是缺乏研究和知识...

Sub AccrualValue3()   
    Dim rng As Range
    Dim Exrng As Range

    Last_Row = Range("H" & Rows.Count).End(xlUp).Row - 1

    Set rng = Range("K4:K" & Last_Row)
    Set Exrng = Range("L4:L" & Last_Row)

    For Each cell In rng
        If cell.Value <> "" Then
            For Each cell2 In Exrng
                If cell2.Value = "" Then
                    cell.Offset(0, 1).Value = "=RC[-4]"
                Else
                    cell.Offset(0, 1).Value = ""
                End If
            Next
        End If
    Next
End Sub

1 个答案:

答案 0 :(得分:1)

使用addRole(role){ // here pass role this.Authentication.sendRole({ 'name': role }) // not this.role only role and send it as object .subscribe(role=> this.roles =role) } 循环仅计算行数会更容易。同样,您也不需要第二个循环。

For … To

或者,您可以使用Option Explicit Sub AccrualValue3() Dim LastRow As Long LastRow = Range("H" & Rows.Count).End(xlUp).Row - 1 Dim iRow As Long For iRow = 4 To LastRow If Cells(iRow, "K").Value <> "" And Cells(iRow, "L").Value = "" Then Cells(iRow, "L").Value = Cells(iRow, "L").Offset(ColumnOffset:=-4).Value End If Next iRow End Sub 选择L列中的所有空白单元格,并仅检查K列中的这些单元格。如果您有很多行,这应该更快一些,因为它只会检查L列为空的行,而不是行。

.SpecialCells(xlCellTypeBlanks)

请注意,从上次使用的行中减去1

Sub AccrualValue3ALTERNATIVE()
    Dim LastRow As Long
    LastRow = Range("H" & Rows.Count).End(xlUp).Row - 1

    Dim EmptyCellsInColumnL As Range
    Set EmptyCellsInColumnL = Range("L4:L" & LastRow).SpecialCells(xlCellTypeBlanks)

    Dim Cell As Range
    For Each Cell In EmptyCellsInColumnL
        If Cell.Offset(ColumnOffset:=-1).Value <> "" Then
            Cell.Value = Cell.Offset(ColumnOffset:=-4).Value
        End If
    Next Cell
End Sub

保留未处理的最后使用的行。