Объединить несколько ячеек в столбце в одну ячейку - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно объединить несколько ячеек в столбце в одну ячейку.

Данные присутствуют в столбце A:

0100
0800
ABCD
LMKQ
.
.
.

и т. Д.

Ячейка B2 должнаимеют следующее значение:

'0100', '0800', 'ABCD', 'LMKQ' .... и т. д.

Мой код идентифицирует все данные, но заполняет только данныев последней ячейке:

Sub concatMyData()

    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        Cells(2, "B").Value = "'" & Cells(i, "A").Value & " '" & Cells(i + 1, "A").Value & "'"
    Next i

End Sub

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете сделать это с одной строкой кода, и вам не придется зацикливаться (намного НАМНОГО быстрее):

Range("B2").Formula = "'" & join(application.transpose(Range("A2:A" & range("A" & rows.count).end(xlup).row)),"', '") & "'"

Я предположил, что у вас есть заголовок в A1, поэтому он начался на A2, вы можете изменить его наА1, если хотите.

Я заметил, что вы попросили объяснить другой ответ так:

Код Игана будет проходить по каждой ячейке в столбце А и добавлять его к тому, что в настоящее время находится в ячейке В2.,Таким образом, он в основном добавляет к B2 значение ячейки, в которой он находится, в столбце A и ', ' каждый раз, когда цикл повторяется до тех пор, пока в нем не заканчиваются данные в столбце A. Он также помещает ' в начало и конец.

Мой код возьмет диапазон и транспонирует его в массив (данные уменьшаются, массив перемещается вбок, поэтому мы транспонируем его), затем он объединяет массив значений в одну строку.Мы делаем это, используя функцию JOIN, и мы указываем ', ' как то, что она должна помещать между каждым элементом массива (разделителем).

Затем мы просто добавляем ' в начале иконец, так как его там не будет, и вуаля, одна строка соединенных значений без зацикливания.

Они фактически делают одно и то же, мой просто делает это за один раз, а не за раз за раз.

0 голосов
/ 26 февраля 2019

Проверьте это:

Sub concatMyData()
    Dim first As Boolean
    first = True
    For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If Not first Then Cells(2, "B").Value = Cells(2, "B").Value & ", "
        Cells(2, "B").Value = Cells(2, "B").Value & "'" & Cells(i, "A").Value & "'"
        first = False
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...