vba - 如何使用重复的 SUMIFS 函数缩短 VBA 代码?
问题描述
我根据单元格中值的变化在 VBA 中编写了一些 SUMIFS
例如,单元格 A23 是带有 Total 和 UK 的下拉菜单
If A23 = "Total" Then
Result.Range("A24").Value = WorkSheetFunction.Sumifs(Range(B:B)),
Range(C:C)), "Year",
Range(D:D)), "Group")
If A23 = "UK" Then
Result.Range("A24").Value = WorkSheetFunction.Sumifs(Range(B:B)),
Range(C:C)), "Year",
Range(D:D)), "Group",
Range(E:E)), "UK")
根据上面的例子,第二个代码是第一个代码的重复,但包含一个额外的范围来选择“英国”
有没有一种方法可以缩短代码,而不是不断地重写它,这样我就可以简单地连接我想要包含的任何其他范围?
所以理想情况下我可以有类似的东西:
Test = Result.Range("A24").Value = WorkSheetFunction.Sumifs(Range(B:B)),
Range(C:C)), "Year",
Range(D:D)), "Group"
If A23 = Total Then
A24 = Test)
If A23 = UK Then
A24 = Test &, Range(E:E), "UK")
这可能吗?如果可以,我该怎么做?
解决方案
(这个答案主要是为了回应包含实际代码的第二条评论 - 虽然看起来你正在做的实际操作有点不同?)
因此,正如我所说,您需要通过将单独的部分保存在变量中来简化代码
Dim strFormula as String
Dim rngLIC as Range
Dim rngRegion as Range
Dim rngYear as Range
Set rngLIC = Range(rngHeaders.Find(LIC) , rngHeaders.Find(LIC).End(xlDown))
Set rngRegion = Range(rngHeaders.Find(Year), rngHeaders.Find(Year).End(xlDown))
Set rngYear = Range(rngHeaders.Find(Year), rngHeaders.Find(Year).End(xlDown))
'and I think you'll need to add others for the extra bit you wanted to fix, but you get the pattern
strFormula = "=SUMIFS(" & _
rngLIC.Address(xlA1) & "," & _
rngRegion.Address(xlA1) & ", A23," & _
rngYear.Address(xlA1) & ", ""Year 0"")"
'Then add the replace bit I detailed above if necessary to add bits to the formula
该代码应该希望与您在评论中添加的代码片段完全相同。这有帮助吗?(如果是,请投票,因为我正在努力建立自己的声誉!!)
推荐阅读
- javascript - Javascript - 以通用方式更新深层复杂对象
- c - 在visual studio代码上设置“Per Monitor DPI Aware”?
- reactjs - 有没有办法将变量值从一个反应组件传递到另一个?
- c# - IIS .NET Core 5.0 MVC API - 出现 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动
- cypress - 赛普拉斯有没有办法检查开放请求?
- python - 返回值和跟踪内部状态时如何使用 Python super()?
- installation - 使复选框的行为类似于单选按钮,但默认选择其中一个部分 - NSIS 组件页面
- bash - 如何使 apt 假设是并强制 bash 脚本中的所有安装是
- python - 在一个非常大的表上对 Google Cloud SQL 的超慢 SQLAlchemy 查询
- amazon-cloudformation - 如何使用 AWS CloudFormation 模板更正此错误