我正在做一些数据处理,我想实现这个目标:
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所以有任何建议吗?
答案 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