【发布时间】:2014-01-17 02:55:22
【问题描述】:
我记录了一个 vlookup 宏来获取 r1c1 公式,然后编写了一个简单的宏来将公式应用于整个列范围。见下面的代码
信息: •我有一个对帐选项卡,其中从第 6 行开始的列中列出了唯一 ID。ID 或行的数量是可变的,这意味着它总是可以更改,但目前大约是 15000 个 ID。这是一个包含所有 ID 的列表。 ID 是一个连续的列表。中间没有休息。请记住,我在填充的最后一个 ID 下面几行有一个 Grand Total Row。 •我在同一个工作簿中有第二张表,它在A 列中包含相同类型的ID,在C 到I 列中有不同的金额——第二张表称为“老年AR”。并非所有 ID 都可能包含在此工作表中,因为此选项卡代表不同类型的报告。
我开发了以下代码以在对帐选项卡开始 D 列第 6 行创建 Vlookup,以提取第二个工作表“老年 AR”的 C 列(第 3 列)中的金额并将其应用于整个范围D 列中的行一直到 A 列中填充的最后一个 ID。数组或查找范围正在“老化 AR”选项卡上查找,从列中选择 A 到 I 列的所有内容,因为我将在对帐上应用此公式选项卡用于从 H6 列开始的范围,并在“老年 AR”表的 H 列中提取金额。
问题: 1.如何扩展代码以将#N/A 结果更改为零值? 2.如何让所有结果将单元格格式化为值而不是离开 vlookup 公式? 3. 使用这个循环,我如何继续在 H 列中执行相同类型的循环,从侦察选项卡上的 H6 开始,查找第二张表“Aged AR”上设置的 vlookup 数组中的第 8 列? 3.我预计循环会导致宏需要一段时间,因为一旦我的项目完成到六列并且有很多行,我将应用这种类型的公式。我工作簿中的所有参考表都包含相同类型的 ID。有没有办法在不使用 vlookup 公式的情况下提取引用的信息并将其填充到我希望在“对帐”表上指定的位置。它会使宏的工作效率更高吗?
我昨天和今天早上都在阅读不同的示例,但由于我完全是使用 VBA 的业余爱好者,所以我没有注意到可以从中学到的东西
Sub findit()
Dim oRange As Range
Dim rec As Worksheet
'reconciliation tab contains ID's in column A
Set rec = Sheets("Reconciliation")
'Located the end of the range I would like to populate in column D by finding the last row of IDs in column A
Set oRange = rec.Range(rec.Range("D6"), rec.Range("A6").End(xlDown).Offset(0, 3))
'apply the vlookup formula to using each ID as a lookup value in column A and populating the result in column D for as far down as the IDs are populated
For Each cell In oRange
'vlookup formula is actually =vlookup(A6,'Aged Ar'!$A!:$I,3,false)
'where the lookup value A6 will increase to A7, A8,....n where n is the last row of IDs as it is applied to each row below starting at "D6"
cell.FormulaR1C1 = "=VLOOKUP(RC[-3],'Aged AR'!C1:C9,3,FALSE)"
Next cell
End Sub
【问题讨论】:
-
感谢您的编辑。当我复制宏时,我没有意识到它是以那种格式出现的