【发布时间】:2018-03-09 19:54:02
【问题描述】:
我正在一个包含多个选项卡的工作簿上用 Excel 编写一些 VBA 代码,其中大部分都包含一个表格。我正在创建一个用户定义的函数来计算每个工作表上单个列中给定输入组合(两个输入)的所有实例。我意识到可能有一个非 vba 解决方法,但我希望在进行更新时尽可能少地手动操作此工作簿。目前它不包含很多单元格,但它可能会向前发展。
例如:给定“质量”和“立即到期”,我想计算在每个工作表的给定列中存在多少作为“质量:立即到期”的这种组合的实例。然后,应在特定单元格中调用函数的初始工作表(即摘要页面)上将总数作为整数输出。
我在一些事情上四处寻找帮助,但我的函数不断收到“#VALUE”错误,我目前无法弄清楚。我对 VBA 还是较新,所以如果我做了一些愚蠢的事情,请给我一些解释。我会很感激的!
这是我的模块:
Function StatusCounterByDepartment(Department As String, Status As String)
Dim Counter As Integer: Counter = 0
For i = 2 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(i).Activate
For j = 2 To ActiveSheet.ListObjects(1).Rows.Count
If (ActiveSheet.Range("H" & j).Value = Department & ": " & Status) Then
Counter = Counter + 1
End If
Next j
Next i
StatusCounterByDepartment = Counter
End Function
我的思考过程是循环浏览给定的列,直到该列的长度结束,评估它是否符合我的标准,为活动工作表中的每个实例添加 1 到我的计数器,然后循环浏览我的其余部分工作表,直到我得到最终计数。然后,将最终计数报告为我的函数的返回值。
感谢您提供的任何帮助!
【问题讨论】:
-
请同时发布您的数据样本
-
为什么不使用 countif()?
-
今天晚些时候我会尝试发布一个样本集。我意识到我可以使用“COUNTIFS()”作为我的问题的解决方案,但是如果工作簿发生更改,我将不得不返回并手动调整每个公式,我不想这样做。我试图通过允许在不编辑任何公式的情况下尽可能地添加和编辑工作表来使工作表尽可能地成为虚拟证明。
-
除了我之前的评论,我还想借此机会扩展我的 VBA 知识。
标签: vba excel for-loop user-defined-functions