функция объединения Excel VBA

#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