excel - 如何删除 VBA 中文本字符串末尾以数字开头的任何内容?
问题描述
所以目前我的 VBA 代码如下所示:
Sub Testing()
Dim K As Long
Dim LR As Long
LR = Cells(Rows.Count, 1).End(xlUp).Row
For K = 2 To LR
Cells(K, 2).Value = StripAfter(Cells(K, 1), "_", 6)
Next K
End Sub
Function StripAfter(ByVal txt As String, ByVal delimiter As String, ByVal
occurrence As Long) As String
Dim x As Variant
x = Split(expression:=txt, delimiter:=delimiter, limit:=occurrence + 1)
StripAfter = x(UBound(x))
End Function
我将此链接到一个按钮,该按钮将输出如下数据:(旁注:A列已粘贴,B列是运行VBA宏后的结果)
有了这个输出,这正是公式要做的事情,太棒了!我的问题是,对于 B 列中的结果,我无法解决这个问题(我是 VBA 宏的新手,尽我所能学习),它们都以数字结尾,数字X
之间有一个数字。我将如何调整我的代码以使其删除那部分文本?所以结果看起来像:
正如您从我正在寻找的结果中看到的那样,与给出的结果相比,###X###
最后取出了。我在 VBA 之外玩过,发现它可以工作,但它本质上是一个两步过程:
=RIGHT(SUBSTITUTE(A1,"_",CHAR(10),12),LEN(A1)-FIND(CHAR(10),SUBSTITUTE(A1,"_",CHAR(10),12),1)+1)
^^^ 这将从 A1 中获取字符串的最后一部分(第一张图片)
=LEFT(A20,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A20&"0123456789")) -1)
^^^(A20 是我从上面的公式中用来抓取 A1 中字符串的最后一部分的单元格)这将删除第一个数字之后的任何内容。这也完全符合我的要求,但我不知道在上面的 VBA 公式中从哪里开始实现它。
任何帮助将不胜感激!
解决方案
我也遇到过这样的公式,所以我使用了正则表达式,在你的函数中添加了几行。它基本上是模式匹配。你的潜艇和以前一样。
Function StripAfter(ByVal txt As String, ByVal delimiter As String, ByVal occurrence As Long) As String
Dim x As Variant
x = Split(expression:=txt, delimiter:=delimiter, limit:=occurrence + 1)
StripAfter = x(UBound(x))
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\d+x\d+$" 'match 1+ numbers followed by x followed by 1+ numbers at the end of a string
If .Test(StripAfter) Then StripAfter = .Replace(StripAfter, "") 'if pattern found replace with empty string
End With
End Function
推荐阅读
- python - 创建一个非唯一的python字典
- r - 如果我需要列中的值 <-1.5 或 >1.5,如何过滤 R 中的表?
- python - 用于在换行符处拆分的正则表达式,同时忽略由任意数量引号包围的文本内的换行符
- r - 如何仅在 R 中为正面和负面结果制作多个图?
- localization - 使用 next-i18next 库更改语言时有 CORS
- javascript - 如何显示非模态/非模态 HTML/JavaScript 对话
- c++ - 左移时的奇怪行为
- jquery - 如何使用 jQuery 更改按钮的文本?
- airflow - 有条件地一一执行多个分支
- mysql - 特色帖子/特色文章等的表格结构