【问题标题】:EXCEL MACRO - perform vlookup only on blank cellsEXCEL MACRO - 仅在空白单元格上执行 vlookup
【发布时间】:2013-10-23 15:54:06
【问题描述】:

我有一个包含 2 列的简单表格 - 第一列有数字 1 到 10,第二列应该有数字的拼写版本(即一、二、三、...、十) .

我想编写一个宏,在表格上执行 vlookup,以使用第一列中的值作为 vlookup 参考自动填充第二列,但仅限于尚未填充的单元格(即仅在空白单元格上)。

当我单击启用宏的按钮时,我会执行以下代码:

Private Sub Button_Click()

    Range("B3").AutoFilter Field:=2, Criteria1:=""   
    Range("C3:C12").Value = WorksheetFunction.VLookup(Range("B3:B12"),     
    Sheet2.Range("B2:C11"), 2, False)

End Sub

第一行过滤列表,只显示空白。 第二行应仅将vlookup 应用于过滤的单元格。但是,当我将某些单元格留空并执行宏时,它会错误地执行vlookup。例如,如果我删除第 4 行和第 7 行的数据(即删除“四”和“七”),并执行vlookup,它会正确过滤列表,而不是拉“四”和“七”从vlookup 表中,它会拉出“One”和“One”。

谁能帮帮我?

谢谢

【问题讨论】:

    标签: excel vba filter vlookup


    【解决方案1】:

    你想用这段代码实现什么?这似乎是一个奇怪的用例。

    无论如何 - 我不会打扰宏,我只会添加一个类似以下内容的列:

    =if([CellWithWordIn]"",[CellWithWordIn], Vlookup 公式)

    这将最大限度地减少 vlookup 调用,额外的 if 函数应该不是问题。

    【讨论】:

      【解决方案2】:

      将提取第一个单元格的值,而不是单个单元格。

      试试这个,首先获取公式来计算每个单元格的正确值,然后粘贴该单元格的值。

      dim rgLoop as range
      
      Range("B3").AutoFilter Field:=2, Criteria1:=""   
      
      Range("C3:C12").specialcells(xlcelltypevisible).formular1c1="=VLookup(RC2, Sheet2!B2:C11, 2, False)"
      
      for each rgLoop in Range("C3:C12").specialcells(xlcelltypevisible)
          rgLoop.value=rgLoop.value
      next rgLoop
      

      【讨论】:

      • 确实如此。我已删除我的评论。
      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多