ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量求每行出现数字的个数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-22 10:38 | 显示全部楼层 |阅读模式
老师:
    我请教的是:批量求每行出现数字的个数。
    原理如下:
    1、统计C2:F12每行出现数字的个数,在C14:C24显示。函数为"=COUNTA(C2:F2)"
    2、统计G2:J12每行出现数字的个数,在D14:D24显示。函数为"=COUNTA(G2:J12)"
    3、统计K2:N12每行出现数字的个数,在E14:E24显示。函数为"=COUNTA(K2:N2)"
    如果数据量很大的时候,函数运算很慢,请老师给予VBA解法。
    批量求每行出现数字的个数.rar (9.24 KB, 下载次数: 13) 01.jpg

TA的精华主题

TA的得分主题

发表于 2018-6-22 11:10 | 显示全部楼层
  1. Sub zz()
  2. Dim ar, b(), n%
  3. ar = [c2:n12].Value
  4. ReDim b(1 To UBound(ar), 1 To 3)
  5. n = UBound(ar, 2) / UBound(b, 2)
  6. For i = 1 To UBound(ar)
  7.     For j = 0 To 2
  8.         For jj = 1 To n
  9.             If Len(ar(i, j * n + jj)) Then b(i, j + 1) = b(i, j + 1) + 1
  10.         Next
  11.     Next
  12. Next
  13. [c14].Resize(i - 1, 3) = b
  14. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-22 11:29 | 显示全部楼层
Chip_Kenny 老师:
       您的VBA已收悉,正解!还有一个问题请教。
      思路如下:上述数据是每4列进行统计的,如果扩展开来,用单元格Q6进行列数控制,VBA如何写呢,请老师指教!
       02.jpg

TA的精华主题

TA的得分主题

发表于 2018-6-22 11:29 | 显示全部楼层
可以根据实际调整

批量求每行出现数字的个数.zip

14.27 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-22 12:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kandhong88 发表于 2018-6-22 11:29
Chip_Kenny 老师:
       您的VBA已收悉,正解!还有一个问题请教。
      思路如下:上述数据是每4列进 ...
  1. Sub zz()
  2. Dim ar, b(), n%, m%
  3. ar = [c2:n12].Value
  4. m = [q6].Value
  5. ReDim b(1 To UBound(ar), 1 To m)
  6. n = UBound(ar, 2) / m
  7. For i = 1 To UBound(ar)
  8.     For j = 0 To m - 1
  9.         For jj = 1 To n
  10.             If Len(ar(i, j * n + jj)) Then b(i, j + 1) = b(i, j + 1) + 1
  11.         Next
  12.     Next
  13. Next
  14. [c14].Resize(i - 1, m) = b
  15. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-6-22 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
A16:F26=IF(COLUMN(A1)>ROUNDUP(12/$N$14,),"",SUMPRODUCT(N(OFFSET($A2,,MAX((COLUMN(A1)-1)*$N$14),,$N$14)>0)))

格式化:L12格式化=MOD(INT((COLUMN(A2)-1)/$N$14)+1,2)=0
4611.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-22 18:34 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-24 21:21 | 显示全部楼层

Chip_Kenny老师:
    这是您向我提供的VBA作品。 原理如下:用Q6控制数据区C2:N12平分个数,然后求平分区域每行数据的个数。
    举例说明:Q6=3时,数据区C2:N12平均分成3份,每行含有的数据分别在C14:N24显示。
    此VBA有一个不足之处:
    当Q6=6时,显示的数据为6列;
    而当Q6=3时,在显示的数据应为3列的同时,还有Q6=6时的数据。
    我想要的结果是:当Q6=3时,显示的数据为3列;Q6=6时,显示的数据为6列;
    请老师修改此VBA。
    批量求每行出现数字的个数.rar (17.41 KB, 下载次数: 2)
    01.jpg

TA的精华主题

TA的得分主题

发表于 2018-6-25 09:00 | 显示全部楼层
kandhong88 发表于 2018-6-24 21:21
Chip_Kenny老师:
    这是您向我提供的VBA作品。 原理如下:用Q6控制数据区C2:N12平分个数,然后求平分 ...

加一句清舊資料即可。
  1. Sub zz()
  2. Dim ar, b(), n%, m%
  3. ar = [c2:n12].Value
  4. m = [q6].Value
  5. ReDim b(1 To UBound(ar), 1 To m)
  6. n = UBound(ar, 2) / m
  7. For i = 1 To UBound(ar)
  8.     For j = 0 To m - 1
  9.         For jj = 1 To n
  10.             If Len(ar(i, j * n + jj)) Then b(i, j + 1) = b(i, j + 1) + 1
  11.         Next
  12.     Next
  13. Next
  14. [c14].CurrentRegion.Value = ""
  15. [c14].Resize(i - 1, m) = b
  16. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 03:51 , Processed in 0.049852 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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