ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

请问:当evaluate函数中变量是一个区域,怎么表达?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-9-25 19:42 | 显示全部楼层 |阅读模式
最近在学习evaluate函数,想用它做并行运算,加快速度,遇上一个问题,当evaluate用在countif函数上时,变量是一个区域,该怎么表达?反复实验都没找到解决办法。请教大师出手,谢谢了。
'evaluate并行运算测试
'代码用途:E列公式=COUNTIFS(B:B,"<"&B2),用evaluate取代countif,计算结果存放在D列。
'evaluate测试参数 是一列变量"$B2:$B5",代码怎么表达?
Sub test()
'E列公式=COUNTIFS(B:B,"<"&B2),当用evaluate计算时,当B2是一列变量区域,该怎么表达?。
'求B列中 小于B2值的个数,依此类推B2/B3/B4/B5...
    [C:D].ClearContents
    s = "$B2:$B5*1"
    [C2:C5].Value = Evaluate(s)     '可以用s获得B列的值,并且赋值给C列

    sfml = "COUNTIFS(B:B,""<""&" & s & ")"    '利用s字符串,获取B的符合条件(小于自身,比如小于B2/B3/B4。。。)的个数
    Debug.Print sfml    'sfml字符串也是符合规范的
    [D2:D5].Value = Evaluate(sfml)   's字符串不起作用了,但是上面[C2:C5]代码中,s是起作用的
    '求[D2:D5]时,s被识别为B2,而不是B2:B5,为什么?
End Sub

QQ图片20210925192326.png

QQ图片20210925192310.png


代码在发附件。谢了各位大师。
    [D2:D5].Value = Evaluate("COUNTIFS(B:B,""<"" & s & )")   's字符串不起作用了,但是上面[C2:C5]代码中,s是起作用的
  这行代码的S,当它是一个区域变量,该怎么表示(VBA中)?

工作簿1.rar

93.01 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2021-9-26 03:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

发表于 2021-9-26 13:37 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2021-9-26 22:09 编辑

'CountIfs函数只返回单值,获取数组值需要其它函数配合!例如可用mmult,sumproduct,textjoin等...,考虑版本问题,以下使用mmult汇总。

s = "$B2:$B5"
sfml = Evaluate ("Mmult(CountIfs(B:B,""<""&" & s & "),Row(A1))")

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-26 17:12 | 显示全部楼层
本帖最后由 qsxz 于 2021-9-26 18:58 编辑

感谢版主,不过我想计算区域的个数:
[D2:D5]=application.countif(columns(2),">" & [B2])其中[B2]按照行数,依次b3/b4/b5......,相当于计算B列每行的数据个数,并非仅仅只计算[B2]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-26 17:20 | 显示全部楼层
lss001 发表于 2021-9-26 13:37
'CountIfs获取数组值需要Sumproduct汇总或者TextJoin合并,注意∶TextJoin函数只有office高版本才有!

s  ...

老师你好,提示错误13,类型不匹配。这一句:
    sfml = Split(Evaluate("TextJoin("","",1,CountIfs(B:B,""<""&" & s & "))"), ",")

TA的精华主题

TA的得分主题

发表于 2021-9-26 21:05 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2021-9-26 22:10 编辑

您的office啥版本?有可能版本不支持Textjoin函数,请参考楼上更换低版本Mmult函数!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-27 21:43 | 显示全部楼层
lss001 发表于 2021-9-26 21:05
您的office啥版本?有可能版本不支持Textjoin函数,请参考楼上更换低版本Mmult函数!

我用的office2013。
我分析我之前的方法,是没解决数组公式在countif中的使用方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-30 16:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 08:36 , Processed in 0.042438 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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