EXCEL MACRO - 仅在空白单元格上执行vlookup

时间:2013-10-15 18:07:45

标签: excel vba filter vlookup

我有一个简单的表有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表,它拉起”一个“和”一个“。

有人能帮助我吗?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您希望使用此代码实现什么目标?这似乎有点奇怪的用例。

无论如何 - 我不打扰一个宏,我只想添加一个类似于:

的列
  

= if([CellWithWordIn]<>“”,[CellWithWordIn],Vlookup公式)

这会最小化vlookup调用,如果函数不应该是一个问题,额外的。