打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vba计算数组非空元素的数量

VBA判断数组中非空值的个数,理论上应该可以使用WorksheetFunction.CountA函数去判断非空个数的,但是实际测试上CountA会把空白的数组元素也计算进去,所以行不通,网上也没有找到专门统计数组非空数量的函数,虽然可以简单地用for循环遍历数组累计出数量,但是如果数组很大,或者需要重复统计数组的元素数量时,用for循环就会很慢而且很耗内存,所以我自己研究了一个方法:

Sub 计算数组非空元素的数量()
dim aa,bb
arr = Array("苹果", "西瓜", "", "", "香蕉", "", "香蕉", "")
aa = "@" '第一种特殊字符
bb = "#" '第二种特殊字符

all_xiabiao = ubound( arr )  '统计原数组的最大下标
merge_string = aa & bb & Join(arr, bb & aa & bb) & bb & aa  '所有元素之间放“#@#”,前放“@#”,后放“#@”,合并成字符串
split_arr = Split(merge_string, bb & bb)    '根据“##”拆分成新数组
null_xiabiao = ubound( split_arr )	'计算拆分出来的数组最大下标就是空值个数,比如拆分出5个元素,最大下标就是4,就是4个“##”,4个空值
notnull_num = all_xiabiao + 1 - null_xiabiao'非空个数就等于全部元素个数(arr下标+1)减去空值个数
MsgBox notnull_num
End Sub

这个代码是比较简单的,不过使用需要注意作为辅助的两个特殊字符必须是在数组中没有出现的,不然可能会计算错误。

这个代码原理简单点说,就是将数组中所有元素用两种特殊字符标记,让非空值形成与空值不一样的标志,再通过计算空值的特殊标志而得到空值数量,用数组的总元素数量减去空值的数量就得到非空值的数量。

比如解析以上代码就是用jion函数将arr数组组成一个字符串merge_string(@#苹果#@#西瓜#@##@##@#香蕉#@##@#香蕉#@##@)。

其中“##”就是空值的标记,然后再根据“##”将字符串用aplit函数拆分成split_arr数组("@#苹果#@西瓜#@", "@", "@", "@#香蕉#@", "@", "@#香蕉#@", "@")。

再统计split_arr数组的元素个数减1(split_arr的下标)就可以得到空值的数量,之后再将原数组的总元素数量减去空值的数量就得到非空值的数量了。

如果这篇文章对您有帮助,可以分享或转藏到您的个人图书馆避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
排序算法05------------------------堆排序(图解)
JavaScript数组 - 其他方法
生成一个下标从N开始的数组
Linux shell之数组
Excel 数组下标知识
计数排序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服