Выделения относительно активной ячейки — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Выделения относительно активной ячейки

2020-12-08 122
Выделения относительно активной ячейки 0.00 из 5.00 0 оценок
Заказать работу

Выделить вниз до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Down)

   Sub CtrlShiftDown()       Range(ActiveCell, ActiveCell.End(xlDown)).Select   End Sub

Выделить вверх до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Up)

   Sub CtrlShiftUp()       Range(ActiveCell, ActiveCell.End(xlUp)).Select   End Sub

Выделить вправо до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Right)

   Sub CtrlShiftRight()       Range(ActiveCell, ActiveCell.End(xlToRight)).Select   End Sub

Выделить влево до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Left)

   Sub CtrlShiftLeft()       Range(ActiveCell, ActiveCell.End(xlToLeft)).Select   End Sub

Выделить текущую область (выделяется диапазон неразрывно заполненных ячеек - равносильно нажатию кнопок Ctrl+Shift+*)

   Sub CtrlShiftUmn()       ActiveCell.CurrentRegion.Select   End Sub

Выделить активную область (происходит выделение всего заполненного диапазона Ctrl+Shift+Home, End, Home)

   Sub CtrlShiftHome()       Range(Range("A1"), ActiveCell.SpecialCells(xlLastCell)).Select   End Sub

Выделить смежные (заполненные прилегающие к активной ячейке) ячейки в столбце с активной ячейкой

   Sub SelectActiveColumn()       Dim TopCell As Range       Dim BottomCell As Range       If IsEmpty(ActiveCell) Then Exit Sub       On Error Resume Next        If IsEmpty(ActiveCell.Offset(-1, 0)) Then Set TopCell = _       ActiveCell Else Set TopCell = ActiveCell.End(xlUp)       If IsEmpty(ActiveCell.Offset(1, 0)) Then Set BottomCell = _       ActiveCell Else Set BottomCell = ActiveCell.End(xlDown)       Range(TopCell, BottomCell).Select   End Sub

Выделить смежные ячейки в строке с активной ячейкой

   Sub SelectActiveRow()       Dim LeftCell As Range       Dim RightCell As Range       If IsEmpty(ActiveCell) Then Exit Sub       On Error Resume Next       If IsEmpty(ActiveCell.Offset(0, -1)) Then Set LeftCell = _       ActiveCell Else Set LeftCell = ActiveCell.End(xlToLeft)       If IsEmpty(ActiveCell.Offset(0, 1)) Then Set RightCell = _       ActiveCell Else Set RightCell = ActiveCell.End(xlToRight)       Range(LeftCell, RightCell).Select   End Sub

Выделить весь активный столбец

   Sub SelectionEntireColumn()       Selection.EntireColumn.Select   End Sub

Выделить всю активную строку

   Sub SelectEntireRow()       Selection.EntireRow.Select   End Sub

Выделить рабочий лист

   Sub SelectEntireSheet()       Cells.Select   End Sub

Выделить следующую пустую ячейку снизу

   Sub CellNextDown()       ActiveCell.Offset(1, 0).Select       Do While Not IsEmpty(ActiveCell)           ActiveCell.Offset(1, 0).Select       Loop   End Sub

Выделить следующую пустую ячейку справа

   Sub CellNextRight()       ActiveCell.Offset(0, 1).Select       Do While Not IsEmpty(ActiveCell)           ActiveCell.Offset(0, 1).Select       Loop   End Sub

Выделение от первой непустой до последней непустой ячеек в строке

   Sub SelectFirstToLastInRow()       Dim LeftCell As Range       Dim RightCell As Range       Set LeftCell = Cells(ActiveCell.Row, 1)       Set RightCell = Cells(ActiveCell.Row, 256)       If IsEmpty(LeftCell) Then Set LeftCell = LeftCell.End(xlToRight)       If IsEmpty(RightCell) Then Set RightCell = RightCell.End(xlToLeft)       If LeftCell.Column = 256 And RightCell.Column = 1 Then ActiveCell. _       Select Else Range(LeftCell, RightCell).Select     End Sub

Выделение от первой непустой до последней непустой ячеек в столбце

   Sub SelectFirstToLastInColumn()       Dim TopCell As Range       Dim BottomCell As Range       Set TopCell = Cells(1, ActiveCell.Column)       Set BottomCell = Cells(16384, ActiveCell.Column)       If IsEmpty(TopCell) Then Set TopCell = TopCell.End(xlDown)       If IsEmpty(BottomCell) Then Set BottomCell = BottomCell.End(xlUp)       If TopCell.Row = 16384 And BottomCell.Row = 1 Then ActiveCell. _       Select Else Range(TopCell, BottomCell).Select   End Sub

Относительные формулы

Некоторые наверно обращали внимание на то, что при записи макроса вводимые формулы имеют непонятый вид. Тут хотелось бы развеять все непонятки и показать, что в этих формулах нет ничего сложного, и в них всё логично, хоть они и выглядят по другому. Рассмотрим простую формулу сложения двух ячеек.

Sub Primer()     Cells(4, 5) = "=RC[-3]+RC[-1]"     Cells(5, 5) = "=R[-3]C+R[-1]C" End Sub

R - это строка, от слова Row;
C - это столбец, от слова Column;

В квадратных скобках указано на какое количество столбцов или строк необходимо переместится от заданной ячейки. Принцип отчёта такой же как и в команде рассмотренной самой первой в этом уроке - Offset. И как видно на примере, значения в квадратных скобках могут быть как отрицательные так и положительные.

В первом примере показано, что сумма в ячейке Cells(4, 5) равна сумме двух ячеек, одна из которых находится на третьем столбце влево от заданной ячейки, а другая на один столбец влево от заданной ячейки, при этом строка остаётся неизменной. На втором примере всё аналогично, только тут уже столбец остаётся неизменным а меняются строки.

Столбцы и строки

В этом пункте я расскажу как правильно работать со строками и столбцами. Каким образом можно выделить одну строку, две или несколько строк, и тоже самое со столбцами.

Для того чтобы оперировть какой-то одной строкой или столбцом, можно воспользоваться следующей записью:

   Rows(6).Select   'Строка   Columns(6).Select 'Столбец

Это самая простая запись не требующая никаких кавычек, Вы просто указываете номер строки или столбца и дальше делаете с ней что угодно, например закрасить в синий цвет:

   Rows(6).Interior.ColorIndex = 5  'Строка   Columns(6).Interior.ColorIndex = 5 'Столбец

Если Вам необходимо выделить более одной строки или столбца, то можно воспользоваться следующей записью:

   Rows("2:2").Select   'Строка   Columns("B:B").Select 'Столбец

Такая запись выделяет только одну строку и только один столбец.
А вот если записать так:

   Rows("2:5").Select   'Строка   Columns("B:F").Select 'Столбец

то мы сможем обработать целый диапазон строк и столбцов, но он сплошной. Если мы хотим обработать разные строки, например 1, 4, 6-8, и разные столбцы, например B, D, F-G, то запись необходимо произвести следующим образом:

   Range("1:1,4:4,6:8").Select 'Строка   Range("B:B,D:D,F:G").Select 'Столбец

При такой записи у нас получается уже диапазон. И умногих возник вопрос: "Каким образом можно одновременно выделить и строки и столбцы?". Пример ниже выделяет одновременно 8 строчку и столбец D:

   Range("D:D,8:8").Select

А этот пример выделяет сразу несколько строк и столбцов одновременно:

   Range("B:B,D:D,3:6,9:9").Select

Error. Обработка ошибок

Ну вот и пришёл тот долгожданный день, когда Вы задумались об обработке ошибок. Хорошо когда в программах работаете только Вы, и Вы знаете куда в ней можно нажать, а куда не стоит потому что случится ошибка. Но если Вы пишите программу, в которой работает несколько человек помимо Вас и они понятия не имеют что в ней можно и что нельзя, и они обязательно будут тыкать туда куда нельзя, и эти ошибки Вас просто погубят, потому что все будут грешить на вашу программу.
Конечно же в любой программе необходимо предусмотреть "защиту от дурака", но иногда "дурак" превосходит все ожидания. Если честно, я редко пользуюсь командами для обработки ошибок. Стараюсь предусматривать все возможные варианты действий пользователя, но это иногда заставляет написать такую огромную защиту, что сама программа того не стоит. Вообщем приступим.


Скачать пример

Искусственно создадим ошибку. Самый простой способ - взять любое число и поделить его на ноль. Напишем простенькую программу и на ней будем рассматривать различные способы обхода ошибки.

   Sub primer1()   a = 10   b = InputBox("Введите число отличное от 0", "Ввод данных", "0")    c = a / b    MsgBox "Результат: " & a & "/" & b & "=" & c, vbInformation, "Ответ"    End Sub

Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.