Как отделить слова от одного столбца - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь прочитать данные из текстового файла, используя Excel / VBA.Однако, когда я импортирую файл, все слова находятся в одном столбце.Текст генерируется из PDF с сохранением макета таблицы.Таким образом, слова разделены пробелом, но интервал не соответствует.Я хочу, чтобы код проходил через ячейки и разделял слова.Однако для ячеек справедливо две вещи:

  1. отдельные слова имеют один интервал
  2. слова разделены двумя или более пробелами

Screenshot 1 Screenshot 2

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Я понимаю, что основной проблемой является разделение на 2+ пробела, но не на один.

Попробуйте, поможет ли это вам в этом:

Const marker As String = "[!°$(])"
Dim rx, s As String, t As String, parts
Set rx = CreateObject("vbscript.regexp")

s = "One Cell   Red  Green"

rx.Pattern = " {2,}" ' match two or more spaces
rx.Global = True ' find all, not only the first match
t = rx.Replace(s, marker)

parts = Split(t, marker)
MsgBox Join(parts, vbCrLf)
1 голос
/ 15 апреля 2019

Спасибо @Uri Goren @Kenusemau.Ответ на вопрос для всех, кто ищет такую ​​же проблему.

Sub Macro2()
Const marker As String = "#$"
Dim rx, s As String, t As String, parts
Set rx = CreateObject("vbscript.regexp")

For A_row = 1 To 2 ' Last row t o consider
    s = Range("A" & A_row)
        rx.Pattern = " {2,}" ' match two or more spaces
        rx.Global = True ' find all, not only the first match
        t=rx.Replace(s, marker)
        Range("B" & A_row).Value = t
        'parts = Split(t, marker)
        'Range("B" & A_row).Value = Join(parts, vbCrLf)
                Range("B" & A_row).Select
                Selection.TextToColumns _
                Destination:=Range("C" & A_row), _
                DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, _
                ConsecutiveDelimiter:=False, _
                Tab:=True, _
                Semicolon:=False, _
                Comma:=False, _
                Space:=False, _
                Other:=True, _
                OtherChar:="#$"
Next A_row
End Sub
1 голос
/ 15 апреля 2019

Этот код берет первые 100 ячеек в столбце A, разделяет их содержимое по пробелам и вставляет его в столбец B

Dim A_row As Integer, B_row as Integer, i As Integer, words()
For A_row = 1 To 100' Last row t o consider
    words = Split(Range("A" & A_row), " ")
    For i = LBound(words) To UBound(words)
        B_row = B_row + 1
        Range("B" & B_row) = words(i)
    Next i
Next A_row

Я уверен, что вы могли бы получить суть и изменить его под свои нужды

...