Вам когда-нибудь приходилось заполнять / форматировать диагональ матрицы 20х20 ? А 100х100 ? Меня лично на долго не хватило... Написал вот макрос.
[vba]
Код
Public Sub DiagonalSelection() 'Выделяет ячейки по диагонали выделенного диапазона Dim i%, j%, n% Dim mainDgnlFlg As Boolean Dim dgnlRng As Range
With ActiveWindow.RangeSelection 'Главная диагональ mainDgnlFlg = Not (ActiveCell.Row = .Row Xor ActiveCell.Column = .Column) 'n = Min(.Rows.Count, .Columns.Count) n = IIf(.Rows.Count < .Columns.Count, .Rows.Count, .Columns.Count) Set dgnlRng = .Cells(IIf(mainDgnlFlg, 1, .Rows.Count), 1) For j = 2 To n i = IIf(mainDgnlFlg, j, .Rows.Count + 1 - j) Set dgnlRng = Union(dgnlRng, .Cells(i, j)) Next j End With 'ActiveWindow.RangeSelection
dgnlRng.Select
End Sub
[/vba]
Вам когда-нибудь приходилось заполнять / форматировать диагональ матрицы 20х20 ? А 100х100 ? Меня лично на долго не хватило... Написал вот макрос.
[vba]
Код
Public Sub DiagonalSelection() 'Выделяет ячейки по диагонали выделенного диапазона Dim i%, j%, n% Dim mainDgnlFlg As Boolean Dim dgnlRng As Range
With ActiveWindow.RangeSelection 'Главная диагональ mainDgnlFlg = Not (ActiveCell.Row = .Row Xor ActiveCell.Column = .Column) 'n = Min(.Rows.Count, .Columns.Count) n = IIf(.Rows.Count < .Columns.Count, .Rows.Count, .Columns.Count) Set dgnlRng = .Cells(IIf(mainDgnlFlg, 1, .Rows.Count), 1) For j = 2 To n i = IIf(mainDgnlFlg, j, .Rows.Count + 1 - j) Set dgnlRng = Union(dgnlRng, .Cells(i, j)) Next j End With 'ActiveWindow.RangeSelection