任何数字时将单元格拆分为2列

时间:2018-03-10 23:39:22

标签: excel vba excel-vba split

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

我有一个包含文字和数字的字符串。我需要在第一次看到数字时将字符串拆分为2列。

示例

location = /character {
try_files character.php /character.php;
}

location = /character/ {
try_files character.php /character.php;
}

location ~ /character/([0-9]+)$ {
try_files character.php /character.php?id=$1;
}

location ~ /character/([A-z]+)$ {
try_files character.php /character.php?page=$1;
}

location ~ /character/([0-9]+)/([A-z]+)$ {
try_files character.php /character.php?id=$1&page=$2;
}

location ~ /character/([0-9]+)/([A-z]+)/date/(.*)$ {
try_files character.php /character.php?id=$1&page=$2&date=$3;
}

location ~ /character/([A-z]+)/date/(.*)$ {
try_files character.php /character.php?page=$1&date=$2;
}

location ~ /character/([0-9]+)/([A-z]+)/sid/([0-9]+)$ {
try_files character.php /character.php?id=$1&page=$2&sid=$3;
}

location ~ /character/([A-z]+)/sid/([0-9]+)$ {
try_files character.php /character.php?page=$1&sid=$2;
}

location ~ /character/([A-z]+)/action/([A-z]+)/sid/([0-9]+)$ {
try_files character.php /character.php?page=$1&action=$2&sid=$3;
}

变为:

pic

3 个答案:

答案 0 :(得分: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)

enter image description here

答案 1 :(得分:3)

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

  

您必须设置对for i in range(1, len(list1)): if list1[i]==1: newlist2[i-1]+newlist2[i][-1] else: do nothing 的引用,其中x.x是您拥有的最高版本(我的是5.5)

Microsoft VBScript Regular Expressions x.x

分解正则表达式:

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),匹配第一个数字和之后的所有其他数据。

答案 2 :(得分:2)

这是您可以在工作表上使用的一对函数(而不是必须运行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返回以第一个数字开头的字符串。

correc