excel 实现内建函数

3 篇文章 0 订阅

1. 需求

    半吊子程序员的小仙女说有一些数据需要去尾巴,具体格式如下:

                              原始字符串                              目标字符串
SUP-Galaxy-S21Ultra-UBPro-Violte-1SUP-Galaxy-S21Ultra-UBPro-Violte
SUP-Galaxy-S21Ultra-UBPro-Tilt-17SUP-Galaxy-S21Ultra-UBPro-Tilt
SUP-Galaxy-S21Ultra-UBPro-Ruddy-16SUP-Galaxy-S21Ultra-UBPro-Ruddy
SUP-Galaxy-S21Ultra-UBPro-Blak128-17SUP-Galaxy-S21Ultra-UBPro-Blak
SUP-Galaxy-S21Ultra-UBPro-Blak128-1SUP-Galaxy-S21Ultra-UBPro-Blak
SUP-Galaxy-S21Ultra-UBPro-Violte-7SUP-Galaxy-S21Ultra-UBPro-Violte
SUP-Galaxy-S21Ultra-UBPro-Violte-18SUP-Galaxy-S21Ultra-UBPro-Violte
SUP-Galaxy-S21Ultra-UBPro-ViolteSUP-Galaxy-S21Ultra-UBPro-Violte

通过观察上表可以得出结论:只需要将单元格中字符串的末尾的“横杠-”“空格 ” 以及 “数字0-9”去掉就OK了。

 

2. 开干

    本来打算通过excel自带的函数解决的,然而好像不是很容易,好吧那就自己写。

2.1 环境设置

首先新建一个 excel 文件(后缀名为 .xlsx ),然后点菜单 File,再点 options,出现下图:

                                         

按步骤选择 "Customize Ribbon" 后,勾上右边的 "Developer",然后点击 "OK",你将会发现菜单栏多了一项 "Developer" 菜单。

 

2.2 编写代码

接下来,按快捷键 "Alt+F11",出现了一个VBA窗口,然后右击 VBAProject(...) 选择 Insert ,然后点 Module 。

                                   

在出现的新空白框中输入如下代码:

Function DELETE_TAIL(str)   ' 以后的使用是通过这个函数名调用的,所以尽量取一个方便记忆的名字

    ' 主要是通过一下循环语句判断指定单元格的最后一个字符是否为数字,横杠或者空格
    ' 如果是,就去掉它;如果不是,就说明已经处理完毕,返回就好。
    Do While VBA.IsNumeric(Application.Search(Right(str, 1), " -1234567890")) 
        str = Left(str, Len(str) - 1)
    Loop
   
    DELETE_TAIL = str        ' 返回值
    
End Function

然后保存并关闭 VBA 编辑窗口,在点击 excel 的 File 菜单,将文件另存为 .xla (加载宏)文件,名字可以随便取(建议为 MyFunctions.xla),

建议保存路径为:"C:\Users\用户名\AppData\Roaming\Microsoft\AddIns\MyFunctions.xla" 。

 

2.3 导入编写的代码

点击 刚刚新出现的新菜单项 Developer,再点击 Excel Add-ins,将我们刚刚取的名字前打勾,表示启用这个函数库,然后点 OK 。如下图:

                                        

(如果万一没有出现这个函数库,就点击 Browse... 去找到刚刚我们存储的 .xla 文件,导入进来并打上勾就可以了)

导入完我们自己写的函数库就可以关闭所有的 excel 文档了。

 

3. 使用

使用就很简单了,就跟用 SUM() 函数求和是一样一样的。

 

结束语:谨以此文,在这个特殊的日子献给我最亲爱的小xm同志,希望我小仙女的工作能够再轻松一点。

                                                                                                                             

                                                                                                       —— 20210308

 

 

 

/***************************************************************************************

*********************** 这是一条不会产生编译错误的分割线 **********************

****************************************************************************************/

新需求

新方案

Function DELETE_TAIL(str)   ' 以后的使用是通过这个函数名调用的,所以尽量取一个方便记忆的名字

    ' 主要是通过一下循环语句判断指定单元格的最后一个字符是否为数字,横杠或者空格
    ' 如果是,就去掉它;如果不是,就说明已经处理完毕,返回就好。
    Do While VBA.IsNumeric(Application.Search(Right(str, 1), " -1234567890"))
        str = Left(str, Len(str) - 1)
    Loop
    
    If VBA.IsNumeric(Application.Search(Right(str, 3), "-CA-BR/BR-UK-MX-AU")) Then
        str = Left(str, Len(str) - 3)
    End If
    
    If VBA.IsNumeric(Application.Search(Right(str, 2), "-N")) Then
        str = Left(str, Len(str) - 2)
    End If
    
    If VBA.IsNumeric(Application.Search(Left(str, 6), "IKFBA-M-")) Then
        str = Right(str, Len(str) - 6)
    End If
    
    If VBA.IsNumeric(Application.Search(Left(str, 4), "FBA-")) Then
        str = Right(str, Len(str) - 4)
    End If
    
    Do While VBA.IsNumeric(Application.Search(Left(str, 1), " "))
        str = Right(str, Len(str) - 1)
    Loop
    
    DELETE_TAIL = str        ' 返回值
    
End Function

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值