在文本和数字之间为列中的单元格插入空格

时间:2018-08-07 23:56:17

标签: excel vba excel-vba

我已经编写了一个代码,该代码在文本和数字之间插入一个空格,将“无空格”的日期和月份与日期分开,并且可以按预期工作。

唯一的问题是我正在使用If then结构来确定应使用哪个正则表达式pattern

如果日期的第一个字符是数字,然后知道它是'DayMonth'序列,那么我将使用以下模式:"(.*\d)(?! )(\D.*)"。否则,假设它不在'DayMonth'序列中,而是在'MonthDay'序列中,我使用另一种模式:"(.*\D)(?! )(\d.*)"

是否可以同时使用两种模式来扫描正则表达式对象,以便摆脱If Then结构?

我的下面的代码:

Sub SpaceMonthDayIf()

Dim col As Range
Dim i As Long

Set col = Application.InputBox("Select Date Column", "Obtain Object Range", Type:=8)

With CreateObject("VBScript.RegExp")

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

        If IsNumeric(Left(Cells(i, col.Column).Value, 1)) Then
        .Pattern = "(.*\d)(?! )(\D.*)"
        Cells(i, col.Column) = .Replace(Cells(i, col.Column), "$1 $2")

        Else
        .Pattern = "(.*\D)(?! )(\d.*)"
        Cells(i, col.Column) = .Replace(Cells(i, col.Column), "$1 $2")

            End If

                Next

                    End With

End Sub

为清楚起见,这是我运行代码时发生的情况:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试此代码

def foo(arg1):
    if isinstance(arg1, str):
        print("It's a string!")
    else:
        print("It's not a string!")

答案 1 :(得分:0)

您可以通过不同地插入空格来避免这种情况。这是一个Function,带有早期绑定,但是您可以将其更改为后期绑定。

匹配字母和数字之间的交点,然后构造一个字符串,并在其中适当插入一个空格。

Option Explicit
Function InsertSpace(S As String) As String
    Const sPat As String = "[a-z]\d|\d[a-z]"
    Dim RE As RegExp, MC As MatchCollection

Set RE = New RegExp
With RE
    .Global = False
    .Pattern = sPat
    .IgnoreCase = True
    If .Test(S) = True Then
        Set MC = .Execute(S)
        With MC(0)
            InsertSpace = Left(S, .FirstIndex + 1) & " " & Mid(S, .FirstIndex + 2)
        End With
    End If
End With

End Function

您也可以在不使用正则表达式的情况下完成此操作:

编辑 Like运算符的模式更改

Option Explicit
Option Compare Text

Function InsertSpace2(S As String) As String
    Dim I As Long

For I = 1 To Len(S)
    If Mid(S, I, 2) Like "#[a-z]" Or Mid(S, I, 2) Like "[a-z]#" Then
        InsertSpace2 = Left(S, I) & " " & Mid(S, I + 1)
        Exit Function
    End If
Next I

End Function