Vba 具有可变标准数的SUMIF
我正在做一个项目,使一些报告自动化。需求是嵌套的不同级别(例如国家、地区、销售人员、产品)的汇总表。级别的数量因用户和客户端而异。我正在努力解决的是如何使用VBA构建sumifs,在那里,只有运行代码才能知道参数的数量Vba 具有可变标准数的SUMIF,vba,excel,Vba,Excel,我正在做一个项目,使一些报告自动化。需求是嵌套的不同级别(例如国家、地区、销售人员、产品)的汇总表。级别的数量因用户和客户端而异。我正在努力解决的是如何使用VBA构建sumifs,在那里,只有运行代码才能知道参数的数量 Dim i as Long Dim InSh As Object Dim OutSh As Object Set InSh = Workbooks("Readin").Worksheets("Sheet1") Set OutSh = Workbooks("Output").Wor
Dim i as Long
Dim InSh As Object
Dim OutSh As Object
Set InSh = Workbooks("Readin").Worksheets("Sheet1")
Set OutSh = Workbooks("Output").Worksheets("Sheet1")
for(i in 2 to n)
OutSh.Cells(i, 1) = Application.WorksheetFunction.SumIfs(Insh.Range(rng_0),Insh.range(rng_1) _
,"Criteria_1",.....,Insh.Range(rng_n,"Criteria_N")
next i
出于两个原因,我希望避免VBA在Excel单元格中编写公式。第一,对底层数据的访问是有限的,不会在文件中发送。第二是速度。我相信这种方法会更快,因为手工制作这些报告时,会在多张纸上创建1000个公式
我试图通过创建字符串和数组将变量输入sumif语句,但两次都收到了不匹配错误。我能想到的唯一解决方案是基于传递的标准数量的select case语句,但这仅限于我将编程的内容,我不知道标准可能会有多深。您可以将
COUNTIFS()
构造为字符串公式,但不必将其插入工作表,使用工作表.Evaluate()
方法执行它。我猜您的意思是SUMIFS()
。这应该行得通。在测试过程中,我注意到如果我使用以下代码:“OutString=”SumIfs(Sheet1!C:C,Sheet1!A:A),“OutSh.Cells(1,1)=Evaluate(OutString)OutSh.Cells(2,1)=[OutString]`我会得到不同的输出。第一个是数字,第二个是字符串。我可以使用第一种方法,但我想知道为什么会有区别。有两种不同的方法:应用程序。Evaluate
(如果您没有另外指定,则为默认值)在ActiveSheet的上下文中求值:我建议不要使用该方法。通常您需要的是工作表。评估。例如,Sheet1.Evaluate(…)
将在Sheet1
的上下文中计算公式,而不管该工作表是否处于活动状态。