我正在尝试做一个填充单元格值的公式,但只有一次,当单元格为空时。一旦填充,我希望值保持原样,即使公式中的单元格发生了变化。
即
C: =VLOOKUP(Cx,'A$1:B$3,2,FALSE)
渊源
A B C
John 1 1
Bob 4 4
Jim 6 6
改变Jim的B值后
Jim 10 6
所以我希望VLOOKUP只有在没有值的情况下才能获取值。我尝试用IF做,但是我得到了一个循环引用错误:
=IF(C1= "", VLOOKUP(C1,'A$1:B$3,2,FALSE),C1)
答案 0 :(得分:1)
我认为这是你想要的
如果您在B4
中输入12, A4
不是空白,那么
C4
为空,则它将等于12 C4
有值,则会保留<强>码强>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = Intersect(Columns("B:B"), Target)
If rng1 Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each rng2 In rng1
If rng2.Offset(0, -1).Value <> vbNullString Then rng2.Offset(0, 1).Value = rng2.Value
Next
Application.EnableEvents = True
End Sub
答案 1 :(得分:0)
我不完全确定你想要什么,但我认为brettdj有答案。我会将C列中的所有空单元格更改为公式,以便根据您的情况进行修改,此时它只需查找名称并返回B列值。
请知道 VLOOKUP()
不是必需的,但我想在此上下文中展示如何使用它。
Sub change_empty()
Dim l As Long, r As Range
l = Me.Cells.Find("*", , , , xlByRows, xlPrevious).Row
Set r = Me.Range("C1").Resize(l).SpecialCells(xlCellTypeBlanks)
r.FormulaR1C1 = "=VLOOKUP(RC1,C1:C2,2,FALSE)"
End Sub