【问题标题】:Split cells into 2 columns when any number任意数字时将单元格拆分为 2 列
【发布时间】:2018-08-19 06:55:09
【问题描述】:

我可以看到很多关于这个主题的帖子,但没有一个专门解决我遇到的问题。

我有一个包含文本和数字的字符串。当它第一次看到一个数字时,我需要将字符串分成 2 列。

示例

Ballyvic Boru5/6
First Drift2/1
Sizing Cusimanoin15/2

变成:

【问题讨论】:

标签: vba excel split


【解决方案1】:

这是您可以在工作表上使用的一对函数(而不是必须运行 VBA 程序来“修复”一次单元格):

Public Function splitNum1(str As String) As String
    Dim p
    For p = 1 To Len(str)
        If Mid(str, p, 1) Like "#" Then Exit For
    Next
    splitNum1 = Left(str, p - 1)
End Function

Public Function splitNum2(str As String) As String
    splitNum2 = Right(str, Len(str) - Len(splitNum1(str)))
End Function
  • splitNum1 返回数字“左侧”的字符串。

  • splitNum2 返回以第一个数字开头的字符串。

【讨论】:

  • 感谢您的回复。 SplitNum1 完美运行,但 SplitNum2 没有返回数字部分(也包括一些字母)。
  • @Seale - 哎呀,你可以看出我很着急;甚至我的示例屏幕截图也显示了错误!抱歉,我已经更正了。
【解决方案2】:

这是一个正则表达式方法:

您必须设置对Microsoft VBScript Regular Expressions x.x 的引用,其中 x.x 是您拥有的最高版本(我的是 5.5)

Option Explicit

Sub splitCells()

    Dim RegEx As New RegExp, i As Long, tempStr As String

    With RegEx
        .Global = True
        .IgnoreCase = True
        .Pattern = "(([a-z]*\s?)*\D)(\d.*)"
    End With

    With ThisWorkbook.Worksheets(1)

        For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row

            If RegEx.Test(.Cells(i, 1)) Then
                tempStr = .Cells(i, 1)
                .Cells(i, 1) = RegEx.Replace(tempStr, "$1")
                .Cells(i, 2) = RegEx.Replace(tempStr, "$3")
           End If

        Next i

    End With

End Sub

分解正则表达式:

(([a-z]*\s?)*\D)(\d.*)

[a-z]* 匹配字母表中的任何字符,* 乘数可无限次出现

\s? 匹配任何空格字符,使用 ? 乘数匹配 0-1 次出现(意味着可能有也可能没有空格

以上两个都包含在一个分组 () 中,后跟另一个 * 以匹配 0 次无限次出现

\D 这不包括所有数字

上面包含在一个组中,第一个(([..])*\D)

我们有最后一组:(\d.*),它匹配第一个数字和后面的所有内容。

【讨论】:

    【解决方案3】:

    您可以使用一个简单的公式来查找第一个数字,并使用LEFTMID 来拆分字符串。

    第 1 部分

    =LEFT(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890"))-1)
    

    第 2 部分

    =MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&"1234567890")),99)
    

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多