正则表达式根据前导空格移动单元格

时间:2019-01-24 22:40:22

标签: regex excel vba

首先,我不是编码员,只是一个很少涉足以使电子表格更易于使用的人。

我目前有一些数据需要根据单元格中前导空格的数量分为几列。基本上,如果单元格以2个空格开头,则将其向右移1列;如果有3个空格,则将其向右移2列,依此类推。

我意识到我需要为此使用正则表达式,因为当搜索2个空间像元时,FIND和LEFT会匹配所有3个空间像元。

所以我四处搜寻并将这个烂摊子拼凑在一起

Sub MoveStuff()
Dim RE as Object
Dim LSearchRow As Long
Dim LCopyToColumn As Long

Set RE = CreateObject("vbscript.regexp")
RE.Pattern = "  (a-zA-Z)"

LSearchRow = 2

While Len(Cells(LSearchRow, "B").Value) > 0

If RE.Test(Cells(LSearchRow, "B").Value) Then

到目前为止,它会正确匹配,但是我不知道如何获取它以将单元格移过去。那显然我需要有多个RE.Patterns和If语句来匹配3个和4个空间单元格

1 个答案:

答案 0 :(得分:1)

以下是一般解决方案。计算前导空格(我们将此值称为N),然后将其从单元格值中删除,然后复制右侧的单元格N列。

Public Sub movestuff()

Dim curr_row, curr_column, s

curr_column = 2 'COLUMN "B"
curr_row = 1


While (ActiveSheet.Cells(curr_row, curr_column) <> "")

    s = ActiveSheet.Cells(curr_row, curr_column)

    For x = 1 To Len(s) Step 1

        If Mid(s, x, 1) <> " " Then
            Exit For
        End If
    Next

    s = Mid(s, x)

    ActiveSheet.Cells(curr_row, curr_column + (x - 1)) = s

    curr_row = curr_row + 1

Wend
End Sub