问题:
列K& L中有值,取决于单元格/s是否有一个值(数字),我想返回一个偏移值=RC[-4]
下面的工作很好:
K4有一个值,L4有一个值,什么都不做。
K5有一个值,L5没有一个值,value = =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发布于 2018-10-08 07:13:11
只需计算行号就可以更容易地使用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未处理最后使用的行。
https://stackoverflow.com/questions/52696789
复制相似问题