ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

微软函数 for vba_1.3.2 VBA自定义函数

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-5 15:03 | 显示全部楼层 |阅读模式
最近更新了以下与微软攻城狮基本保持一致的工作表函数,适用于全行业,兼容Windows系统下WPS全部版本和兼容Office 2003/07/10/13/16/19/21/365版本。
原创不易,作者很穷

【用户须知】
"XLAM"        支持WPS、Office 2007及以上版本。
"XLA"        支持WPS、Office 2003及以上版本。

声明:必须具有VBA运行环境。Office自带了VBA不必再安装;部分WPS须提前安装VBA插件"vba_for_wps_2052.exe",再重新打开WPS(下载链接在下方)

安全:在运行本文件时请先将[宏安全性]设置为[低];如果系统提示是否启用宏,请选择启用!!

使用:解压后,手动加载到 [开发工具] 下的 [EXCEL加载项] 中,然后在单元格输入 ='函数名称' 。
          或者 手动点击编辑栏的 'Fx' 图标,选择 '用户定义' 类型,选择需要的函数并点击确定。

提示:微软Office工作表内手动输入函数名称后暂不支持(UDF)智能感知VBA自定义函数的参数名称,WPS支持!!!

兼容:高仿微软工作表函数,兼容Windows下全部Office和WPS版本,目前代码开放,任何人不得用于任何交易!!
用法:用法与工作表自带的一致,全部参数都支持传入不同数据类型或多个值或多区域,支持输出一个或多个值。
意义:如果再过20年,必定是新函数的使用者多,而此就是为低版本而编写的新函数轮子。
进度:目前编写了以下函数轮子供低版本使用,虽然单线程,日常处理十万级数据足够了;不定时更新或优化或修复。
作者:中国-重庆-GG
微信:cg2016-10-11 QQ:2939767697 Q群:984948500
下载:https://cg520.lanzoub.com/b01d50fza 密码:6666

RANDVALUE                说明:将数组的值随机不重复的调整位置后返回数组。
RANDARRAY                说明:返回随机数数组。
SEQUENCE                说明:返回一个数字序列数组。
CHOOSEROWS                说明:返回数组或引用中的行。
CHOOSECOLS                说明:返回数组或引用中的列。
TAKE                                说明:从数组开头或结尾返回连续的行或列。
DROP                        说明:从数组开头或结尾排除连续的行或列。
TOCOL                        说明:以一列形式返回数组。
TOROW                        说明:以一行形式返回数组。
VSTACK                        说明:将数组垂直堆叠到一个数组中。
HSTACK                        说明:将数组水平堆叠到一个数组中。
WRAPROWS                说明:在指定新数组每行的值个数后,将单行或单列区域或数组的元素重新排列,组成新数组。
WRAPCOLS                说明:在指定新数组每列的值个数后,将单行或单列区域或数组的元素重新排列,组成新数组。
UNIQUE UNIQUE1        说明:从一个区域或数组返回唯一值。
FILTER FILTER1                说明:筛选一个区域或数组。
IFERROR(兼容2003)        说明:如果公式的计算结果错误,则返回您指定的值;否则返回公式的结果。
CONCAT                        说明:连接列表或文本字符串区域。
TEXTJOIN                        说明:使用分隔符连接列表或字符串区域。
TEXTSPLIT(分析未完成)        说明:使用分隔符将文本拆分为行或列。
SORT SORT1                说明:对一个区域或数组进行排序。
SORTBY                        说明:根据相应区域或数组中的值对一个区域或数组进行排序。
EXPAND                        说明:将数组扩展到指定维度。        让 [365的自动溢出数组功能] 到一边凉快去。
EVALUATE1                说明:计算'文本公式'。        让超出个数限制的数组(≥255时)或动态数组转为静态数组传递。
XLOOKUP                        说明:在1个区域或数组中搜索匹配项,在第2个区域或数组返回相应的项。默认精确匹配(不允许通配符通过)。
XMATCH                        说明:返回项目在数组中的索引位置(返回数字,即是第几的个)。默认精确匹配(不允许通配符通过)。
FORMULATEXT                说明:作为字符串返回公式,若区域无公式,返回 #N/A
G相似度                        说明:返回[文本]与[其它文本]的字符相似度比值,范围[0-1]。若文本为空,则返回0;通配符当作常量处理。
G矩阵合并                        说明:合并数组每行或每列的值,以一列或一行的形式返回新数组。
G反转行列                        说明:反转数组每行或每列的值,返回新数组。
G字符反向                        说明:字符串中的每个字符反向,返回文本。
CODE2                        说明:将字符串中的大小写字母分别转为字符集数字代码,返回文本。
G正则检测                        说明:检测文本中是否存在要搜索的正则表达式字符,返回 TRUE 或 FALSE。
G正则替换                        说明:在文本中将正则表达式所捕获的字符串都替换为同一个新字符串。
G正则提取                        说明:使用正则表达式捕获一个文本中的部分字符,以一行形式返回数组;若未捕获,返回 #N/A
G正则拆分                        说明:使用正则表达式将捕获的部分字符作为分隔符,将一个文本拆分为行,以一行形式返回数组。
REPT2                        说明:将数组重复指定次数,并堆叠起来,返回新数组。

'《转载请保留此处注释说明》
'作者:GG(QQ):2939767697(微信):cg2016-10-11
'说明:用VBA编写了与微软工程师高度几乎一模一样的一些工作表函数,适用于全行业使用老版本Office或WPS的电脑端用户。工作表与VBA里均可调用。
'介绍:全部用法与全部输出结果与微软工程师保持98%~99%一致,使用者可以放心使用。
'兼容:兼容VBA6.0~7.1版本,兼容Windows系统下的Office和WPS几乎全部版本;MAC系统没测试(没人给我发红包买MAC)。
'用法:与自带的工作表函数用法一致。
'声明:此次分享仅供网友参考或借鉴,请勿用于任何交易,作者不承担责任。若有问题或有需求可单独联系作者以获得解决方案。
'注意:
'1、部分老版本Office或WPS在工作表中使用此自定义函数时,函数名称的前面可能显示"_xlfn."或"_xlws."或"_xlpm."等,请按"CTRL H",将其替换掉就可以了。或者将自定义函数的名称全部替换为可被公式引擎识别的名称(不区分字母大小写)。
'2、在工作表中使用时,当参数作为动态数组传递且数组值的个数超过511/2时,可能需要先嵌套EVALUATE1函数,将其传入的值转为静态数组(WPS用户需要提前嵌套)。
'3、65536行的表格与1048576行的表格不兼容,在使用自定义函数时,请尽量不要引用整行整列,可能导致计算卡顿或者参数传递丢失。
'4、xlsx或xlsm或xlam格式文件不能被Office2003或以下版本打开,xla格式与xlam格式不兼容。
'5、当多个区域传入1个参数的情况,这将在VBA代码外再套循环遍历各个区域,由于遍历对象速度总是会很慢,我偷懒没有加上遍历多区域的代码,将只取其首个区域传入参数。话又说回来,估计国内应该没什么人专门喜欢这样不按常规方式使用吧?
'6、你可以将此文件用微软Office Excel打开,然后另存为"XLA"或"XLAM"格式的加载宏文件,加载到开发工具加载项中;以便让其中的自定义函数能够在每一个打开的表格中都能使用或者发给他人使用。

【更新日志】
2023/05/04 - 版本V1.3.2
更新并增加 XLOOKUP 函数。
更新并增加 XMATCH 函数。
更新并增加 FORMULATEXT 函数。
修复并优化 SORTBY 函数内部代码。

2023/04/29 - 版本V1.3.1
更新并增加 REPT2 函数。用以扩展完善微软工程师在REPT函数设计上的短板。

2023/04/28 - 版本V1.3.0
更新并增加 G正则检测 G正则替换 G正则拆分 G正则提取 这4个正则表达式函数。

2023/04/22 - 版本V1.2.9
更新并增加 SORTBY 函数。预计在1.3.0版本将更新几个 正则表达式 的函数。

2023/04/04 - 版本V1.2.8
更新并增加 G矩阵合并 函数。
更新并增加 G反转行列 函数。
更新并增加 G字符反向 函数。
更新并增加 CODE2 函数。

修复 EVALUATE1 函数,当多区域传入参数1时,返回值的兼容性问题。

2023/03/23 - 版本V1.2.7
更新并增加 G相似度 函数。

2023/02/01 - 版本V1.2.6
由于部分微软用户不习惯在初次打开时自动新建工作表,已取消该操作。

2022/12/18 - 版本V1.2.5
更新并增加 SORT SORT1 函数。

2022/12/15 - 版本V1.2.1
修复 TEXTJOIN 函数的第二参数的数据类型带来的BUG。

2022/12/10 - 版本V1.2
更新并发布到蓝奏云。

2022/12/7 - 版本V1.2
更新并增加 TEXTSPLIT 函数。

2022/12/5 - 版本V1.1
修复Office Excel加载后,点击编辑栏图标 'Fx' 里面函数参数描述不显示问题。

2022/12/4 - 版本V1.0
更新并发布到蓝奏云。


GG函数

GG函数

GG函数说明

GG函数说明

VBA加载函数使用说明.rar

1.34 MB, 下载次数: 113

微软函数 for vba_1.2.6.rar

1.62 MB, 下载次数: 60

微软函数 for vba_1.2.7.rar

1.63 MB, 下载次数: 48

微软函数 for vba_1.2.8.rar

1.66 MB, 下载次数: 48

微软函数 for vba_1.2.9.rar

1.69 MB, 下载次数: 46

微软函数 for vba_1.3.0.rar

1.72 MB, 下载次数: 48

微软函数 for vba_1.3.1.rar

1.74 MB, 下载次数: 47

微软函数 for vba_1.3.2.rar

1.8 MB, 下载次数: 183

评分

19

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-5 21:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常佩服楼主的能力,如有冒犯还请多原谅!


以下为源代码中的一小部分:
  1. <blockquote>'由于低版本没有FORMULATEXT函数,故而开发此微软函数给低版本使用。
复制代码

其实我想问几个关于这种用中文字符做变量名的编程方式:
1、代码好写吗?(感觉总是切换输入法,烦人!虽然我只用按一下Shift就能切换,也是感觉很累。)
2、代码好读码?(好像看中文编程,初学者应该更喜欢吧?)
3、你的这种写代码的方式是不是对变量命名有一套规则?
    比如,大多数人用i代表循环里的行,j代表列,而你直接用“循环行”,“循环列”,确实挺好。
4、下面这里有点不懂:
        For 循环行 = 1 To 一维上标
            For 一维上标 = 1 To 二维上标

       假设我用i表示循环行,m表示一维上标,用n表示二维上标,那么代码会成为如下:
        For i = 1 to m
            For m = 1 to n
        这里虽然使用完全没有问题,但很少有人这样使用,因为太乱。
        你代码里也注释了说是为了省内存,少定义一个变量,但一个长整形的变量,不至于吧?
5、下面这里也有点疑惑:
    一维上标 = UBound(返回数组, 1): 二维上标 = UBound(返回数组, 2) '一维上标 = 单元格区域.Areas(1).Rows.Count: 二维上标 = 单元格区域.Areas(1).Columns.Count
    看得出来“一维上标”代表数组的行数,“二维上标”代码数组的列数,
    但感觉“一维上标”,“二维上标”不容易理解。

看来编程也是一种习惯,如果习惯了,一切也就都顺了。

最后,当仔细读楼主的代码时,还是能学习到很多的技巧的。
如:当只有一个值时,如何返回为数组。      


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-5 22:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wanao2008 发表于 2023-5-5 21:35
非常佩服楼主的能力,如有冒犯还请多原谅!

采用中文变量是为了便于后续的代码维护和有助于他人更好的理解,另一方面是个人不喜欢英语。
Lbound用于获取数组某个维度的下标
Ubound用于获取数组某个维度的上标
如果按照表格上的思维逻辑,那么 一维上标 就是总的行数;二维上标 就是总的列数

当然,阅读者可以将代码中的变量名称替换为自己喜欢的名称。

另外,微软的EXCEL公式引擎不允许用户采用 FILTER SORT 这两个自定义函数名称,故而我将其在后面连接了数字1 使用FILTER1 SORT1 即可。

TA的精华主题

TA的得分主题

发表于 2023-5-25 09:29 来自手机 | 显示全部楼层
数组只有“下标”的,数组是没有“上标”这个概念的,所谓的“上标”只是“下标”的上界

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-25 09:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我看这几个是2019就自带的函数IFERROR()CONCAT TEXTJOIN

TA的精华主题

TA的得分主题

发表于 2023-5-25 09:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-25 09:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主分享

TA的精华主题

TA的得分主题

发表于 2023-5-29 10:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-25 21:04 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
佩服你的毅力

TA的精华主题

TA的得分主题

发表于 2023-7-26 07:44 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-7-20 02:13 , Processed in 0.040903 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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