SUMIF作为Excel(VBA)中的宏

SUMIF作为Excel(VBA)中的宏,vba,excel,sumifs,Vba,Excel,Sumifs,这就是我正在研究的概念 我有一张表1,上面有许多键和值: 然后,在表2中,我一直在使用SUMIF函数计算表1中的总值: 这只是一个示例,实际数据集要大得多。我需要设计一个宏,该宏将自动生成SUMIF公式并将其插入sheet2中的正确单元格中。有人能想出一个办法吗 我会从第一张表中读取数据,然后构建第二张表。您需要添加adodb记录集的引用。在VBA IDE的“工具”下拉菜单中,选择“参考”。选择“Microsoft ActiveX数据对象2.8库” Private子命令按钮10_单击() 将

这就是我正在研究的概念

我有一张表1,上面有许多键和值:

然后,在表2中,我一直在使用SUMIF函数计算表1中的总值:


这只是一个示例,实际数据集要大得多。我需要设计一个宏,该宏将自动生成SUMIF公式并将其插入sheet2中的正确单元格中。有人能想出一个办法吗

我会从第一张表中读取数据,然后构建第二张表。您需要添加adodb记录集的引用。在VBA IDE的“工具”下拉菜单中,选择“参考”。选择“Microsoft ActiveX数据对象2.8库”

Private子命令按钮10_单击()
将rs设置为新ADODB.Recordset
将ws设置为Excel.Worksheet
暗淡的光线和长的一样
暗淡的lLastRowSheet1与长
设置ws=ActiveWorkbook.Sheets(“Sheet1”)
'将字段添加到记录集中以存储数据。
用rs
.Fields.Append“行”,adInteger
.Fields.Append“Key”,adInteger
.Fields.Append“Val”,adInteger
打开
以
lLastRowSheet1=ws.UsedRange.Rows.count
lRow=1
'循环并记录列中的内容

当lRow时,我会从第一页读取数据,然后构建第二页。您需要添加adodb记录集的引用。在VBA IDE的“工具”下拉菜单中,选择“参考”。选择“Microsoft ActiveX数据对象2.8库”

Private子命令按钮10_单击()
将rs设置为新ADODB.Recordset
将ws设置为Excel.Worksheet
暗淡的光线和长的一样
暗淡的lLastRowSheet1与长
设置ws=ActiveWorkbook.Sheets(“Sheet1”)
'将字段添加到记录集中以存储数据。
用rs
.Fields.Append“行”,adInteger
.Fields.Append“Key”,adInteger
.Fields.Append“Val”,adInteger
打开
以
lLastRowSheet1=ws.UsedRange.Rows.count
lRow=1
'循环并记录列中的内容

当lRow时,我会从第一页读取数据,然后构建第二页。您需要添加adodb记录集的引用。在VBA IDE的“工具”下拉菜单中,选择“参考”。选择“Microsoft ActiveX数据对象2.8库”

Private子命令按钮10_单击()
将rs设置为新ADODB.Recordset
将ws设置为Excel.Worksheet
暗淡的光线和长的一样
暗淡的lLastRowSheet1与长
设置ws=ActiveWorkbook.Sheets(“Sheet1”)
'将字段添加到记录集中以存储数据。
用rs
.Fields.Append“行”,adInteger
.Fields.Append“Key”,adInteger
.Fields.Append“Val”,adInteger
打开
以
lLastRowSheet1=ws.UsedRange.Rows.count
lRow=1
'循环并记录列中的内容

当lRow时,我会从第一页读取数据,然后构建第二页。您需要添加adodb记录集的引用。在VBA IDE的“工具”下拉菜单中,选择“参考”。选择“Microsoft ActiveX数据对象2.8库”

Private子命令按钮10_单击()
将rs设置为新ADODB.Recordset
将ws设置为Excel.Worksheet
暗淡的光线和长的一样
暗淡的lLastRowSheet1与长
设置ws=ActiveWorkbook.Sheets(“Sheet1”)
'将字段添加到记录集中以存储数据。
用rs
.Fields.Append“行”,adInteger
.Fields.Append“Key”,adInteger
.Fields.Append“Val”,adInteger
打开
以
lLastRowSheet1=ws.UsedRange.Rows.count
lRow=1
'循环并记录列中的内容
当lRow时执行,这里有一个解决方案

With [sheet1!a1:index(sheet1!a:a,count(sheet1!a:a))]

    [b1:index(sheet2!b:b,count(sheet2!a:a))].Offset(1).Formula = _
        "=sumif(sheet1!" & .Offset(1).Address & ",a2,sheet1!" & .Offset(1, 1).Address & ")"

End With
这假定图纸2上的A柱已经就位。同样,它假定第2页B列的标题已经就位,B列的其余部分为空,并将由上述代码填充

它还假定为数字键

如果任何假设都是错误的,这个解决方案很容易调整。请告诉我。

这里有一个解决方案

With [sheet1!a1:index(sheet1!a:a,count(sheet1!a:a))]

    [b1:index(sheet2!b:b,count(sheet2!a:a))].Offset(1).Formula = _
        "=sumif(sheet1!" & .Offset(1).Address & ",a2,sheet1!" & .Offset(1, 1).Address & ")"

End With
这假定图纸2上的A柱已经就位。同样,它假定第2页B列的标题已经就位,B列的其余部分为空,并将由上述代码填充

它还假定为数字键

如果任何假设都是错误的,这个解决方案很容易调整。请告诉我。

这里有一个解决方案

With [sheet1!a1:index(sheet1!a:a,count(sheet1!a:a))]

    [b1:index(sheet2!b:b,count(sheet2!a:a))].Offset(1).Formula = _
        "=sumif(sheet1!" & .Offset(1).Address & ",a2,sheet1!" & .Offset(1, 1).Address & ")"

End With
这假定图纸2上的A柱已经就位。同样,它假定第2页B列的标题已经就位,B列的其余部分为空,并将由上述代码填充

它还假定为数字键

如果任何假设都是错误的,这个解决方案很容易调整。请告诉我。

这里有一个解决方案

With [sheet1!a1:index(sheet1!a:a,count(sheet1!a:a))]

    [b1:index(sheet2!b:b,count(sheet2!a:a))].Offset(1).Formula = _
        "=sumif(sheet1!" & .Offset(1).Address & ",a2,sheet1!" & .Offset(1, 1).Address & ")"

End With
这假定图纸2上的A柱已经就位。同样,它假定第2页B列的标题已经就位,B列的其余部分为空,并将由上述代码填充

它还假定为数字键


如果任何假设都是错误的,这个解决方案很容易调整。请告诉我。

即使不知道任何其他要求或您正在做什么,也不知道有多少列或键或其他任何信息,您也可以:

  • 录制一个宏
  • 将其分配给一个按钮
  • 写一行这样的代码 当用户单击按钮时,它将在列上运行宏 选中(或选中列的第一个单元格时)

  • 如果有100多个列,那么是的,这很乏味,您可能希望宏循环遍历所有列,但我不知道您得到了什么/需要什么。

    即使不知道任何其他要求或您正在做什么,或有多少列或键或其他任何内容,您也可以:

  • 录制一个宏
  • 将其分配给一个按钮
  • 写一行这样的代码 当用户单击按钮时,它将在列上运行宏 选中(或选中列的第一个单元格时)
  • 如果有100多列,那么ye