Excel VBA统计不同尺寸表格Yes/No占比遇行数适配值错误问题
解决VBA动态统计Yes占比(循环至空单元格停止)
原代码通过固定Resize(8,1)取8行数据,无法适配行数不固定的表格,导致部分行数据未被统计。以下是修改后的代码,实现从起始单元格向下循环,直到遇到空单元格时停止的动态统计逻辑:
Function CalcTotalPercentage() As Double Application.Volatile Dim rng As Range Dim currentCell As Range Dim yesCount As Integer Dim total As Integer yesCount = 0 total = 0 ' 遍历指定的复选框所在行区域 For Each rng In Union(Range("B2:x2"), Range("B12:x12"), Range("B22:x22"), Range("B32:x32"), Range("B42:x42"), Range("B52:x52")) ' 仅统计勾选的复选框对应列的数据 If rng.Value Then ' 从当前复选框下方第一行开始遍历 Set currentCell = rng.Offset(1, 0) ' 循环直到遇到空单元格 Do While Not IsEmpty(currentCell.Value) If UCase(currentCell.Value) = "YES" Then yesCount = yesCount + 1 End If total = total + 1 ' 移动到下一行 Set currentCell = currentCell.Offset(1, 0) Loop End If Next rng ' 计算占比(避免除以0) If total > 0 Then CalcTotalPercentage = yesCount / total Else CalcTotalPercentage = 0 End If End Function
关键改动说明
- 动态行遍历:替换原固定行数的
Resize(8,1),改用Do While循环结合IsEmpty判断,自动适配不同行数的表格,直到遇到空单元格停止 - 空值判断优化:明确判断单元格是否为空,避免统计无效的空单元格
- 边界处理修正:将原判断
total > 1改为total > 0,避免当只有1条有效数据时无法计算占比的问题
内容的提问来源于stack exchange,提问作者Josiah Lougheed
相关产品推荐
相关产品推荐

