我有一个简单的表有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
表,它拉起”一个“和”一个“。
有人能帮助我吗?
由于
答案 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调用,如果函数不应该是一个问题,额外的。