2

我有一个包含 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,它拉起“一”和“一”。

有谁能够帮我?

谢谢

4

2 回答 2

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
于 2013-10-15T18:34:37.017 回答
0

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

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

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

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

于 2014-01-16T13:29:35.267 回答