【发布时间】:2018-01-12 03:34:54
【问题描述】:
我一直在尝试编写一个使用SUMFIS 公式的宏;这是我目前所拥有的:
Sub SumCodes()
Dim BL1 As Worksheet, Jan As Worksheet
Dim Code As Range, Shift As Range, Month As Range, Seconds As Range, OutPut As Range, HeadCode As Range
Set BL1 = ThisWorkbook.Sheets("BL1")
Set Jan = ThisWorkbook.Sheets("Jan")
Set Code = BL1.Range("D2:D")
Set Shift = BL1.Range("I2:I")
Set Month = BL1.Range("C2:C")
Set Seconds = BL1.Range("G2:G")
Set OutPut = Jan.Range("C3:CO3")
Set HeadCode = Jan.Range("C2:CO2")
OutPut = Application.WorksheetFunction.SumIfs(Seconds, Code, HeadCode, Month, "=Jan", Shift, "=1")
End Sub
我有大约 30,000 行,OutPut 需要在基于输出列标题的范围内。我不想只在每个单元格中输入公式,因为条目太多。我无法附上 Excel 工作簿,因为它太大了;但这里有几个屏幕截图:
所以我想做什么:
如果BL1 column D 中的条目与工作表Jan (C2) 的标题相同并且如果月份(C 列)在BL1 是“Jan”,如果 BL1 中的 Shift(第 I 列)为 1。我最终希望将其更改为一年中的每个月,进行 3 个轮班。
当我运行我拥有的代码时,我得到一个
运行时错误“1004”:应用程序定义或对象定义错误
我试过循环,但我得到了同样的错误。我对 VBA 不是很熟悉,我通常用 Python 编写代码;因此,我可以在修复此代码并理解它为什么不起作用的方式上获得的任何帮助都会非常有帮助。
提前谢谢你!
【问题讨论】:
-
"D2:D"不是有效范围。您可以使用整个列"D:D"或添加结束行号。其他列也一样。 -
好吧,我明白为什么会这样了。所以对于' C3:CO3 '和' C2:CO2 '我必须将它用作循环吗?当我删除行索引并填写 100,000 个条目时,我没有考虑清楚。