Здравствуйте, globalist, Вы писали:
G>Здраствуйте!
G>Скажите как мне с помощью макроса скопировать значение всей строки(не одной ячейки, а нескольких), а потом обработать эту строку по символьно средствами VBA в Excel.
Например так:
Dim I as Long
Dim xlsData As Variant
xlsData = MyExcel.ActiveSheet.Range("A1:D1).Value
For I = 1 To 4
Debug.Print xlsData(I)
Next I
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, globalist, Вы писали:
G>>Здраствуйте!
G>>Скажите как мне с помощью макроса скопировать значение всей строки(не одной ячейки, а нескольких), а потом обработать эту строку по символьно средствами VBA в Excel.
А>Например так:
А>А>Dim I as Long
А>Dim xlsData As Variant
А>xlsData = ActiveSheet.Range("A1:D1).Value
А>For I = 1 To 4
А>Debug.Print xlsData(I)
А>Next I
А>
Поспешил: "MyExcel." не нужен (это я из проекта на VB копировал). В зависимости от того, что требуется, можно просто
xlsData = ActiveSheet.Range("A1:D1).Value
Тут главная идея в том, что можно сразу всю область (в том числе и двухмерную) загнать в переменную за один прием.
М. Таумурзаев
Здравствуйте, globalist, Вы писали:
G>Скажите как мне с помощью макроса скопировать значение всей строки(не одной ячейки, а нескольких)
' Копирую значение диапазона "A1:C1" в диапазон "A2:C2".
ThisWorkbook.Range("A1:C1").Value = ThisWorkbook.Range("A2:C2").Value
Если диапазон более одной ячейки, то из Value получишь массив с базой=1.
G>, а потом обработать эту строку по символьно средствами VBA в Excel.
Какую строку?
Строку в VBA — это через mid можно реализовать:
Dim k as Long
Dim myChar as String
Dim workString as String
workString = "blah blah blah BU BU BU"
for k = 1 to Len(workString)
myChar = mid(workString, k, 1)
'что-то делаем с myChar
next
Строку в Excel? Вообще СТРОКА в листе XL это 256 ячеек (от A до IV) у которых цифра в адресе одинаковая, а то, что ты спрашивал в начале, называется диапазон.
А по обработке я тебе уже сказал — в Value будет массив из Variant структура немного витиеватая, но разобраться не трудно {Лист, ЯчейкаX, ЯчейкаY}. Или можно
Dim myCell as Excel.Range
For each myCell in ThisWorkbook.ActiveSheet.Range("A1:C1")
'чёта делаешь
next
Обработать каждый символ в Ячейке, т.е. формат ему задать и пр.? — Можно и это, свойство называется Range.Characters оно есть обект Read/Write и там есть Font. Непомню точно, но вродь даже его в For Each можно сувать.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, globalist, Вы писали:
G>А можно это сдлать с помощью cells,а не range?
Извините, я по забывчивости ввел Вас в заблуждение. Дело в том, что даже если ссылаться на Range("A1:D1").Value
т.е. 1 строчку, в xlsData будет двухмерный массив, и соответственно, приведенный мной выше код не будет работать.
Вот новая версия (апробированная), в т.ч. и по Cells.
Sub x()
Dim I As Long
Dim J As Long
Dim xlsData
' xlsData = Application.ActiveSheet.Range("A1:D1").Value
xlsData = Application.ActiveSheet.Range(Cells(1, 1), Cells(2, 4)).Value ' здесь для разнообразия 2 строки...
For I = 1 To UBound(xlsData, 2) 'по столбцам
For J = 1 To UBound(xlsData, 1) 'по строкам
Debug.Print xlsData(J, I)
Next J
Next I
End Sub
Но если надо пробежаться по разным строкам, можно и так (r — нужная строка):
Dim r As Long: r = 1' ссылка на строку № 1
xlsData = Application.ActiveSheet.Range("A" & r & ":D" & r).Value
Большое спасибо вы мне очень помогли!!!!