ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] filter 函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-1 06:10 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
filter 函数 可以用于数组的筛选,比如 arr=(1,2,3,4,5,6,10,12,13)
b=filter(arr,2,true)
结果是2,12      
  这是现有的功能,只要元素中有这个字符,就符合判断条件,这个元素就被提取。

但本人目前希望是另外 一种功能:第二参数 2 作为数组的一个元素,而不是元素中的一个字符,2 就是2,2与12无关
本想用 b=filter(arr,2,false) ,剔除元素2的,现在却剔除了2个元素,2、12

也就是没法用这个函数删除元素? 只能用循环判断重新生成数组?



TA的精华主题

TA的得分主题

发表于 2018-8-1 06:26 来自手机 | 显示全部楼层
你这种级别的人,应该知道啊!
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2018-8-1 08:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-1 10:58 | 显示全部楼层
duquancai 发表于 2018-8-1 06:26
你这种级别的人,应该知道啊!

不好意思,我的级别是灌水出来的,不懂的东西太多了,今后还请多多指教,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-1 11:51 | 显示全部楼层
本意: 在数组内排名

1、原考虑,用max, 但需要在原数组中剔除,然后才能下一个max, 所以想到了filter。不行
2、后考虑,用large, 但发现,有重复值时,排名是不同的,也不行
3、 现解决办法:
      先用字典存入数据,目的是去重复
      再对p=dc.keys,用large循环取值, 并存入 dc()=i ,  即:值-排名
      最后到数组中赋值即可

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-1 11:57 | 显示全部楼层
duquancai 发表于 2018-8-1 06:26
你这种级别的人,应该知道啊!

我一直没有搞定的就是xmlhttp, 至今仍在用ie法,最近又看到了一个inet的示例,似乎比http要方便点,但比ie法,代码也复杂的多。  而网上又说winsork的效率最高,inet是一个淘汰的东西

TA的精华主题

TA的得分主题

发表于 2020-3-8 16:41 | 显示全部楼层
  1. Sub FilterExactly()
  2. Const myMarker As String = "!"
  3. Const myDelimiter As String = ","
  4. Dim myArray() As Variant
  5. Dim mySearchArray As Variant
  6. Dim myFilteredArray As Variant

  7.     '创建数组
  8.     myArray = Array(1, 2, 3, 10)
  9.     '预先在数组中筛选包含1的元素
  10.     myFilteredArray = Filter(myArray, 1)

  11.     If UBound(myFilteredArray) > -1 Then
  12.         '标记每个找到的元素的开始和结束
  13.         'myMarker和myDelimiter必须是字符
  14.         '且该字符不会出现在数组的任何元素中!
  15.         mySearchArray = Split(myMarker & Join(myFilteredArray, myMarker & myDelimiter & myMarker) & myMarker, myDelimiter)
  16.         '下面筛选修改后的数组
  17.         myFilteredArray = Filter(mySearchArray, myMarker & "1" & myMarker)
  18.         '从结果中移除标记
  19.         myFilteredArray = Split(Replace(Join(myFilteredArray, myDelimiter), myMarker, ""), myDelimiter)
  20.     End If
  21.     '显示结果
  22.     MsgBox "筛选数组(" & Join(myArray, ", ") & ") 以获得含有1的完全匹配的元素将返回:" & vbCr & Join(myFilteredArray, vbCr)
  23. End Sub
复制代码

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 15:14 , Processed in 0.036451 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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