#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