excel - VBA SumIfs 范围对象
问题描述
我正在尝试构建一个宏来创建一个基于 SumIfs 公式的表,其中包含 2 个条件。行是标准 1,列是标准 2。 SumIfs 的结果是表格。我询问用户标准 1、标准 2 的范围和工作表中的总和 (StrSheetName),然后在另一张工作表中构建结果。
不起作用的部分,我相信它与范围对象有关:
Cells(cellposY, cellPosX).Value = wf.SumIfs(sumRange, Criteria1, Worksheets("SumIfTable").Cells(cellposY, 2).Value, Criteria2, Worksheets("SumIfTable").Cells(2, cellPosX).Value)
编辑:
那是我的测试表(输入数据):
这就是我想要做的:
完整代码:
Dim InputRangeCritY As Range
Dim InputRangeCritX As Range
Dim InputSumValue As Range
Dim temp As Variant
Set InputRangeCritY = Application.InputBox(prompt:="Select first criteria/column, would be displayed in Y :", Type:=8)
Set InputRangeCritX = Application.InputBox(prompt:="Select second criteria/column, would be displayed in X :", Type:=8)
Set InputSumValue = Application.InputBox(prompt:="Select sum valued, will be use for the sumif formula :", Type:=8)
InputRangeCritY.Select
Selection.Copy
Dim StrSheetName As String
StrSheetName = ActiveSheet.Name
Sheets.Add.Name = "SumIfTable"
Worksheets("SumIfTable").Activate
Range("B3").Select
ActiveSheet.Paste
Range("B3").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
Worksheets(StrSheetName).Activate
InputRangeCritX.Select
Selection.Copy
Worksheets("SumIfTable").Activate
Range("D3").Select
ActiveSheet.Paste
Range("D3").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Dim OutputRangeCritY As Range
Dim OutputRangeCritX As Range
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
Set OutputRangeCritY = Selection
Range("C2").Select
Range(Selection, Selection.End(xlToRight)).Select
Set OutputRangeCritX = Selection
Dim cellPosX As Long
Dim cellposY As Long
cellPosX = 3
cellposY = 3
Set sumRange = Worksheets(StrSheetName).Range(InputSumValue.Address)
Set Criteria1 = Worksheets(StrSheetName).Range(InputRangeCritY.Address)
Set Criteria2 = Worksheets(StrSheetName).Range(InputRangeCritX.Address)
Dim wf As WorksheetFunction
Dim i As Long
Dim J As Long
J = OutputRangeCritY.Cells.Count
Dim g As Long
Dim H As Long
H = OutputRangeCritX.Cells.Count
For g = 1 To H
For i = 1 To J
Cells(cellposY, cellPosX).Value = wf.SumIfs(sumRange, Criteria1, Worksheets("SumIfTable").Cells(cellposY, 2).Value, Criteria2, Worksheets("SumIfTable").Cells(2, cellPosX).Value)
cellposY = cellposY + 1
Next
cellPosX = cellPosX + 1
Next
解决方案
推荐阅读
- laravel - 如何使用 Laravel Vue.js 在数据库中保存 user_id
- java - HtmlUnit 等待重定向
- c++ - 期望声明(C++)
- asp.net-core - 无法从视图中查看浏览器中的页面
- python - 将灰度图像标准化为一个值
- android - 为什么我无法在我的 AndroidViewModel 类中访问我的应用程序?
- vue.js - 如何将html按钮转换为本机脚本?
- django-rest-framework - 如何在 drf-yasg 库中添加自己的参数和响应值以获取 swagger 文档?
- c++ - 将由 HWND 标识的本机窗口附加到 QWidget 中
- mysql - MySQL 两表连接 - 根据状态获取结果 - 不起作用