#excel #vba #concatenation
#excel #vba #объединение
Вопрос:
Во-первых, я новичок в программировании VBA для Excel, поэтому, если эта программа не имеет смысла … вот кривая обучения. Я пытаюсь объединить диапазон из «BO1: BQ» и DLimportLastRow, где DLimportLastRow — это последняя строка импорта переменной, которая была только что запущена перед этим кодом. Я провел столько исследований в Интернете, сколько смог, но большинство найденных мной кодов объединения не имеют для меня смысла, поэтому я не могу изменить их в соответствии со своими потребностями. Конечная цель состоит в том, чтобы объединить BO1:BQ» amp; DLimportLastRow с каждой ячейкой, разделенной символом «,» и вписывающейся в одну ячейку, которая является «AE» amp; lastRow, где lastRow — следующая пустая ячейка в «AE».
DLimportLastRow = WorkEnd.Cells(WorkEnd.Rows.Count, "BO").End(xlUp).Offset(1).Row
DLimportLastRow = "BQ" amp; DLimportLastRow
i = 1
Do Until IsEmpty(Range("BO" amp; i).Value) = True Or Range("C" amp; i).Value = "" Or Range("C" amp; i).Value = Null Or Range("C" amp; i).Value = 0
x = Workbooks(WName).Worksheets("ReportGroupingInfo").Range("BO" amp; i).Value
For Each cell In Range("BO1", DLimportLastRow)
y = x amp; cell.Value amp; ","
i = i 1
Next
Loop
Range("AE" amp; LastRow).Value = y
Комментарии:
1. Каждый цикл вы перезаписываете
y
и используете его только до завершения цикла. Вам необходимо использовать предыдущее значениеy
внутри объединения, чтобы предотвратить его перезапись2. Вы действительно хотите включить все три столбца в объединение?? BO1: BQ99 или что там получается 99 ??
3. Да, я хотел бы включить все три значения столбца, потому что это то, что я переношу из другой книги. У меня есть более 100 книг для этого.
4. Хм, я подхожу ближе, но когда я проверяю значение «y», оно дает мне 0. Она работает по диапазону нормально, но я не получаю никаких значений.
Ответ №1:
Понял:
Затемнить y как строку
i = 1
Do Until IsEmpty(Range("BO" amp; i).Value) = True Or Range("C" amp; i).Value = "" Or Range("C" amp; i).Value = Null Or Range("C" amp; i).Value = 0
For Each cell In Range("BO1", DLimportLastRow)
y = y amp; cell.Value amp; ","
i = i 1
Next
Loop
Range("AE" amp; LastRow).Value = y