仅当单元格不为空时才使用公式

时间:2013-05-02 20:47:45

标签: excel excel-vba excel-formula vba

我正在尝试做一个填充单元格值的公式,但只有一次,当单元格为空时。一旦填充,我希望值保持原样,即使公式中的单元格发生了变化。

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)

2 个答案:

答案 0 :(得分:1)

我认为这是你想要的

  • 右键单击工作表标签
  • View Code
  • 复制并粘贴以下代码
  • & 返回Excel

如果您在B4 中输入12, A4不是空白,那么

  1. 如果C4为空,则它将等于12
  2. 如果C4有值,则会保留
  3. <强>码

    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