ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 创建 多条件查询的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

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

←_←←_←

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 12:05 | 显示全部楼层
lss001 发表于 2018-9-24 11:50
代码没问题,请检查一下公式

老师:我说的是:当指定条件为“6”时,整个B列只有17个符合条件的数据:
12
7
4
10
16
8
1
6
4
21
13
20
13
2
9
32
4

如果要查询指定次序超过数据个数本身【17】的18或以上个数据,如指定次序为D22:D27,E22:E27不应该显示0,而是显示空白【代表没有的意思】。


    老师:请您把E2里的指定条件 5,换成 6,显示的计算结果就会和18楼里的附件一样,

TA的精华主题

TA的得分主题

发表于 2018-9-24 12:17 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2018-9-24 16:26 编辑

Function DTJCX

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 12:32 | 显示全部楼层
本帖最后由 WYS67 于 2018-9-24 13:04 编辑
lss001 发表于 2018-9-24 12:17
把→If ac  "" Then f = dr(ac, 0) Else f = ""
改→If ac  "" And ac

老师:把下面红色填充的If ac <> "" Then f = dr(ac, 0) Else f = ""   修改成  If ac <> "" And ac <=n Then f = dr(ac, 0) Else f = ""  后,E22:G27中,只是G22:G27单值公式的计算结果变成了空白,但E22:F27区域公式仍然显示0,没有显示空白:
Function DTJCX(aa As Range, a, ab As Range, b, ac As Range)
Application.Volatile
Dim ar, br, cr, dr, fr, f, i&, j&, k&, m&, n&
    ar = aa: br = ab: cr = ac
    For k = UBound(ar) To 1 Step -1
        If ar(k, 1) <> "" Then Exit For
    Next
    ReDim dr(1 To k, 0): ReDim fr(1 To UBound(ar), 0)
    For i = 1 To k
        j = k - i + 1
        If b = 0 Then
            If ar(i, 1) <> "" And br(i, 1) <> "" And ar(i, 1) = a Then
                n = n + 1: dr(n, 0) = br(i, 1)
            End If
        Else
            If ar(j, 1) <> "" And br(j, 1) <> "" And ar(j, 1) = a Then
                n = n + 1: dr(n, 0) = br(j, 1)
            End If
        End If
    Next
    If ac.Rows.Count > 1 Then
    For i = 1 To UBound(ar)
        If i >= cr(1, 1) And i <= cr(UBound(cr), 1) - cr(1, 1) + 1 Then
            m = m + 1: fr(m, 0) = dr(i, 0)
        Else: fr(i, 0) = ""
        End If
    Next
        Else
          If ac <> "" Then f = dr(ac, 0) Else f = ""  
         
    End If
    If ac.Rows.Count > 1 Then DTJCX = fr Else DTJCX = f
End Function

20180924130339.png

TA的精华主题

TA的得分主题

发表于 2018-9-24 13:54 来自手机 | 显示全部楼层
WYS67 发表于 2018-9-24 12:32
老师:把下面红色填充的If ac  "" Then f = dr(ac, 0) Else f = ""   修改成  If ac  "" And ac  1 Then
...

请参考楼上修改代码!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 14:05 | 显示全部楼层
本帖最后由 WYS67 于 2018-9-24 14:13 编辑
lss001 发表于 2018-9-24 13:54
请参考楼上修改代码!

老师:楼上的代码还是无法屏蔽E22:F27里的0为空白。
    就是:【当符合指定条件【6】的数据【总共17个】,少于指定次序的区域行数【D5:D27-表头4行=23个单元格】时,】,就会在E22:F27显示0,而不是空白。请看截图和附件:
20180924140127.png


创建一个多条件查询的自定义函数.zip (119.2 KB, 下载次数: 7)


TA的精华主题

TA的得分主题

发表于 2018-9-24 14:11 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
WYS67 发表于 2018-9-24 14:05
老师:楼上的代码还是无法屏蔽E22:F27里的0为空白。请看截图和附件:

请重新复制,刚刚更新!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-24 14:28 | 显示全部楼层
lss001 发表于 2018-9-24 12:17
Function DTJCX(aa As Range, a, ab As Range, b, ac As Range)
Application.Volatile
Dim ar, br, cr, d ...

20180924142807.png 谢谢老师:这次完全正确了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-27 14:00 | 显示全部楼层
lss001 发表于 2018-9-24 11:10
=DTJCX($A$5:$A$100000,$E$2,$B$5:$B$100000,G$4,$D5)
是普通公式→单值用
=DTJCX($A$5:$A$100000,$E$2,$ ...

老师:感觉http://club.excelhome.net/thread-1437728-1-1.html  里的问题,比起前几天的简单多了,为什么没有老师编写代码啊?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-28 16:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2018-9-24 14:11
请重新复制,刚刚更新!

这一段时间里,老师真是帮了我很大的忙!真是感谢不尽!http://club.excelhome.net/thread-1438068-1-1.html里的问题,如果您有兴趣,可以移步前往,看看怎么写代码?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 21:37 , Processed in 0.025907 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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