Добрый вечер. Ситуация следующая: По формулам предварительно определяются размеры массива: кол-во строк, кол-во столбцов. Скажем 20х25 Нечетные и четные строки имеют свои правила для выделения ячеек. Выделение: группами по указанному количеству ячеек. Например:
НЕЧЕТ: 3+2х8+6
ЧЕТ: 6+2х8+3
То есть нечетную строку из 25 ячеек (столбцов) надо разбить на группы ячеек: 3 + 8 + 8 + 6 Каждую группу ячеек выделить жирной границей и в идеале своим цветом.
Предварительно максимальные размеры такого массива = 100 строк * 40 столбцов По финалу весь этот массив надо распечатать с учетом заголовка (шапки) документа...
Во вложении пример, как это в идеале должно выглядеть после такого автоматического форматирования самого массива.
Как-то так... Надеюсь я не очень многого хочу Направьте, подскажите, посоветуйте, помогите!
Заранее признателен.
"Моя благодарность не будет знать границ в пределах разумного". М.Жванецкий
=И(B$7<=$C$3;$B8<=$C$2;C$7<=ВПР(-ОСТАТ($B8;2)+2;$AP$4:$BV$5;6);C$7>ВПР(-ОСТАТ($B8;2)+2;$AP$4:$BV$5;5)) добавлять новые правила, изменяя это правило для всего диапазона с увеличением красных чисел на единицу группы одинаковые и жирные границы не стал делать, есть же цвет
Как вариант, но только с учетом того что не указывать диапазоны в виде "2x8", а указывать в фактическом "8+8".
Код
Sub t()
Application.ScreenUpdating = False
a = Cells(7, 3).End(xlDown).Row - 6
m = ActiveSheet.UsedRange.Columns.Count
For i = 0 To a - 1
x = Cells(i + 7, 3)
y = Mid(x, InStr(x, ":") + 2)
arr = Split(y, "+")
s = 11 + i
o = 5
For u = 0 To UBound(arr)
r = Int((255 * Rnd) + 1)
g = Int((255 * Rnd) + 1)
b = Int((255 * Rnd) + 1)
Range(Cells(s, o), Cells(s, --arr(u) + o - 1)).Select
Selection.Interior.Color = RGB(r, g, b)
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
o = o + arr(u)
Next u
Next i
Application.ScreenUpdating = True
End Sub
dude, Спасибо огромное! Помогли!!!! Я уж думал, тут без макросов никак собственно с ними в предложенном варианте GRIM, не разобрался... каждый раз новый цвет... не хватило меня осознать... подскажите... просто не разобрался..
dude, подскажите все-таки с границами - выделить жирным внешние границы одной группы ячеек. Думаю, что возможны недоразумения с цветопередачей принтера, а важно выделить что одна группа закончилась (8 каналов) и началась новая (пусть те же 8 каналов)...
И еще... при расчете последовательности групп я сейчас могу посчитать, что скажем этих косточек по 8 будет 3 штуки - вот это 3х8... Как мне разложить эти 3х8 на 8 - 8 - 8.... через счет значений?!... умничаю конечно... направьте!
Все получилось, спасибо огромное. Разложил в ряд последовательность групп ячеек : 3 8 8 8 5 ... В общем получилось! Сделал 2 чередующихся цвета (чет и нечет) на все 10 - групп. Буду ловить контраст по этим двум при печати.
Но столкнулся дальше с печатью... Ведь по одной схеме раскладке надо напечатать лист 100х40, а по другой 30х12... А масштаб печати по умолчанию стоит один и тот же - на 100 рядов и 40 столбцов... Там ведь есть хоть и скрытые, но формулы и УФ... И получается, что при печати раскладка 30х12 - мелкая в углу листа...
Чтобы выровнять масштаб печати сейчас вижу только вручную выделять видимые ячейки и печатать "выделенный фрагмент". Есть такая возможность по умолчанию выводить на печать, только "не пустые" ячейки... хоть там всяк ячейки не пустые - там ведь формулы... Может как-то на макрос какой посадить такую печать???
Или это такая карма будет - вручную выделять фрагмент и печатать? Подскажите ...