Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 具有可变标准数的SUMIF_Vba_Excel - Fatal编程技术网

Vba 具有可变标准数的SUMIF

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

我正在做一个项目,使一些报告自动化。需求是嵌套的不同级别(例如国家、地区、销售人员、产品)的汇总表。级别的数量因用户和客户端而异。我正在努力解决的是如何使用VBA构建sumifs,在那里,只有运行代码才能知道参数的数量

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
的上下文中计算公式,而不管该工作表是否处于活动状态。