【问题标题】:Split Text and number in a excel cell using vba使用vba在excel单元格中拆分文本和数字
【发布时间】:2017-11-07 17:28:40
【问题描述】:

我有一个单元格文本“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 Make MY Trip”

【问题讨论】:

  • 格式是否总是NUMBERS(和“-”)后跟TEXT
  • 请澄清问题
  • 您发布的测试数据不足,无法得出结论性解决方案。
  • "12-3 0000 9 FLY AIR Make MY Trip" 我想分成 "12-3 0000 9" 和 "FLY AIR Make MY Trip"
  • @VinothNarayan 你能再发布几行数据吗?

标签: vba excel excel-formula


【解决方案1】:

假设你想得到数字的第一部分,如果你的参数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

祝你好运。

【讨论】:

  • 非常感谢它的工作原理。但是对于文本,它与“000 FLY AIR Make MY Trip”一起出现。对于数字,它工作得很好
  • 我再次测试了上面的代码,它对我有用。假设您省略了第一个条件的比较字符串中的空格字符“”:If pIsNumber AND Instr(" -0123456789", xStr) Then,而Else 条件中的比较字符串以没有空白开头。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    假设您的文本在单元格 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。

    【讨论】:

    • 它返回我是空的
    • @VinothNarayan 我不确定你是如何使用它的。实施见附件。 Example File
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多