|
![]() |
#1 |
Moderator
|
Эх, разошёлся я, раскочегарился
![]() Цитата:
На каждом шаге фиксируется диапазон (несколько несоседних строк) для конкретной метки. "Фиксируется" - в соответствующую объектную переменную, в Аксапте это будут COMы, здесь в Excel мы можем себе позволить массив типа Range. С каждым таким составным диапазоном потом можно делать что угодно. В нижеследующем VBA-примере я их расцвечиваю разными цветами: Код: Sub ExcelVBAMacro3() Dim rngB As Range 'колонка B Dim rng(1 To 10) As Range 'массив диапазонов Dim z As Integer Dim i As Integer ActiveWorkbook.Names.Add Name:="current", RefersToR1C1:="=0" 'генерирование тестовых данных - в 2 колонки For z = 1 To 4 For i = 1 To 10 'меточные значения в колонке A Cells((z - 1) * 10 + i, 1).Value = i 'формулы с "ошибкой-индикатором" в колонке B Cells((z - 1) * 10 + i, 2).FormulaR1C1 = "=RC[-1]/(RC[-1]-current)" Next i Next z Set rngB = Range(Range("B1"), Range("B1").End(xlDown)) 'определение диапазонов For i = 1 To 10 'фактически присваивание current = i ActiveWorkbook.Names.Add Name:="current", RefersToR1C1:="=" & CStr(i) '"Правка - Перейти - Выделить - Формулы - Ошибки". Set rng(i) = rngB.SpecialCells(xlCellTypeFormulas, 16).EntireRow Next i 'визуализация диапазонов расцвечиванием For i = 1 To 10 rng(i).Interior.ColorIndex = i Next i End Sub |
|
![]() |
#2 |
Участник
|
Если бы не скорость.. я вообще пытаюсь движок написать вывода отчетов.. строк так на 60000 должно быстро пахать, проставление значений по ячекам долго..
![]() |
|
![]() |
#3 |
Moderator
|
Так, а значения в "ADO или буфере обмена", наверное же, в каком-то цикле в Аксапте формируются? Добавить к ним одну "колонку A" и ахать на лист уже из буфера. Конечно, не надо отдельно "бежать" вдоль уже выведенных в Excel строк и прописывать им метки! Я-то заполняю свои ячейки чисто для примера, чтобы в них что-то было в качестве исходных данных для дальнейших основных демонстрируемых действий.
Что касается формулы, то ее в таком формате можно шлёпнуть вообще одним действием сразу для всего диапазона: rngB.FormulaR1C1 = "=RC[-1]/(RC[-1]-current)". При этом соответствующие формулы мгновенно пропишутся в каждую ячейку. Последний раз редактировалось Gustav; 19.12.2008 в 09:27. Причина: первоначально в цитируемом сообщении MironovI было из-за опечатки написано ДДЕ (вместо ADO) |
|
|
|