我有以下 VBA 代码:
BD.Sheets("Sheet1").Range("F" & Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).Formula = "=SUMIF('" & spath & "[" & itm & "]Sheet1'!$D$13:$D$" & LastRow2 & ",D" & BD.Sheets("Sheet1").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ",OFFSET('" & spath & "[" & itm & "]Sheet1'!$D$13:$D$" & LastRow2 & ",0,MATCH(E" & BD.Sheets("Sheet1").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ",'" & spath & "[" & itm & "]Sheet1'!$D$12:$R$12,0)-1))"
With BD.Sheets("Sheet1")
.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).AutoFill Destination:=.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ":F" & .Cells(Rows.Count, 4).End(xlUp).Row)
End With
(不要介意很长的 SUMIF 公式)
我正在使用以下代码循环文件:
spath = "P:\Actuary\Cash Flow Forecast\Annual and Quarterly Budget Data\"
''Retrieve the current files in directory
sfile = Dir(spath)
Do While sfile <> ""
strFileNames = strFileNames & "," & sfile
sfile = Dir()
Loop
''Open each file found
For Each itm In Split(strFileNames, ",")
If itm <> "" Then
Set wb = Workbooks.Open(spath & itm)
''DO LOTS OF CALCULATIONS (code above included)
End If
Next itm
对于每个文件,假设我有以下列,我希望该公式执行的操作是放在第 6 列中的下一个可用单元格(根据我的代码,第 6 列是数量)并向下拖动直到最后一行列4(同样,根据我的代码,第 4 列是 RptLOB)
前任:
RptLOB ECMAccount Amount
Disability GEP 20 ---> (=SUMIF formula for file 1)
MSL GEP ..
Contingency GEP .. ---> drag down to here (end of file 1)
Disability GEP 30 ---> (=SUMIF formula for file 2)
MSL GEP ..
Contingency GEP .. ---> drag down to here (end of file 2)
依此类推每个文件。
我认为我的第一个代码实际上将 SUMIF 公式放在 Amount 列的下一个可用单元格并将其向下拖动会起作用,但它只是将 SUMIF 公式放在 Amount 之后的第一行(Amount 在 F1 中 - 所以只有 20 是显示)并且没有其他任何内容被拖下......我不太确定我的代码有什么问题,无论是自动填充还是它如何读取每个文件。
如果有人对此问题有任何见解或需要更多说明,请随时发表评论/询问。
任何帮助将不胜感激!
编辑:即使我只使用一个文件并输入另一个类似的代码
With BD.Sheets("Sheet1")
.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).Select
Selection.AutoFill Destination:=.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ":F" & .Cells(Rows.Count, 4).End(xlUp).Row)
End With
... F2 中只显示一个值,下面什么都没有