繁体   English   中英

使用VBA在Excel单元格中拆分文本和数字

[英]Split Text and number in a excel cell using vba

我有一个单元格文本“ 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)进入空白单元格以获得唯一数字。

结果为“-FLY AIR让我旅行”

假设如果参数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 Function

注意

使用与号(&)代替“ +”来连接字符串值。 顺便说一句,不要忘了声明变量,并始终在代码模块的声明头中使用Option Explicit

祝好运。

我将使用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

假设您的文本在单元格A2中

在需要数字部分的地方输入以下公式(作为数组公式输入,即CTRL + SHIFT + ENTER ,而不仅仅是ENTER):

=LEFT(A2,MIN(IFERROR(SEARCH(CHAR(ROW($A$65:$A$90)),A2,1),2^15))-1)

如果正确应用,Excel将显示括号{}。

然后,假设您在单元格B2中具有上述公式,则其结果可用作输出,以获取其余的文本部分,如下所示:

=SUBSTITUTE(A2,B2,"")

如果可以,那么您将不需要VBA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM