Автоматическая группировка строк по жирности выделения

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Автоматическая группировка строк по жирности выделения

Сообщение sonata » 21.04.2003 (Пн) 16:08

Еще одна головоломка для асов.
Есть данные, которые необходимо сгруппировать.
Группировка осуществляется по столбцу А в котором группируются данные,
по следующему условию:
For i=1 to 100 step -1
Cells(i,1).Select
If Selection.Font.Bold = True then

Rows(i-1&":"&номер строки перед следующим жирным выделением).Select
Selection.Rows.Group

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 21.04.2003 (Пн) 19:46

Может я не совсем понял вопроса, но по-моему вот так
Код: Выделить всё
For i = 1 To 100
If Cells(i, 1).Font.Bold = True Then
Rows(i).Group
End If
Next

ЗЫ Единственное не пойму, зачем здесь нужен step -1 (по-моему и без этого можно обойтись)

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 21.04.2003 (Пн) 19:50

насколько я понял ты хочешь что-то типа этого
Код: Выделить всё
Dim i As Integer

i = 1
Do While Sheets(1).Cells(i, "a").Value <> Empty
    If Sheets(1).Cells(i, "a").Font.Bold = True Then
        Rows(i - 1).Group
    End If
    i = i + 1
Loop

но если я что-то не понял напиши
Ничто так не ограничивает полёт мысли программиста, как компилятор

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 22.04.2003 (Вт) 9:53

Не совсем....
Группировка должна быть всех значений между двумя жирными значениями, т.е. жирность-это как бы показатель итоговости...
См. файл...
Вложения
test.zip
(6.71 Кб) Скачиваний: 122

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 22.04.2003 (Вт) 10:08

по-моему вот так
Код: Выделить всё
Dim i As Integer
i = 1
Do While Sheets(1).Cells(i, "a").Value <> Empty
j = i
  Do While Sheets(1).Cells(i, "a").Font.Bold <> True
         Rows(i).Group j
      i = i + 1
  Loop
i = i + 1
Loop

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 22.04.2003 (Вт) 10:32

:D ПРОСТО СУПЕР!!!! СПАСИБО!
То, что надо!

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 22.04.2003 (Вт) 13:36

Если можно поясните, пожалуйста код программы,
в частности не понятны строки:
Rows(i).Group j как понять?
i = i + 1 Почему внутри второго цикла i, а не j?

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 22.04.2003 (Вт) 14:08

Первый параметр (в частности j ) метода Group означает, что это стартовая позиция структуры. А i=i+1 во втором цикле потому, что здесь мы передвигаемся "внутри группы" и расширяем ее до тех пор, пока не достигнем ячейки с Font.Bold=true. Выйдя из внутреннего цикла Do while снова i=i+1 (смещаемся на ячейку вниз) и снова присваиваем стартовую позицию "J"...

ЗЫ кстати, забыл напомнить, что если после того, как закончились значения в диапазоне и формат в последующих ячейках будет Font.Bold=true, то можно еще добавить
Код: Выделить всё
Dim i As Integer
i = 1
Do While Sheets(1).Cells(i, "a").Value <> Empty
j = i
    Do While Sheets(1).Cells(i, "a").Font.Bold <> True_
    [b]And Sheets(1).Cells(i, "a").Value <> Empty[/b]
        Rows(i).Group j
    i = i + 1
   Loop
i = i + 1
Loop

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 24.04.2003 (Чт) 14:57

И еще в условии стоит неравенство значения ячейки пустому условию,
а мне необходимо, чтобы даже если есть пустых значения, то тоже группировались...
Можно ли это модифицировать?

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 24.04.2003 (Чт) 15:08

в последнем своем ответе я просто предложил, что если в случае окончания диапазона и наличия "жирных" ячеек вне этого диапазона, то это удобно. Ну если этот вариант не устраивает, то предыдущий до него вариант, на мой взгляд, приемлемый :wink:


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

    TopList