使用vlookup循环ifError引用另一个工作簿

时间:2018-04-04 09:39:41

标签: excel vba excel-vba vlookup

我正在做一些数据处理,我想实现这个目标:

A 1

B 36

C 0

D 36

...

为实现这一目标,我提出了一个公式,我想循环一列:

Range("C2").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-1],'incident_summary - Jan.csv'!R3C2:R11C3,2,FALSE),0)"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C11"), Type:=xlFillDefault
Range("C2:C11").Select

此公式使用vLookup查找源工作簿中的数据点,所有这些数据点都位于共享网络上的同一文件夹中。 由于源工作簿可能不包含所有数据点,因此ifError设置为在目标工作簿中将该数据点的编号返回为0.

从上面可以看出,我每月有10个数据点,我需要在一列中填写12个月。

但是,我无法理解如何在更改' incident_summary - Jan.csv'时循环使用此公式。到2月,3月,4月等...因为我需要循环这个公式整整一年,也就是Jan-Dec所以有任何建议吗?

2 个答案:

答案 0 :(得分:0)

首先,我建议avoid using .Select。那么你不能使用Autofill,你需要循环遍历范围并自己编写每个公式。

因此,将月份名称放入数组并循环遍历该数组,在每个单元格中编写公式:

Option Explicit

Public Sub FillFormula()
    Dim ArrMonth As Variant
    ArrMonth = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")

    Dim i As Long
    For i = LBound(ArrMonth) To UBound(ArrMonth)
        Range("C2:C11").Offset(i * 10, 0).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],'incident_summary - " & ArrMonth(i) & ".csv'!R3C2:R11C3,2,FALSE),0)"
    Next i
End Sub

请注意,您正在尝试访问无法使用的CSV文件。公式只能访问Excel文件。但CSV基本上是一个TXT文件,其中包含逗号分隔值。因此,您无法使用公式访问工作表,列或行。必须先将该CSV转换为Excel文件,然后才能使用公式访问它。

答案 1 :(得分:0)

按要求说明我的评论。

Sub x()

Dim months As Variant, i As Long, r As Range

months = Array("Jan", "Feb", "Mar") 'etc
Set r = Range("C2:C11")

For i = LBound(months) To UBound(months)
    r.FormulaR1C1 = _
        "=IFERROR(VLOOKUP(RC[-1],'incident_summary - " & months(i) & ".csv'!R3C2:R11C3,2,FALSE),0)"
    Set r = r.Offset(10)
Next i

End Sub