1. 需求
半吊子程序员的小仙女说有一些数据需要去尾巴,具体格式如下:
原始字符串 | 目标字符串 |
SUP-Galaxy-S21Ultra-UBPro-Violte-1 | SUP-Galaxy-S21Ultra-UBPro-Violte |
SUP-Galaxy-S21Ultra-UBPro-Tilt-17 | SUP-Galaxy-S21Ultra-UBPro-Tilt |
SUP-Galaxy-S21Ultra-UBPro-Ruddy-16 | SUP-Galaxy-S21Ultra-UBPro-Ruddy |
SUP-Galaxy-S21Ultra-UBPro-Blak128-17 | SUP-Galaxy-S21Ultra-UBPro-Blak |
SUP-Galaxy-S21Ultra-UBPro-Blak128-1 | SUP-Galaxy-S21Ultra-UBPro-Blak |
SUP-Galaxy-S21Ultra-UBPro-Violte-7 | SUP-Galaxy-S21Ultra-UBPro-Violte |
SUP-Galaxy-S21Ultra-UBPro-Violte-18 | SUP-Galaxy-S21Ultra-UBPro-Violte |
SUP-Galaxy-S21Ultra-UBPro-Violte | SUP-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