我想修剪一个具有类似结构的文本;
base_text = Surname, Name (ID)
desired_text = Name
你能帮我解决一下这个问题吗?
此致
答案 0 :(得分:1)
答案 1 :(得分:0)
这样的事情:
Option Explicit
Sub MyAnswer()
Dim oCell As Range
For Each oCell In Range("A1:A100")
If oCell <> "" Then
If InStr(1, oCell, ", ") <> 0 Then
If InStr(1, oCell, " (") <> 0 Then
oCell = Right(oCell, Len(oCell) - InStr(1, oCell, ",") - 1)
oCell = Left(oCell, InStr(1, oCell, " (") - 1)
End If
End If
End If
Next
End Sub
这里我们遍历A1:A100
范围内的每个单元格
Left
和Right
会返回字符串中给定的符号数
InStr
返回当前字符串中符号的位置
Len
返回给定字符串中的符号数。
答案 2 :(得分:0)
作为公式,您可以使用此公式,假设Base_text
位于A1
:
=LEFT(RIGHT(A1,LEN(A1)-FIND(",",A1)),FIND("(",RIGHT(A1,LEN(A1)-FIND(",",A1)))-1)
答案 3 :(得分:0)
这可以使用正则表达式轻松解决。这将在原始数据旁边的单元格中输出“名称”。它也可以很容易地被操作以获得字符串的所有文本部分。该范围需要更新以匹配您的
Sub test()
Dim rng As Range
Dim c
' Update this line with your Range
Set rng = Sheet2.Cells(1, 1)
With CreateObject("VBScript.RegExp")
.Global = True
.ignorecase = True
.Pattern = "[a-z]+"
For Each c In rng
If .test(c.Value2) Then
c.Offset(0, 1).Value2 = .Execute(c.Value2)(1)
End If
Next c
End With
End Sub
答案 4 :(得分:0)
使用拆分功能
(参见:https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/split-function)
使用Split
函数,您可以根据给定的分隔符将字符串拆分为子字符串。结果是基于零的1-dim子串数组,其项可以通过索引号引用。
i)所以你将使用索引1得到第二个子串:
sName = split(base_text, ",")(1)
ii)由于您只想提取名称而不是括号中的id,您必须对此结果执行另一个拆分,现在索引第一个子串(索引0)并通过Trim
函数删除空格:
sName = Trim(Split(sName, "(")(0))
<强>代码强>
Option Explicit
Sub GetNameToken()
Dim base_text As String
Dim sName As String
' base_text = Application.UserName ' << actual code
base_text = "Surname, Name (ID)" ' << pattern example
' i) get substring right of the colon delimiter (index 1)
sName = Split(base_text & ",", ",")(1)
' ii) get substring left of the bracket delimiter (index 0)
sName = Trim(Split(sName & " ", "(")(0))
MsgBox "UserName = """ & base_text & """" & vbNewLine & _
"=> """ & sName & """"
End Sub
备注强>
i)为了避免在基本文本与其他分隔符的情况下可能的索引乱序错误,我使用了一个技巧:我将虚构的冒号分隔符连接到要拆分的文本(这将导致空第二个子字符串,如果原始文本中没有冒号分隔符):
sName = Split(base_text & ",", ",")(1)
ii)在第二次拆分中,只有在sName =“”的情况下才需要额外的字符串连接,否则你会尝试拆分一个空字符串。
其他提示
您可以通过UBound
函数获取生成的拆分数组项的上部索引,例如n = UBound(Split("one two three"," "))
,在此示例中为2
(=三个项目索引为0,1,2)。