Объединение данных при копировании данных

#vba #excel

#vba #excel

Вопрос:

Я работаю с большим набором данных. Я пытаюсь обрезать данные.

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

 Sub CopyData()
Dim sourceColumn As Range, targetColumn As Range

Set sourceColumn = Workbooks("Parcels Data.xlsm").Worksheets("Parcels").Columns("A")
Set targetColumn = Workbooks("Parcel Data for NSDB.xlsm").Worksheets("Imported").Columns("A")

sourceColumn.Copy Destination:=targetColumn
Set sourceColumn = Workbooks("Parcels Data.xlsm").Worksheets("Parcels").Columns("B")
Set targetColumn = Workbooks("Parcel Data for NSDB.xlsm").Worksheets("Imported").Columns("B")

sourceColumn.Copy Destination:=targetColumn

End Sub
  

Это импортирует то, что мне нужно.

Мне нужно объединить столбцы B и C вместе с пробелом между значениями. Этот новый файл будет использоваться для импорта в другие базы данных, поэтому он мне нужен в определенном формате.

Я пытался выяснить, как использовать ‘amp;’ при использовании Range.Copy. Я не могу просто использовать ‘amp;’, потому что это не строка, поскольку я имею дело с диапазонами. Возможно ли объединение в тот же момент времени, что и копирование данных?

Комментарии:

1. В чем вопрос, как объединить два значения вместе? =A1amp;" "amp;B1 в ячейке будет указано, что находится в A1 и B1 , и разделено пробелом.

2. Извините, я должен был более четко сформулировать свой вопрос. Я пытался выяснить, как использовать ‘amp;’ при использовании Range.Copy. Я не могу просто использовать ‘amp;’, потому что это не строка, поскольку я имею дело с диапазонами. Возможно ли объединение в тот же момент времени, что и копирование данных?

3. @Grant Нет, вам придется перебирать значения в диапазоне и объединять одно за другим — или считывать их в массив и т. Д., Как предлагает Пьер. Реально, хотя в зависимости от размера ваших данных это не должно занять много времени

Ответ №1:

 Sub CopyData()
Dim source, dest, iamp;
With Workbooks("Parcels Data.xlsm").Worksheets("Parcels")
    source = Range(.Range("A1"), .Cells(.Rows.Count, 2)).Value
End With
ReDim dest(1 To UBound(source), 1 To 1)
For i = 1 To UBound(dest)
    dest(i,1) = source(i, 1) amp; " " amp; source(i, 2)
Next
With Workbooks("Parcel Data for NSDB.xlsm").Worksheets("Imported")
    Range(.Range("A1"), .Cells(UBound(dest), 1)) = dest
End With
End Sub
  

Комментарии:

1. Спасибо, как только я понял, как работает код, я смог изменить его, чтобы заполнить все нужные мне столбцы. Это так помогло!

Ответ №2:

Вам нужно использовать цикл — вы не можете сделать это для всего диапазона сразу. Это должно помочь вам начать:

 Sub Concat()

Dim lRow As Long

lRow = Range("B" amp; Rows.count).End(xlUp).Row

For i = 2 To lRow
    Range("C" amp; i) = Range("A"amp; i) amp; " " amp; Range("B" amp; i)
Next i

End Sub