Excel VBA - текст в столбцы - PullRequest
       8

Excel VBA - текст в столбцы

0 голосов
/ 10 января 2012

У меня есть строки данных ниже в столбце B. Я хотел бы переместить текст в разные столбцы с помощью Excel VBA 2007. В приведенном ниже примере есть 4 группы данных, разделенные на «..». Тем не менее, также может быть 2 или 3 группы данных.

Пример 4 группы:

InstrumentBaseClass..Mega~Corporate~InstrumentBaseClass..Mid~Energy~InstrumentBaseClass..Micro~Oil Field Services

Пример 2 группы:

InstrumentBaseClass..Mega~Corporate

Как я могу установить текст в разные столбцы, чтобы при наличии только двух наборов данных в двух следующих столбцах было указано "нет"? Если существует 3 набора данных, мне нужен один столбец «none» и т. Д.

Ответы [ 3 ]

0 голосов
/ 10 января 2012

В следующем коде используются жестко закодированные входные данные, но их можно заменить ссылками на диапазон или передать как переменные при вызове подпрограммы.

Sub TextDotColumns()

Dim sInput As String, sMid As String, rOutput As Object 'these should be passed when calling sub
Dim lBreak As Long, lColOff As Long, sCheck As String

sInput = "InstrumentBaseClass..Mega~Corporate~InstrumentBaseClass..Mid~Energy~InstrumentBaseClass..Micro~Oil Field Services"
sCheck = ".."
Set rOutput = Range("d10")

lBreak = InStr(1, sInput, sCheck, vbTextCompare)
rOutput.Select
lColOff = 1
Do While lBreak > 0
    sMid = Mid(sInput, 1, lBreak - 1)
    rOutput.Offset(1, lColOff).Value = sMid
    sInput = Right(sInput, Len(sInput) - lBreak - 1)
    lColOff = lColOff + 1
    lBreak = InStr(1, sInput, sCheck, vbTextCompare)
Loop

rOutput.Offset(1, lColOff).Value = sInput

End Sub
0 голосов
/ 10 января 2012

Попробуйте:

Sub Test()

    '// Assumes your range is in column A
    With Range("A2", Cells(Rows.Count, "A").End(xlUp))        
        '// Text to columns
        .TextToColumns Destination:=.Offset(, 1), DataType:=xlDelimited, _
        TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Other:=True, OtherChar:="."

        '// Fill blank spaces with "None"
        .Offset(, 1).Resize(, 4).SpecialCells(xlCellTypeBlanks).Value = "None"
    End With

End Sub
0 голосов
/ 10 января 2012

Простой, не программируемый способ - просто заполнить все 4 столбца ни одним из них, а затем разрешить элементу «преобразовать текст в столбцы» вместо записи «все, что нужно».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...