Попытка разбить строку на новые столбцы - PullRequest
0 голосов
/ 21 апреля 2019

В ячейке B2 у меня длинный список, который начинается с "ATT TAG:".Мне было интересно, смогу ли я разделить эти данные на столбцы для каждого нового «ATT TAG:».Мои данные можно увидеть ниже:

[! [Введите описание изображения здесь] [1]] [1]

Я пытался использовать функции, такие как InStr, а также Left и Right, но я подумалмог бы быть лучший способ разделить такие данные.

[1]:

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Зачем усложнять ситуацию, когда в Excel уже есть встроенный инструмент TextToColumn сделает то, что вы хотите.

Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :=";", TrailingMinusNumbers:=True

OR

Selection.TextToColumns Destination:=Range("B8"), DataType:=xlFixedWidth, _
        OtherChar:=":", FieldInfo:=Array(Array(0, 1), Array(7, 1))
End Sub
0 голосов
/ 21 апреля 2019

Вы пометили свой вопрос с помощью VBA, но в своем вопросе вы ссылаетесь на функции формул, поэтому мне неясно, ищете ли вы функцию или VBA. С учетом сказанного я собираюсь рассказать о том, как вы отметили свой вопрос.

Чтобы разделить строку с помощью VBA, вы можете использовать функцию Split () .

Пример:

Dim wordArray() As String
Dim inputString As String

inputString = "ATT TAG: HELLO, ATT TAG: WORLD, ATT TAG: ZOMBIES"
wordArray() = Split(inputString, "ATT TAG:")

Оттуда, используйте массив для создания и заполнения новых столбцов, как вы считаете нужным.

UPDATE:

Предположим, у вас есть некоторые данные, которые выглядят следующим образом; где все застряло в одной ячейке и разделено новыми строками:

|-----------------|---|---|---|---|
| ATT TAG: Value1 |   |   |   |   |
| ATT TAG: Value2 |   |   |   |   |
| ATT TAG: Value3 |   |   |   |   |
|-----------------|---|---|---|---|
|-----------------|---|---|---|---|
|-----------------|---|---|---|---|

Вы можете перебрать массив, а затем вставить результат в новый столбец:

Sub splitTest()

    ' declare variables
    Dim wordArray() As String
    Dim inputString As String
    Dim pasteValue As String
    Dim lastColumn As Long

    ' get the input from cell A1
    inputString = Range("A1")

    ' split the input into an array
    ' using "ATT TAG:" as the delimiter
    wordArray() = Split(inputString, "ATT TAG:")

    ' loop through the array
    For Each element In wordArray

        ' find the last used column from row 1
        lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column

        ' clean up the value to be pasted; remove whitespace
        ' and any newlines -- represented by "Chr(10)"
        pasteValue = Replace(Trim(element), Chr(10), "")

        ' set the last used column to the element value
        Cells(1, lastColumn + 1).Value = pasteValue

    Next element

End Sub

Который будет производить:

|-----------------|--------|--------|--------|
| ATT TAG: Value1 |        |        |        |
| ATT TAG: Value2 | Value1 | Value2 | Value3 |
| ATT TAG: Value3 |        |        |        |
|-----------------|--------|--------|--------|
|-----------------|--------|--------|--------|
|-----------------|--------|--------|--------|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...