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



问题:

K和L列中有值,取决于单元格是否有值(数字(,我想返回一个偏移值=RC[-4]

以下工作正常:

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

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

=RC[-4]等于20如果 K4 有一个值,而 L410,则跳过此单元格。目前,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

使用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

或者,您可以使用.SpecialCells(xlCellTypeBlanks)选择L列中的所有空单元格,并仅检查这些单元格的K列。如果有很多行,这应该更快,因为它只检查 L 列为空的行,而不是每一行。

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

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

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

使最后使用的行保持未处理状态。

相关内容

  • 没有找到相关文章

最新更新