玖叶教程网

前端编程开发入门

Excel VBA自定义函数iMid/Excel公式函数/Mid

?本文于2023年3月8日首发于本人同名公众号:Excel活学活用,敬请关注!

Excel里有很多字符串处理函数,如Left,Right,Mid,这些函数在VBA里也有,用法也基本相同。今天主要来谈一谈Mid函数的用法(下图是我自定义的iMid函数演示)。

基本语法:
MID(text, start_num, num_chars)

其中,"text"是要从中提取字符的文本字符串,"start_num"是要提取的第一个字符的位置,"num_chars"是要提取的字符数,"start_num"参数从1开始。

这些基本的东西没啥好说的,对付一些简单的字符提取没有问题,但稍微复杂一些的情况就有点麻烦了,比如下面一个字符串,我们称它为“Item”:

“【XJ:支付的职工薪酬】【BM:行政部】【QT:其他项目】”

我要提取出如下表格式的字符串:

序号

项目1

项目2

项目3

1

【XJ:支付的职工薪酬】

XJ:支付的职工薪酬

支付的职工薪酬

2

【BM:行政部】

BM:行政部

行政部

3

【QT:其他项目】

QT:其他项目

其他项目

如果在Excel工作表里,我们用Mid函数来做:

项目1公式:算了,我不想烧脑了,有哪位高人感兴趣的可以试试,我就给它来个自定义函数吧:

Function iMid(wholeStr As String, startStr As String, endStr As String, Optional iType As Integer = 0)
    Dim StartPosition As Integer   '开始位置,startStr首字符位置
    Dim EndPosition As Integer     '结束位置,endStr末字符位置
    If iType = 0 Then
        '包含首尾字符
        StartPosition = InStr(wholeStr, startStr)
        EndPosition = InStr(StartPosition, wholeStr, endStr) + Len(endStr) - 1
    ElseIf iType = 1 Then
        '不包含首尾1个字符
        StartPosition = InStr(wholeStr, startStr) + 1
        EndPosition = InStr(StartPosition, wholeStr, endStr) + Len(endStr) - 2
    Else
        '不包含首尾字符
        StartPosition = InStr(wholeStr, startStr) + Len(startStr)
        EndPosition = InStr(StartPosition, wholeStr, endStr) - 1
    End If
    iMid = Mid(wholeStr, StartPosition, EndPosition - StartPosition + 1)
End Function

简单解释一下:

首先看我们的“Item”字符串,它是有规律的:每一个小项目都是用中文方括号【】括起来的,开头是“【”+“项目代码”+“:”,所以我们来描述一下需求:

项目1:取出以“【XX:”开头,以“】”结尾的字符串,包括开头和结尾字符。

项目2:取出以“【XX:”开头,以“】”结尾的字符串,不包括开头和结尾各一个字符。

项目3:取出以“【XX:”开头,以“】”结尾的字符串,不包括开头和结尾的字符。

函数代码实际上也是用了Mid函数,根据不同需求来决定:

"start_num","end_num"(结尾字符位置),"num_chars",这些参数的值,然后再通过Mid函数来取得结果。

题外话,在写今天的分享文的时候,iMid函数还不存在,先前我是把每一个项目写了一个函数,但今天我在写的时候,感觉应该可以合并成一个函数,只要在函数的参数里加上一个type来决定取哪种结果,于是就诞生了iMid。

那么,这个函数如何使用呢?

功能:根据给定的首尾字符来截取首尾字符之间的字符,根据iType的值来决定输出结果:

1、默认是0,输出包含首尾字符之间的字符串,包含首尾字符;

2、iType=1,输出包含首尾字符之间的字符串,去掉首尾各一个字符

3、iType=2或其他整数,输出包含首尾字符之间的字符串,不包含首尾字符。

另外,该自定义函数要求第2个参数startStr,即首字符是唯一的,否则不能取得正确结果。

最后,由于时间仓促,未及全面测试,可能存有BUG,请谨慎使用,欢迎提出宝贵意见!

好了,今天就分享到这里,希望对你能有所帮助,感谢阅读!示例文件下载地址(如果有小伙伴不方便使用下面链接的,也可以在留言区贴上你的邮箱地址,我通过邮件发送):

链接:https://pan.baidu.com/s/1UA7pHDWyRuW5xvu56r8rvA?pwd=exi8 
提取码:exi8

??本文于2023年3月8日首发于本人同名公众号:Excel活学活用,敬请关注!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言