Option Explicit
Sub Test()
Const LoBound As Long = 1
Const UpBound As Long = 25
Dim vA As Variant
Dim vB As Variant
Dim avC(LoBound To UpBound, 1 To 1) As Variant
vA = Range(Cells(LoBound, 1), Cells(UpBound, 1)).Value
vB = Range(Cells(LoBound, 2), Cells(UpBound, 2)).Value
Dim i As Long
For i = LoBound To UpBound
avC(i, 1) = vA(i, 1) & vB(i, 1)
Next
Range(Cells(LoBound, 3), Cells(UpBound, 3)).Value = avC
End Sub
Здравствуйте, aureola, Вы писали:
A>Если склеивать построчно операторами цикла "For.. next i",
Так тебе не ячейки а значения в них скокатенировать надо. Стандартного способа обойтись без "For..." я не знаю.
A>Очень долго. Нужен способ оптимизировать решение.
Ну попробуй вот так:
Dim clsRN As Excel.Range
Set clsRN = ThisWorkbook.Sheets(1).Range("C1:C1024")
clsRN.FormulaR1C1 = "=R[0]C[-2] & R[0]C[-1]"
clsRN.Value = clsRN.Value
или так:
Dim clsRN As Excel.Range
Set clsRN = ThisWorkbook.Sheets(1).Range("C1:C1024")
Dim k As Long
Dim avntSrc() As Variant
Dim avntDst() As Variant
avntSrc = clsRN.Offset(0, -2).Value
avntDst = clsRN.Offset(0, -1).Value
For k = 1 To clsRN.Rows.Count
avntDst(k, 1) = CStr(avntSrc(k, 1)) & CStr(avntDst(k, 1))
Next k
clsRN.Value = avntDst
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Кто знает, существует ли возможность склеивать диапазоны ячеек
наборами, без:
Do...Loop
Do While...Loop
Do Until...Loop
Do ... Loop While
Do...Loop Until
For...Next
For Each ...Next?
К примеру, есть диапазон A1:An, B1:Bn.
В диапазоне C1:Cn нужно получить "A1:An"&"B1:Bn".
Основное условие: склеить диапазонами, а не ячейками по одной.
Такой код не работает:
Set ran = Worksheets("Sheet1").Range("A1" + ":" + "An")
ran.Offset(0, 0).Select = ran.Offset(0, 0) & " " & ran.Offset(o, 1)
приходится использовать For Each...Next
Здравствуйте, aureola, Вы писали:
A>К примеру, есть диапазон A1:An, B1:Bn.
Range("A1:Bn")
A>В диапазоне C1:Cn нужно получить "A1:An"&"B1:Bn".
Это как? Поясни что сделать надо?
A>Основное условие: склеить диапазонами, а не ячейками по одной.
У Range есть конструктор Range(<Range>, <Range>) он склеивает два Range в один.
A>Такой код не работает: A>Set ran = Worksheets("Sheet1").Range("A1" + ":" + "An")
естессно не работает, оператор кокатенации строк '&'
A>приходится использовать For Each...Next
ОК!
'Можешь пример с For Each...Next коротенький тут состряпать?
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Если склеивать построчно операторами цикла "For.. next i",
очень долго отрабатывает при большом количестве строк.
For i = 0 To x 'x — число строк
Set ran = Worksheets("Sheet1").Range("A1")
Set ran2 = Worksheets("Sheet1").Range("С1") '
ran2.Offset(i, 0) = ran.Offset(i, 0) & ran.Offset(i, 1)
Next i
таким образом если в ячейке "A1" находится текст "привет лунатикам!",
а в "B1" — "они среди нас", то в "C1" будет "привет лунатикам!они среди нас".
тоже и для других строк в диапазоне "A1":"Ax" цикл отталкиваясь от начальных ячеек
будет спускаться вниз.
НО!
Очень долго. Нужен способ оптимизировать решение. Range(range,range)
дает диапазон пусть один ("A1":"Ax"), другой ("B1":"Bx"). А надо тоже самое, как
выше привет лунатикам!они среди нас".
Re[4]: VBA, объект RANGE
От:
Аноним
Дата:
20.05.10 14:41
Оценка:
Оукей, спасибо, Zamunda
Попробую эти варианты.
Re[4]: VBA, объект RANGE
От:
Аноним
Дата:
20.05.10 14:50
Оценка:
Оукей. Интересный вариант, правда с циклом.
Попробуем.