【发布时间】:2018-10-25 12:10:59
【问题描述】:
我有一个 SUMIFS 函数。我想把这个函数翻译成VBA代码,但是我不能让它工作。
我的 Excel 文件的两张图片展示了一个简化的示例。
我有一个输入选项卡来提供有关在不同日期买卖的几种产品的信息。产品名称显示在 ISIN 下方。我想在特定条件下将输入表中的数量汇总到输出表中。
我有以下需要满足的论点:
Dim Arg1 As Range 'the range i want to sum : so quantity
Dim Arg2 As Range 'criteria for range : Dates
Dim Arg3 As Range 'the criteria (range)
Dim Arg4 As Range 'criteria for range : ISIN
Dim Arg5 As Range 'the criteria (range)
Dim Arg6 As Range 'criteria for range : Type
Dim Arg7 As Range 'the criteria (range)
Set Arg1 = ThisWB.Sheets("INPUT").Range("A1:A13")
Set Arg2 = ThisWB.Sheets("INPUT").Range("B1:B13")
Set Arg3 = ThisWB.Sheets("OUTPUT").Range("A4:A8")
Set Arg4 = ThisWB.Sheets("INPUT").Range("C1:C13")
'these are rows (so ISIN codes vertically)
Set Arg5 = ThisWB.Sheets("OUTPUT").Range("B2:E2")
Set Arg6 = ThisWB.Sheets("INPUT").Range("D1:D13")
'This is the criteria that only values under Buy should be summed
Set Arg7 = ThisWB.Sheets("OUTPUT").Range("B2")
我想对输出文件中每个 ISIN 代码/产品的数量求和。
结果应显示在输出表的红色轮廓框中。
如果日期和购买任务与输出文件中显示的相对应,就会发生这种情况
我不知道如何正确调暗和设置变量。我也不知道代码将如何运行输出文件中显示的所有日期和 ISIN 代码。
这是迄今为止我的真实 Excel 工作表的代码。不适用于我之前展示的简化版。
Option Explicit
Sub InsertQ()
'Sum Quantities
'Declare variables
Dim lastRowData, lastRowInput, I, x, pasteRow As Integer
Dim shtInput As Worksheet
Dim shtData As Worksheet
Dim Arg1 As Range 'the range i want to sum : so quantity
Dim Arg2 As Range 'criteria for range : Dates
Dim Arg3 As Range 'the criteria (range)
Dim Arg4 As Range 'criteria for range : ISIN
Dim Arg5 As Range 'the criteria (range)
Dim Arg6 As Range 'criteria for range : Type
Dim Arg7 As Range 'the criteria (range)
'Set variables
Set shtData = Sheets("OUTPUT")
Set shtInput = Sheets("INPUT")
lastRowData = shtData.Range("B4").End(xlDown).Row
lastRowInput = shtInput.Range("A1").End(xlDown).Row
pasteRow = 5
Set Arg1 = shtInput.Range("G1:G1048576")
Set Arg2 = shtInput.Range("J1:J1048576")
Set Arg3 = shtData.Range("A4:A20")
Set Arg4 = shtInput.Range("AF1:AF1048576")
Set Arg5 = shtData.Range("B2:E2")
Set Arg6 = shtInput.Range("E1:E1048576")
Set Arg7 = shtData.Range("A2")
'Deactivate Screen for purpose of performance
Application.ScreenUpdating = False
'Code
For I = 2 To lastRowData
For x = 2 To lastRowInput
shtData.Cells(x, I) = _
Application.WorksheetFunction.SumIfs(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
Next x
pasteRow = pasteRow + 1
Next I
'Formatting
lastRowData = shtData.Range("B4").End(xlDown).Row
shtData.Range("B4:XFD" & lastRowData).NumberFormat = "0.00"
shtData.Range("E5:E" & lastRowData).NumberFormat = "0.00"
'Confirm to user
Application.ScreenUpdating = True
shtData.Range("A1").Select
End Sub
【问题讨论】:
-
=SUMIFS(INPUT!$A:$A;INPUT!$B:$B;OUTPUT!$A4;INPUT!$C:$C;OUTPUT!C$2;INPUT!$D: $D;输出!$B$1)
-
在您启动宏之前,OUTPUT 表中是否已有数据?我的意思是日期和 ISIN 已经存在了吗?那么只有红色边框区域必须由程序填充?还是该程序会生成整个工作表?
-
一年中所有日子的日期,ISIN 代码已经在输出选项卡中。所以只需要填写红色字段
-
看我的第二个答案。我为图片中的示例添加了 VBA 解决方案。
-
如果您的问题已解决,请将其标记为已解决:Accepting Answers: How does it work?