Показать сообщение отдельно
Старый 18.12.2008, 13:37   #19  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Эх, разошёлся я, раскочегарился
Цитата:
Сообщение от Gustav Посмотреть сообщение
если бы можно было помимо "Константа - Число" еще при этом и конкретное число указывать - было бы очень удобно для подобных манипуляций.
Как мне только что стало ясно, достаточно всего двух колонок: в одной целые числа - метки секций, а в другой формула-индикатор. После окончания вывода всех данных отчета значения индикатора меняем в небольшом цикле, последовательно перебирающем все возможные уникальные значения из первой колонки.

На каждом шаге фиксируется диапазон (несколько несоседних строк) для конкретной метки. "Фиксируется" - в соответствующую объектную переменную, в Аксапте это будут 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
Нажмите на изображение для увеличения
Название: ranges3.jpg
Просмотров: 650
Размер:	78.9 Кб
ID:	4070