ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13736|回复: 67

[求助] 使代码能够忽略数据区域中间的空白单元格进行计算

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-8 10:44 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 玉阳山人 于 2018-9-8 15:40 编辑

大神们:下面的代码只能执行--从数据源G5【开始行号】,至G20002【最后数据行号】 中间没有空白单元格的计算。一旦中间出现空白单元格【G5:G20002之间抹去任何一个数据】,结果输出列I5:K11980就会全部变成空白:
感觉是  If arr(i, 1) = "" Then Exit For 这一句的问题。但去掉这一句后,中间的空格会被默认当做0来计数。而我需要的是:空格就是无、没有的意思,不能默认为是数字0而参与I4指定的0的次数累计!如:当K1为指定为36时,I5:K5的出现次数之为33,少了的3个自然就是3个空白单元格。

Public Function COUNTIFZQ(qy As Range, zq, tj, Optional x = 0)
    Application.Volatile
    arr = qy
    ReDim brr(1 To UBound(arr), 1 To 1) As Variant

    j = 0
     For i = 1 To UBound(arr)
     brr(i, 1) = 0
     Next

    For i = 1 To UBound(arr)
    If arr(i, 1) = "" Then Exit For
    If (i Mod zq) = 1 Then j = j + 1
        If arr(i, 1) = tj Then
            brr(j, 1) = brr(j, 1) + 1
        End If
    Next
         For i = j + x To UBound(arr)
     brr(i, 1) = ""
     Next
    COUNTIFZQ
End Function

按指定周期 进行 条件计数.zip (345.75 KB, 下载次数: 6)

   恳请大神们修改代码,使公式能够忽略数据源 中间的空格,只对指定周期内数据区域的非空单元格进行计数,并显示正确的计算结果。

TA的精华主题

TA的得分主题

发表于 2018-9-8 10:51 | 显示全部楼层
  1. If arr(i, 1) = "" Then Exit For
复制代码
这里遇到空就退出计算,你代码设置的呀

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 10:55 | 显示全部楼层
本帖最后由 玉阳山人 于 2018-9-8 10:57 编辑
microyip 发表于 2018-9-8 10:51
这里遇到空就退出计算,你代码设置的呀

老师:能不能修改成:让公式能够忽略数据源 开始和最后数据中间的空格,显示正确的计算结果?怎样修改?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 11:04 | 显示全部楼层
microyip 发表于 2018-9-8 10:51
这里遇到空就退出计算,你代码设置的呀

老师:怎样才能修改成:自数据源里最后一个数据开始,遇到空就退出计算?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 11:24 | 显示全部楼层
cells(rows.count,1).end(3).row  这个 代码是不是代表最后一个数据?怎样修改 If arr(i, 1) = "" Then Exit For为最后一个数据后退出计算?

TA的精华主题

TA的得分主题

发表于 2018-9-8 11:29 | 显示全部楼层
UBound(arr)本身就已经限制了是到最后一个单元格,何必要条件那个退出判断呢

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 11:32 | 显示全部楼层
microyip 发表于 2018-9-8 11:29
UBound(arr)本身就已经限制了是到最后一个单元格,何必要条件那个退出判断呢

老师:对VBA我是真的不懂。只是需要:公式能够忽略数据源 中间的空格,显示正确的计算结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 11:34 | 显示全部楼层
microyip 发表于 2018-9-8 11:29
UBound(arr)本身就已经限制了是到最后一个单元格,何必要条件那个退出判断呢

您的意思是:去掉 If arr(i, 1) = "" Then Exit For 这一句就行了?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 12:03 | 显示全部楼层
希望有大神能够帮忙解决问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-8 12:08 | 显示全部楼层
microyip 发表于 2018-9-8 11:29
UBound(arr)本身就已经限制了是到最后一个单元格,何必要条件那个退出判断呢

您的意思是:去掉 If arr(i, 1) = "" Then Exit For 这一句就行了?

       但当去掉这一句后,中间出现的空格就会被默认为0,而参与I4指定的“0”的出现次数累计呀!怎样才能把空格当作无、没有,不参与I列0出现次数的累计?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-14 02:32 , Processed in 0.026188 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表