公式只有单元格不为空时

我试图做一个公式,将填补细胞的价值,但只有一次,当细胞是空的。 一旦填充,我希望值保持原样,即使单元格是公式的一部分发生了变化。

C: =VLOOKUP(Cx,'A$1:B$3,2,FALSE) 

渊源

 ABC John 1 1 Bob 4 4 Jim 6 6 

改变吉姆的B值后

 Jim 10 6 

所以我希望VLOOKUP只有在不存在的情况下才能获取值。 我试图做一个IF,但我得到了一个循环引用错误:

 =IF(C1= "", VLOOKUP(C1,'A$1:B$3,2,FALSE),C1) 

我认为这是你想要的

  • 右键单击您的工作表选项卡
  • View Code
  • 复制并粘贴在下面的代码
  • 按alt & f11返回到Excel

如果在B4input12 并且 A4不是空白的话

  1. 如果C4是空的,它将等于12
  2. 如果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 

我不完全确定你想要什么,但我认为brettdj有答案。 Mine会将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