我有一个 Excel 电子表格,里面是我的时间表。这意味着,我有一些任务,它们几乎总是一个连接的单元格,有时我连接 20 个单元格,有时只连接 2 个单元格。例子
由于每个细胞都是一小时,所以我想计算一下称重的细胞数。这意味着:如果我有一个只有一个细胞的细胞,它算作一个,如果我有 3 个连接的细胞,它将算作 3 个。因此在示例图片中,细胞数应为 S1:3、S2:4、S3:2、S4:6
我搜索了很长时间,但还没有找到任何可以解决这个问题的函数。我找到的最好的方法是=countif(B4:H19, "Subject1")
,但这里基于三个相连单元格的单元格算作一个。你能帮我解决这个问题吗?
提前感谢您的回答!
答案1
实际上,您与我们分享的屏幕截图包含合并单元格和非合并单元格,因此这个问题需要 VBA 宏而不是任何公式。
Function MergedCellCount(ByRef Rng As Range, ByVal Criteria As Variant)
Dim c As Long
Dim Cell As Range
Dim n As Long
Dim r As Long
Application.Volatile
For c = 1 To Rng.Columns.Count
For r = 1 To Rng.Rows.Count
Set Cell = Rng.Cells(r, c)
If Cell.MergeCells = True And (Rng.Columns(c).Column = Cell.MergeArea.Column) Then
If Cell = Criteria Then
n = n + Cell.MergeArea.Count
r = r + (Cell.MergeArea.Rows.Count - 1)
End If
End If
Next r
Next c
MergedCellCount = n
End Function
Function unMergedCellCount(ByRef Rng As Range, ByVal Criteria As Variant)
Dim c As Long
Dim Cell As Range
Dim n As Long
Dim r As Long
Application.Volatile
For c = 1 To Rng.Columns.Count
For r = 1 To Rng.Rows.Count
Set Cell = Rng.Cells(r, c)
If Cell.MergeCells <> True And (Rng.Columns(c).Column = Cell.MergeArea.Column) Then
If Cell = Criteria Then
n = n + Cell.MergeArea.Count
r = r + (Cell.MergeArea.Rows.Count - 1)
End If
End If
Next r
Next c
unMergedCellCount = n
End Function
怎么运行的:
按下Alt+F11或选择 TAB 然后R右键单击并从菜单中选择五查看代码。
C奥皮&磷保存这些 VBA 宏。
按Alt+Q返回工作表。
现在将工作簿保存为启用宏的文件
*.xlsm
。在单元格中输入此公式
K2
并向下填充。=MergedCellCount(H$2:H$17,J2)+unMergedCellCount(H$2:H$17,J2)
根据需要调整单元格引用。