Regex для перемещения ячеек на основе ведущих пробелов - PullRequest
0 голосов
/ 25 января 2019

Начну с того, что я не кодер, а лишь тот, кто очень редко увлекается тем, чтобы сделать электронные таблицы немного более сносными.

В настоящее время у меня есть некоторые данные, которые мне нужно разбить на столбцы, основанные наколичество ведущих пробелов в ячейке.По сути, если ячейка начинается с 2 пробелов, переместите ее на 1 столбец вправо, если есть 3 пробела, переместите ее на 2 столбца вправо и т. Д.

Я понял, что мне нужно использовать регулярное выражение дляэто как FIND и LEFT будет соответствовать всем 3 пространственным ячейкам при поиске 2 космических ячеек.

Так что я искал и разбирал этот беспорядок

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 голосов
/ 25 января 2019

Общее решение заключается в следующем. Вы подсчитываете начальные пробелы (давайте назовем это значение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...