Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Выделяем диагональ матрицы - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин, DrMini  
Выделяем диагональ матрицы
Формуляр Дата: Вторник, 15.01.2013, 21:15 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Вам когда-нибудь приходилось заполнять / форматировать диагональ матрицы 20х20 ?
А 100х100 ?
Меня лично на долго не хватило...
Написал вот макрос.

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



Excel 2003 EN, 2013 EN
 
Ответить
СообщениеВам когда-нибудь приходилось заполнять / форматировать диагональ матрицы 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]

Автор - Формуляр
Дата добавления - 15.01.2013 в 21:15
Staniiislav Дата: Среда, 16.01.2013, 17:24 | Сообщение № 2
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

2010
Добрый день
А что должно произойти если запустить макрос на пустом листе?


Единственный способ стать умнее, играть с более умным соперником
 
Ответить
СообщениеДобрый день
А что должно произойти если запустить макрос на пустом листе?

Автор - Staniiislav
Дата добавления - 16.01.2013 в 17:24
Формуляр Дата: Среда, 16.01.2013, 17:39 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Смотря чего на нём выделено.
Если 1 ячейку - ничего.
Если диапазон ячеек - выделит диагональ.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеСмотря чего на нём выделено.
Если 1 ячейку - ничего.
Если диапазон ячеек - выделит диагональ.

Автор - Формуляр
Дата добавления - 16.01.2013 в 17:39
Staniiislav Дата: Четверг, 17.01.2013, 10:28 | Сообщение № 4
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

2010
понял, спасибо за ответ


Единственный способ стать умнее, играть с более умным соперником
 
Ответить
Сообщениепонял, спасибо за ответ

Автор - Staniiislav
Дата добавления - 17.01.2013 в 10:28
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!