我有一个单元格文本"12-3 0000 9 FLY AIR Make MY Trip“,我希望输出类似于12-3 0000 9的下一个单元格和下一个序列单元格"FLY AIR Make MY Trip”。
Public Function SplitText(pWorkRng As Range, pIsNumber As Boolean) As String
'Updateby20150306
Dim xLen As Long
Dim xStr As String
xLen = VBA.Len(pWorkRng.Value)
For i = 1 To xLen
xStr = VBA.Mid(pWorkRng.Value, i, 1)
If ((VBA.IsNumeric(xStr) And pIsNumber) Or (Not (VBA.IsNumeric(xStr)) And Not (pIsNumber))) Then
SplitText = SplitText + xStr
End If
Next
End Function=SplitText(A2,FALSE)变成一个空白单元格来获取唯一的文本。
结果为12300009
=SplitText(A2,TRUE)变成一个空白单元格,以得到唯一的号码。
结果是“飞空飞我的旅程”
发布于 2017-11-07 08:45:00
假设您希望获得数值的第一部分,如果您的参数pIsNumber设置为true:
Option Explicit
Public Function SplitText(pWorkRng As Range, pIsNumber As Boolean) As String
'Declare ALL variables
Dim xLen As Long
Dim xStr As String
Dim i As Integer
xLen = VBA.Len(pWorkRng.value)
For i = 1 To xLen
xStr = VBA.Mid(pWorkRng.value, i, 1)
If pIsNumber And InStr(" -0123456789", xStr) Then
SplitText = SplitText & xStr ' use ampersand "&" instead of "+"
ElseIf Not pIsNumber And InStr("-123456789", xStr) = 0 Then
SplitText = SplitText & xStr
End If
Next
If pIsNumber Then SplitText = Replace(SplitText, String(3, " "), " ")
End FunctionNote
使用符号"&“而不是"+”连接字符串值。顺便说一句,不要忘记声明变量,并且总是在代码模块的声明头中使用Option Explicit。
祝好运。
发布于 2017-11-07 09:14:27
我将使用Split,检查文本,然后再次加入:
Function SplitText(Txt As String, Optional Number As Boolean = True)
Dim Arr, outarr() As String, I As Integer
Dim nbr As String, rest As String
Arr = Split(Txt, " ")
ReDim outarr(UBound(Arr))
For I = LBound(Arr) To UBound(Arr)
outarr(I) = Arr(I)
If Not IsNumeric(Left(Arr(I), 1)) Then
ReDim Preserve outarr(I - 1)
nbr = Join(outarr, " ")
rest = Mid(Txt, Len(nbr) + 2)
Exit For
End If
Next I
SplitText = IIf(Number, nbr, rest)
End Function发布于 2017-11-07 09:28:40
假设文本位于单元格A2中
在需要数字部分的地方输入以下公式(作为数组公式输入,即CTRL+SHIFT+ENTER,而不仅仅是输入):
=LEFT(A2,MIN(IFERROR(SEARCH(CHAR(ROW($A$65:$A$90)),A2,1),2^15))-1)
如果应用正确,Excel将显示周围的大括号{}。
然后假设您在单元格B2中有上面的公式,它的结果可以用作输出,以得到剩余的文本部分,如下所示:
=SUBSTITUTE(A2,B2,"")
如果它有效,那么您将不需要VBA。
https://stackoverflow.com/questions/47150867
复制相似问题