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

Вход

Регистрация

Напомнить пароль

 

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

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

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


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
Поиск:

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