Выделенные строки макросом excel

Координатное выделение

У вас большой монитор, но таблицы, с которыми вы работаете — еще больше. И, пробегая взглядом по экрану в поисках нужной информации, всегда есть шанс «соскользнуть» взглядом на соседнюю строчку и посмотреть не туда. Я даже знаю людей, который для таких случаев постоянно держат недалеко от себя деревянную линейку, чтобы приложить ее к строке на мониторе. Технологии будущего! 

А если при движении активной ячейки по листу будет подсвечиваться текущая строка и столбец? Своего рода координатное выделение примерно такого вида:

coord_selection1.gif

Поудобнее, чем линейка, правда?

Есть несколько способов разной сложности, чтобы реализовать такое. Каждый способ — со своими плюсами и минусами. Давайте разберем их детально.

Способ 1. Очевидный. Макрос, выделяющий текущую строку и столбец

Самый очевидный путь для решения нашей проблемы «в лоб» — нам нужен макрос, который будет отслеживать изменение выделения на листе и выделять целую строку и столбец для текущей ячейки. Также желательно иметь возможность при необходимости включать и отключать эту функцию, чтобы такое крестообразное выделение не мешало нам вводить, например, формулы, а работало только тогда, когда мы просматриваем список в поисках нужной информации. Это приводит нас к трем макросам (выделения, включения и выключения), которые нужно будет добавить в модуль листа.

Откройте лист со таблицей, в которой хотите получить такое координатное выделение. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этих трех макросов:

Dim Coord_Selection As Boolean   'глобальная переменная для вкл/выкл выделения

Sub Selection_On()   'макрос включения выделения
    Coord_Selection = True
End Sub

Sub Selection_Off()  'макрос выключения выделения
    Coord_Selection = False
End Sub

'основная процедура, выполняющая выделение
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim WorkRange As Range

    If Target.Cells.Count > 1 Then Exit Sub  'если выделено больше 1 ячейки - выходим
    If Coord_Selection = False Then Exit Sub    'если выделение выключено - выходим

    Application.ScreenUpdating = False
    Set WorkRange = Range("A6:N300")    'адрес рабочего диапазона, в пределах которого видно выделение
    Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select   'формируем крестообразный диапазон и выделяем
    Target.Activate   
End Sub

Измените адрес рабочего диапазона на свой — именно в пределах этого диапазона и будет работать наше выделение. Затем закройте редактор Visual Basic и вернитесь в Excel.

Нажмите сочетание клавиш ALT+F8, чтобы открыть окно со списком доступных макросов. Макрос Selection_On, как нетрудно догадаться, включает координатное выделение на текущем листе, а макрос Selection_Off — выключает его. В этом же окне, нажав кнопку Параметры (Options) можно назначить этим макросам сочетания клавиш для удобного запуска.

Плюсы этого способа:

  • относительная простота реализации
  • выделение — операция безобидная и никак не изменяет содержимое или форматирование ячеек листа, все остается как есть

Минусы этого способа:

  • такое выделение некорректно работает в том случае, если на листе есть объединенные ячейки — выделяются сразу все строки и столбцы, входящие в объединение
  • если случайно нажать клавишу Delete, то очистится не только активная ячейка, а вся выделенная область, т.е. удалятся данные из всей строки и столбца

Способ 2. Оригинальный. Функция ЯЧЕЙКА + Условное форматирование

Этот способ хотя и имеет пару недостатков, мне представляется весьма изящным. Реализовать что-либо, используя только встроенные средства Excel, минимально влезая в программирование на VBA — высший пилотаж ;)

Способ основан на использовании функции ЯЧЕЙКА (CELL), которая может выдавать массу различной информации по заданной ячейке — высоту, ширину, номер строки-столбца, числовой формат и т.д.. Эта функция имеет два аргумента:

  • кодовое слово для параметра, например «столбец» или «строка»
  • адрес ячейки, для которой мы хотим определить значение этого параметра

Хитрость в том, что второй аргумент не является обязательным. Если он не указан, то берется текущая активная ячейка.

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

  1. Выделяем нашу таблицу, т.е. те ячейки, в которых в будущем должно отображаться координатное выделение.
  2. В Excel 2003 и более старших версиях открываем меню Формат — Условное форматирование — Формула (Format — Conditional Formatting — Formula). В Excel 2007 и новее — жмем на вкладке Главная (Home) кнопку Условное форматирование — Создать правило (Conditional Formatting — Create Rule) и выбираем тип правила Использовать формулу для определения форматируемых ячеек (Use formula)
  3. Вводим формулу для нашего координатного выделения:

    =ИЛИ(ЯЧЕЙКА(«строка»)=СТРОКА(A2);ЯЧЕЙКА(«столбец»)=СТОЛБЕЦ(A2))

    =OR(CELL(«row»)=ROW(A1),CELL(«column»)=COLUMN(A1))
    coord_selection2.gif
    Эта формула проверяет, не совпадает ли номер столбца каждой ячейки в таблице с номером столбца текущей ячейки. Аналогично со столбцами. Таким образом закрашенными окажутся только те ячейки, у которых либо номер столбца, либо номер строки совпадает с текущей ячейкой. А это и есть крестообразное координатное выделение, которого мы хотим добиться.

  4. Нажмите кнопку Формат (Format) и задайте цвет заливки.

Все почти готово, но остался один нюанс. Дело в том, что Excel не считает изменение выделения изменением данных на листе. И, как следствие, не запускает пересчет формул и перекраску условного форматирования только при изменении положения активной ячейки. Поэтому добавим в модуль листа простой макрос, который будет это делать. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этого простого макроса:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveCell.Calculate
End Sub

Теперь при изменении выделения будет запускаться процесс пересчета формулы с функцией ЯЧЕЙКА в условном форматировании и заливаться текущая строка и столбец.

Плюсы этого способа:

  • Условное форматирование не нарушает пользовательское форматирование таблицы
  • Этот вариант выделения корректно работает с объединенными ячейками.
  • Нет риска удалить целую строку и столбец с данными при случайном нажатии Delete.
  • Макросы используются минимально

Минусы этого способа:

  • Формулу для условного форматирования надо вводить вручную.
  • Нет быстрого способа включить-выключить такое форматирование — оно включено всегда, пока не будет удалено правило.

Способ 3. Оптимальный. Условное форматирование + макросы

Золотая середина. Используем механизм отслеживания выделения на листе при помощи макросов из способа-1 и добавим к нему безопасное выделение цветом с помощью условного форматирования из способа-2.

Откройте лист со таблицей, в которой хотите получить такое координатное выделение. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этих трех макросов:

Dim Coord_Selection As Boolean

Sub Selection_On()
    Coord_Selection = True
End Sub

Sub Selection_Off()
    Coord_Selection = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim WorkRange As Range, CrossRange As Range
    Set WorkRange = Range("A7:N300")    'адрес рабочего диапазона с таблицей
    If Target.Count > 1 Then Exit Sub
    If Coord_Selection = False Then
        WorkRange.FormatConditions.Delete
        Exit Sub
    End If
    Application.ScreenUpdating = False
    If Not Intersect(Target, WorkRange) Is Nothing Then
        Set CrossRange = Intersect(WorkRange, Union(Target.EntireRow, Target.EntireColumn))
        WorkRange.FormatConditions.Delete
        CrossRange.FormatConditions.Add Type:=xlExpression, Formula1:="=1"
        CrossRange.FormatConditions(1).Interior.ColorIndex = 33
        Target.FormatConditions.Delete
    End If
End Sub

Не забудьте изменить адрес рабочего диапазона на адрес своей таблицы. Закройте редактор Visual Basic и вернитесь в Excel. Чтобы использовать добавленные макросы, нажмите сочетание клавиш ALT+F8  и действуйте аналогично способу 1. 

Способ 4. Красивый. Надстройка FollowCellPointer

Excel MVP Jan Karel Pieterse родом из Нидерландов раздает у себя на сайте бесплатную надстройку FollowCellPointer(36Кб), которая решает ту же задачу, отрисовывая с помощью макросов графические линии-стрелки для подсветки текущей строки и столбца:

coord_selection3.gif

Красивое решение. Не без глюков местами, но попробовать точно стоит. Качаем архив, распаковываем на диск и устанавливаем надстройку:

  • в Excel 2003 и старше — через меню Сервис — Надстройки — Обзор (Tools — Add-Ins — Browse)
  • в Excel 2007 и новее — через Файл — Параметры — Надстройки — Перейти — Обзор (File — Excel Options — Add-Ins — Go to — Browse)

Ссылки по теме

  • Что такое макросы, куда вставлять код макроса на Visual Basic

You can use the following methods in VBA to highlight rows:

Method 1: Highlight Active Row

Sub HighlightActiveRow()
ActiveCell.EntireRow.Interior.Color = vbYellow
End Sub

This particular macro will highlight the currently active row.

Method 2: Highlight Specific Row

Sub HighlightSpecificRow()
Rows("4:4").Interior.Color = vbYellow
End Sub

This particular macro will highlight row 4 in the current sheet.

Method 3: Highlight Several Specific Rows

Sub HighlightSpecificRows()
Range("2:2,4:4,6:6,8:8").Interior.Color = vbYellow
End Sub

This particular macro will highlight rows 2, 4, 6, and 8 in the current sheet.

Note: To highlight all rows between 2 and 8, you can type Range(“2:8”) instead.

The following examples show how to use each method in practice.

Example 1: Highlight Active Row

Suppose we currently have cell B3 selected.

We can create the following macro to highlight each cell in the currently active row

Sub HighlightActiveRow()
ActiveCell.EntireRow.Interior.Color = vbYellow
End Sub

When we run this macro, we receive the following output:

Notice that each cell in row three is highlighted and all other rows are simply left untouched.

Example 2: Highlight Specific Row

Suppose we would like to highlight row four only.

We can create the following macro to do so:

Sub HighlightSpecificRow()
Rows("4:4").Interior.Color = vbYellow
End Sub

When we run this macro, we receive the following output:

Notice that each cell in row four is highlighted and all other rows are simply left untouched.

Example 3: Highlight Several Specific Rows

Suppose we would like to highlight rows 2, 4, 6, and 8 in the current sheet.

We can create the following macro to do so:

Sub HighlightSpecificRows()
Range("2:2,4:4,6:6,8:8").Interior.Color = vbYellow
End Sub

When we run this macro, we receive the following output:

VBA highlight several specific rows

Notice that rows 2, 4, 6, and 8 are all highlighted and all other rows are left untouched.

Note: In each example we chose to use yellow (vbYellow) as the highlight color, but you can choose a different color such as vbRed, vbGreen, vbBlue, etc.

Additional Resources

The following tutorials explain how to perform other common tasks in VBA:

VBA: How to Highlight Cells
VBA: How to Apply Conditional Formatting to Cells
VBA: How to Apply Conditional Formatting to Duplicate Values

This macro will highlight the row and column of the active cell. This will fill the row of the active cell with a solid background color and remove the color when a different cell is selected within the excel spreadsheet. Anytime you select a different cell, the new column and row will be highlighted. This is a great macro for zeroing in on a specific cell during a presentation or just when working in a really big spreadsheet. Also, if you remove the gridlines from the spreadsheet, it can be hard to determine which row or column a cell is in and this will allow you to figure that out much quicker.

This macro will overwrite any previous color in the selected cell and row. That means that if you have a worksheet with a lot of background colors and you use this macro and start selecting cells, the previous background colors will disappear.

To change the color of the highlight change the number in this line of code .ColorIndex = 6.

Where to install the macro:  Worksheet

Highlight the Row of the Selected Cell

Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Static rr

If rr <> "" Then
 With Rows(rr).Interior
  .ColorIndex = xlNone
 End With
End If r = Selection.Row
rr = r With Rows(r).Interior
 .ColorIndex = 6
 .Pattern = xlSolid
End With End Sub


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Make a UserForm in Excel

Tutorial: Let’s create a working UserForm in Excel.
This is a step-by-step tutorial that shows you e…

Excel VBA MsgBox — Message Box Macro

Tutorial: Create a pop-up message box in Excel using VBA Macros. This allows you to show a message t…

Pass Arguments to a Macro Called from a Button or Sheet in Excel

Tutorial: How to pass arguments and values to macros called from worksheets, buttons, and anything e…

Select Ranges in the Worksheet from a UserForm

Tutorial: Select a range in Excel from a UserForm and have that range input into the form so that yo…

NPER Function — Calculate Number of Periods Needed for a Set of Payments in Excel

Tutorial: How to calculate the number of periods required for an investment in order to get the desi…

Count the Occurrences of the Largest or Smallest Value in a Range

Tutorial:
How to count the occurrence of the largest or smallest value in a range; basically, how m…

How to Install the Macro

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  8. Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
  9. You are now ready to run the macro.

Similar Content

Make a UserForm in Excel

Tutorial: Let’s create a working UserForm in Excel.
This is a step-by-step tutorial that shows you e…

Excel VBA MsgBox — Message Box Macro

Tutorial: Create a pop-up message box in Excel using VBA Macros. This allows you to show a message t…

Pass Arguments to a Macro Called from a Button or Sheet in Excel

Tutorial: How to pass arguments and values to macros called from worksheets, buttons, and anything e…

Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons

50+ Hours of Video

200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Подскажите, как реализовать тот же макрос, только результатом должно быть не выделение ячеек цветом, а:
1 вариант: выбор всех ячеек с искомым словом;
2 вариант: удаление всех ячеек с искомым словом.

Подскажите, как реализовать тот же макрос, только результатом должно быть не выделение ячеек цветом, а:
1 вариант: выбор всех ячеек с искомым словом;
2 вариант: удаление всех ячеек с искомым словом. zaranim

Сообщение Добрый день!

Подскажите, как реализовать тот же макрос, только результатом должно быть не выделение ячеек цветом, а:
1 вариант: выбор всех ячеек с искомым словом;
2 вариант: удаление всех ячеек с искомым словом. Автор — zaranim
Дата добавления — 17.04.2019 в 10:42

Источник

Координатное выделение

У вас большой монитор, но таблицы, с которыми вы работаете — еще больше. И, пробегая взглядом по экрану в поисках нужной информации, всегда есть шанс «соскользнуть» взглядом на соседнюю строчку и посмотреть не туда. Я даже знаю людей, который для таких случаев постоянно держат недалеко от себя деревянную линейку, чтобы приложить ее к строке на мониторе. Технологии будущего!

А если при движении активной ячейки по листу будет подсвечиваться текущая строка и столбец? Своего рода координатное выделение примерно такого вида:

Поудобнее, чем линейка, правда?

Есть несколько способов разной сложности, чтобы реализовать такое. Каждый способ — со своими плюсами и минусами. Давайте разберем их детально.

Способ 1. Очевидный. Макрос, выделяющий текущую строку и столбец

Самый очевидный путь для решения нашей проблемы «в лоб» — нам нужен макрос, который будет отслеживать изменение выделения на листе и выделять целую строку и столбец для текущей ячейки. Также желательно иметь возможность при необходимости включать и отключать эту функцию, чтобы такое крестообразное выделение не мешало нам вводить, например, формулы, а работало только тогда, когда мы просматриваем список в поисках нужной информации. Это приводит нас к трем макросам (выделения, включения и выключения), которые нужно будет добавить в модуль листа.

Откройте лист со таблицей, в которой хотите получить такое координатное выделение. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этих трех макросов:

Измените адрес рабочего диапазона на свой — именно в пределах этого диапазона и будет работать наше выделение. Затем закройте редактор Visual Basic и вернитесь в Excel.

Нажмите сочетание клавиш ALT+F8, чтобы открыть окно со списком доступных макросов. Макрос Selection_On, как нетрудно догадаться, включает координатное выделение на текущем листе, а макрос Selection_Off — выключает его. В этом же окне, нажав кнопку Параметры (Options) можно назначить этим макросам сочетания клавиш для удобного запуска.

Плюсы этого способа:

  • относительная простота реализации
  • выделение — операция безобидная и никак не изменяет содержимое или форматирование ячеек листа, все остается как есть

Минусы этого способа:

  • такое выделение некорректно работает в том случае, если на листе есть объединенные ячейки — выделяются сразу все строки и столбцы, входящие в объединение
  • если случайно нажать клавишу Delete, то очистится не только активная ячейка, а вся выделенная область, т.е. удалятся данные из всей строки и столбца

Способ 2. Оригинальный. Функция ЯЧЕЙКА + Условное форматирование

Этот способ хотя и имеет пару недостатков, мне представляется весьма изящным. Реализовать что-либо, используя только встроенные средства Excel, минимально влезая в программирование на VBA — высший пилотаж 😉

Способ основан на использовании функции ЯЧЕЙКА (CELL), которая может выдавать массу различной информации по заданной ячейке — высоту, ширину, номер строки-столбца, числовой формат и т.д.. Эта функция имеет два аргумента:

  • кодовое слово для параметра, например «столбец» или «строка»
  • адрес ячейки, для которой мы хотим определить значение этого параметра

Хитрость в том, что второй аргумент не является обязательным. Если он не указан, то берется текущая активная ячейка.

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

  1. Выделяем нашу таблицу, т.е. те ячейки, в которых в будущем должно отображаться координатное выделение.
  2. В Excel 2003 и более старших версиях открываем меню Формат — Условное форматирование — Формула (Format — Conditional Formatting — Formula) . В Excel 2007 и новее — жмем на вкладке Главная (Home) кнопку Условное форматирование — Создать правило (Conditional Formatting — Create Rule) и выбираем тип правила Использовать формулу для определения форматируемых ячеек (Use formula)
  3. Вводим формулу для нашего координатного выделения:

Эта формула проверяет, не совпадает ли номер столбца каждой ячейки в таблице с номером столбца текущей ячейки. Аналогично со столбцами. Таким образом закрашенными окажутся только те ячейки, у которых либо номер столбца, либо номер строки совпадает с текущей ячейкой. А это и есть крестообразное координатное выделение, которого мы хотим добиться.

  • Нажмите кнопку Формат (Format) и задайте цвет заливки.
  • Все почти готово, но остался один нюанс. Дело в том, что Excel не считает изменение выделения изменением данных на листе. И, как следствие, не запускает пересчет формул и перекраску условного форматирования только при изменении положения активной ячейки. Поэтому добавим в модуль листа простой макрос, который будет это делать. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этого простого макроса:

    Теперь при изменении выделения будет запускаться процесс пересчета формулы с функцией ЯЧЕЙКА в условном форматировании и заливаться текущая строка и столбец.

    Плюсы этого способа:

    • Условное форматирование не нарушает пользовательское форматирование таблицы
    • Этот вариант выделения корректно работает с объединенными ячейками.
    • Нет риска удалить целую строку и столбец с данными при случайном нажатии Delete.
    • Макросы используются минимально

    Минусы этого способа:

    • Формулу для условного форматирования надо вводить вручную.
    • Нет быстрого способа включить-выключить такое форматирование — оно включено всегда, пока не будет удалено правило.

    Способ 3. Оптимальный. Условное форматирование + макросы

    Золотая середина. Используем механизм отслеживания выделения на листе при помощи макросов из способа-1 и добавим к нему безопасное выделение цветом с помощью условного форматирования из способа-2.

    Откройте лист со таблицей, в которой хотите получить такое координатное выделение. Щелкните правой кнопкой мыши по ярлычку листа и выберите в контекстном меню команду Исходный текст (Source Code). Должно открыться окно редактора Visual Basic. Скопируйте в него этот текст этих трех макросов:

    Не забудьте изменить адрес рабочего диапазона на адрес своей таблицы. Закройте редактор Visual Basic и вернитесь в Excel. Чтобы использовать добавленные макросы, нажмите сочетание клавиш ALT+F8 и действуйте аналогично способу 1.

    Способ 4. Красивый. Надстройка FollowCellPointer

    Excel MVP Jan Karel Pieterse родом из Нидерландов раздает у себя на сайте бесплатную надстройку FollowCellPointer(36Кб), которая решает ту же задачу, отрисовывая с помощью макросов графические линии-стрелки для подсветки текущей строки и столбца:

    Красивое решение. Не без глюков местами, но попробовать точно стоит. Качаем архив, распаковываем на диск и устанавливаем надстройку:

    • в Excel 2003 и старше — через меню Сервис — Надстройки — Обзор (Tools — Add-Ins — Browse)
    • в Excel 2007 и новее — через Файл — Параметры — Надстройки — Перейти — Обзор (File — Excel Options — Add-Ins — Go to — Browse)

    Источник

    Выделенные строки макросом excel

    Как автоматически выделить строку и столбец активной ячейки в Excel?

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

    One click to highlight row and column of selected cell in Excel:

    Kutools for Excel‘s Reading Layout utility helps you quickly highlight row and column of selected cell in Excel. See screenshot:

    Kutools for Excel: with more than 200 handy Excel add-ins, free to try with no limitation in 60 days. Download the free trial Now!

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

    1. Откройте рабочий лист, вы автоматически выделите строку и столбец активной ячейки, щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код из контекстного меню.

    2. Затем скопируйте и вставьте следующий код VBA в пустое окно кода:

    Код VBA: автоматическое выделение строки и столбца выбранной ячейки

    3, Затем нажмите другой + Q вместе, чтобы вернуться на рабочий лист, теперь, когда вы выбираете ячейку, вся строка и столбец этой ячейки выделяются. И он будет динамически перемещаться по мере изменения выбранной ячейки.

    Ноты:

    • 1. В приведенном выше коде вы можете изменить .Колориндекс = 6 цвет на другой цвет, который вам нравится.
    • 2. Этот код VBA применяется только к листу, который вы выбрали на шаге 2 выше.
    • 3. Если вы не хотите снова выделять столбец и строку выбранной ячейки, вам необходимо удалить указанный выше VBA и установить отсутствие заливки для выбранной строки и столбца, нажав Главная >Цвет заливки >Без заливки.
    • 4. Если на вашем листе есть несколько цветных ячеек, цвет будет потерян, когда вы щелкнете по ячейке, а затем перейдете к другой ячейке.

    Если вы новичок в VBA, здесь рекомендую Kutools for Excel‘s Макет для чтения утилита. Эта утилита помогает легко выделить строку и столбец выбранной ячейки в Excel, как показано в демонстрации ниже. Скачайте и попробуйте прямо сейчас! (30-дневный бесплатный пробный период)

    Посмотрим, как применить Kutools for ExcelАвтора Макет для чтения возможность выделять целые строки и столбцы диапазона ячеек.

    1. Нажмите Кутулс > Макет для чтения. Смотрите скриншот:

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

    Заметки:

    • 1. Вы можете изменить настройки формата чтения в соответствии с вашими потребностями, как показано на скриншоте ниже.
    • 2. Вы можете отменить эту утилиту, сняв флажок Макет для чтения под Reading выпадающий список.
    • 3. Это Просмотр макета чтения Эта функция применяется ко всем листам в вашей книге.
    • 4. Это Просмотр макета чтения функция будет отключена при следующем запуске книги.

    Источник

    Adblock
    detector

    На чтение 16 мин. Просмотров 533 Опубликовано 04.02.2021

    Как указать Excel выделять строки по их номеру. Например, скажем, я хотел выделить строки 6, 10, 150, 201. Спасибо.


    Вот еще один, основанный на .EntireRow.Interior.ColorIndex

    Mote. ‘не ограничивает вас вводом номеров строк, но дает пользователю гибкость в выборе строк во время выполнения.

      Option ExplicitSub Sample () Dim Ret As Range On Error Resume Next Set  Ret = Application.InputBox («Пожалуйста, выберите строки, которые вы хотите раскрасить», «Цветные строки», Тип: = 8) При ошибке GoTo 0 Если нет Ret Is Nothing, то Ret.EntireRow.Interior.ColorIndex = 6End Sub  

    FOLLOWUP

    Есть ли способ написать макрос для чтения номеров строк из список и выделить строки?

    Да, есть способ. Скажем, список в ячейках от A1 до A10, тогда вы можете использовать этот код

      Option ExplicitSub Sample () Dim i As Long, sh As Worksheet On Error GoTo Whoa Application.ScreenUpdating =  False '~~> Установите это на лист, на котором нужно раскрасить строки. Set sh = Sheets ("Sheet2")' ~~> Измените Sheet1 на лист, который имеет список With Sheets ("Sheet1") For i = 1  До 10 Если не Len (Trim (.Range ("A" & i) .Value)) = 0 And _ IsNumeric (.Range ("A" & i) .Value) Then _ sh.Rows (.Range ("A  "& i) .Value) .Interior.ColorIndex = 3 ' 

    В качестве альтернативы ответу Motes вы можете использовать условное форматирование.

    Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …

    Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)

    ответил 06 июня ’12 в 22:38


    В качестве альтернативы ответу Моутса вы можете использовать условное форматирование.

    Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …

    Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)


    Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, а затем очистить его, чтобы сделать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:

      Rows ("13:13"). SelectRange ("C13"  ) .ActivateWith Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0End With  

    Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:

      Rows ("13:13"). Interior.Color = 65535  

    Добавление в строку нескольких выберите:

      Rows ("6: 6,10: 10,150: 150,201: 201"). Interior.Color = 65535  

    Сводка:

    • Запись макроса
    • Просмотр версии Excel
    • Используйте/редактируйте нужный код

    ответил 6 июня ’12 в 22:36

    • +1 за подробный ответ 🙂 – Siddharth Rout 6 июня 2012, 23:18

    добавить комментарий |


    Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, и затем очистите это, чтобы делать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:

      Rows ("13:13"). SelectRange ("C13"  ) .ActivateWith Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0End With  

    Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:

      Rows ("13:13"). Interior.Color = 65535  

    Добавление в строку нескольких выберите:

      Rows ("6: 6,10: 10,150: 150,201: 201"). Interior.Color = 65535  

    Сводка:

    • Запись макроса
    • Просмотр версии Excel
    • Используйте/редактируйте нужный код

      objWB  .Cells (rowNum, 201) .EntireRow.Interior.ColorIndex = 6  

    и т. Д.

    отредактировано 24 февраля ’17 в 06:54

    ответил 06 июня ’12 в 22:16


      objWB.Cells (rowNum, 201) .EntireRow.Interior. ColorIndex = 6  

    и т. Д.


    Обновление: не понял дату на этом, но подумал, что добавлю это, поскольку это имеет отношение к выбранному ответу.

    В дополнение к Ответ Сиддхарта Роута, поскольку у меня пока недостаточно комментариев для комментариев, вы можете динамически определить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.

      Dim numRows  Как IntegernumRows = Range ("A2", Range ("A1048576"). End (xlUp)). SpecialCells (xlCellTypeConstants) .Cells.Count  

    ответил 17 марта 2015, в 19:56


    Обновление: не понял дату на этом, но подумал, что добавлю это, так как это имеет отношение к выбранному ответу.

    В дополнение к ответу Сиддхарта Роута, поскольку у меня еще недостаточно репутации для комментариев, вы можете динамически вычислить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.

      Dim numRows  Как IntegernumRows = Range ("A2", Range ("A1048576"). End (xlUp)). SpecialCells (xlCellTypeConstants) .Cells.Count  

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

      Sub Highlight () Dim ThisWB As WorkbookDim ThisWS As WorksheetDim rows (0 to 3  ) As IntegerDim test As StringSet ThisWB = ActiveWorkbookSet ThisWS = ThisWB.Sheets ("Sheet1") rows (0) = 6rows (1) = 10rows (2) = 150rows (3) = 201For i = 0 To 3 test = "A"  & rows (i) & ": H" & rows (i) ThisWS.Range (test) .Interior. ColorIndex = 15Next iEnd Sub  

    ответил 28 июня ‘ 16, 19:45


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

      Sub Highlight () Dim ThisWB As WorkbookDim ThisWS As WorksheetDim rows (0 to 3  ) As IntegerDim test As StringSet ThisWB = ActiveWorkbookSet ThisWS = ThisWB.Sheets ("Sheet1") rows (0) = 6rows (1) = 10rows (2) = 150rows (3) = 201For i = 0 To 3 test = "A"  & rows (i) & ": H" & rows (i) ThisWS.Range (test) .Interior.ColorIndex = 15Next iEnd Sub  

    Вы можете добиться того же, используя условное форматирование

    • помещаю список значений в столбец (я использую отдельную вкладку и даю списку имя)
    • в условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
    • прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
    • правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)

    ответил 5 августа 2016 в 14:43


    Вы могли бы добиться того же, используя условное форматирование

    • put list значений в столбце (я использую отдельную вкладку и даю списку имя)
    • при условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
    • прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
    • правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)


    Макрос VBA – выделение Строка для дополнений ИЛИ ячейка для изменений

    Привет всем!

    Хорошо, у меня есть шаблон для другого отдел, который я развиваю. Мне нужно добавить условное форматирование через VBA. Мне удалось найти код на форумах и модифицировать его. Он как есть соответствует одному из двух моих требований, но есть одно изменение, которое я хотел бы (диапазон). Мне просто нужен второй код или модификация этого кода. Я все еще новичок в кодировании Worksheet_Change. Код, который я нашел, работает для «часть 2 ниже»

    Часть 1 – Любая НОВАЯ запись потребует выделения всей строки (я рекомендую оранжевым или желтым … без предпочтений).
    – Диапазон данных – столбцы A – DD
    – Количество строк будет меняться от недели к неделе, поскольку это глобальная книга (поэтому я бы предпочел не указывать конкретный диапазон)
    – Ключевая ячейка, которая будет указывать на запись, в столбце C находится идентификатор сотрудника.
    – Например, сейчас у меня 1377 строк данных
    – Если я добавлю что-то в ячейку A1378 или B1378, моя “Часть 2 “VBA включится и выделит ячейку (цвет # 38) розовым или чем-то еще. Если данные были введены в ячейку C1378, то вся строка (A1378: DD1378) будет выделена желтым (или оранжевым).
    – Я хочу, чтобы сценарий «добавления» запускался изначально
    – Многие из этих ячеек являются формулами в других столбцах, вероятно, что другая ячейка в диапазоне AA: DD, хотя строка была добавлена, может потребовать от пользователя перезаписать ее.
    – В этом случае строка будет желтый (или оранжевый), чтобы указать, что это была добавленная строка, но тогда он также может содержать несколько ячеек lpink для обозначения перезаписанных ячеек

    Часть 2 – отдельные ячейки меняются на розовый (цвет # 38) при изменении.
    – Во второй строке кода, мне бы хотелось это, если диапазон не ограничен
    – Этот процесс существенно растет
    – Расчет заработной платы за две недели имеет в отличии 25000 строк
    – Диапазон может зависеть от того, имеет значение в столбце C
    – Столбец C – это идентификатор сотрудника, который является движущей силой всех транзакций

    1. Private Sub Worksheet_Change (ByVal Целевой как диапазон)
    2. Const WS_RANGE As String = “A2: DD2500”
    3. При ошибке GoTo ws_exit:
    4. Application.EnableEvents = False
    5. Если не пересекается (Target, Me.Range (WS_RANGE)), то ничего не значит
    6. С целью
    7. .Interior.ColorIndex = 38
    8. Завершить на
    9. End If
    10. ws_exit:
    11. Application.EnableEvents = True
    12. End Sub

    Показать больше


    Привет ,

    Может вы публикуете образец файла от 10 до 15 строк … (с анонимными данными …)

    Мне кажется, что весь процесс необходимо пересматривать в свете ваших 650 000 записей в год …


    Карим —-

    Я создал частичный файл … не со всеми столбцами. Я думаю, что попал в колонку AD. Имена, адреса, имя сотрудников, ставки заработной платы … это все фиктивные данные, но они представляют собой тип даты, которая будет заполнена. Большинство типов данных, которые будут отображаться на этом листе, представляют собой числовые значения и суммы в долларах, а около 75% рабочего листа – формулы.. Теперь этот рабочий лист называется Sheet3 (хотя и не в этом примере), а кодовое имя также Sheet3. Я хотел бы иметь возможность использовать кодовое имя, а не имя листа, так как я не могу контролировать, решит ли пользователь переименовать лист.


    Привет, Шерри,

    Прикреплен ваш тестовый файл …

    Быстро добавил щелчок правой кнопкой мыши, чтобы очистить все внутренние цвета …


    Carim,

    Работает отлично. Я скорректировал скрипт для

    1. Target .Row, 30

    , которые у вас есть для моего файла примера до 108 столбцов для моего фактического файла. Он по-прежнему работал отлично. Но потом я понял, что когда люди добавляются, у меня есть сценарий, который копирует формулы во все строки с данными. И это работает отлично … за исключением того, что теперь у меня есть ваш замечательный скрипт выделения, форматирование было перезаписано, потому что мой скрипт “формулы” использует для этого это “Автозаполнение”. Есть ли лучший способ, чтобы этот сценарий мог копировать формулы (первая строка данных всегда – это строка 2, заголовки в строке 1) и копировать полностью вниз? Мне нравится ваш сценарий, и это именно то, что мне нужно. Как и этот скрипт для формул … Мне просто нужен способ, чтобы мой скрипт UpdateFormulas НЕ перезаписывал форматы, созданные вашим выделением. Как я, возможно, уже упоминал, этот шаблон предназначен для другого отдела, поэтому такие вещи должны быть на месте. Ниже мой код для обновления всех формул при добавлении данных. Пожалуйста, простите за грубое кодирование, поскольку я еще новичок.

    1. Sub UpdateFormulas ()
    2. ‘Оптимизация скорости макросов
    3. Application.ScreenUpdating = False
    4. Application.EnableEvents = False
    5. Application.Calculation = xlCalculationManual
    6. ‘Имя листа и расположение столбца, которые нужно удалить
    7. Sheet3.Select
    8. ‘Диапазон ячеек, в которых находятся формулы
    9. ‘ Должен существовать столбец для обозначения формулы.
    10. Диапазон (“I2”) .AutoFill Destination: = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
    11. Range (“AC2”). Назначение автозаполнения: = Range (“AC2: AC” & Cells (Rows.Count, “B”). End (xlUp) .Row)
    12. Range (“AJ2″). Назначение автозаполнения: = Range (” AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
    13. Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL ” & Ячейки (Rows.Count, “B”). End (xlUp) .Row)
    14. Range (“AT2”). Автозаполнение места назначения ция: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
    15. Range (“BH2: CH2”). Назначение автозаполнения: = Диапазон (“BH2: CH” & Cells (Rows.Count, “B”). End (xlUp) .Row)
    16. Range (“CJ2: DD2”). Назначение автозаполнения: = Диапазон («CJ2: DD» и ячейки (Rows.Count, «B»). Конец (xlUp). Строка)
    17. ‘Имя листа и расположение столбца для удаления
    18. Sheet4.Select
    19. ‘Диапазон ячеек, в которых находятся формулы
    20. ‘ Должен существовать столбец для обозначения формулы.
    21. Диапазон (“I2”). Назначение автозаполнения : = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
    22. Range (“AC2”). Назначение автозаполнения: = Range ( «AC2: AC» и ячейки (Rows.Count, «B»). End (xlUp) .Row)
    23. Range («AJ2»). Назначение автозаполнения: = Range («AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
    24. Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL “& Cells ( Rows.Count, “B”). End (xlUp) .Row)
    25. Range (“AT2”). Назначение автозаполнения: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
    26. Range (“BH2: CH2”). Назначение автозаполнения: = Range (“BH2: CH” & Cells (Rows.Count, “B “) .End (xlUp) .Row)
    27. Range (” CJ2: DE2 “). Назначение автозаполнения: = Range (” CJ2: DE “& Cells (Rows.Count,” B “) .End (xlUp) .Row)
    28. ‘активирует лист с определенным именем
    29. ‘Activ Включает вкладку «Основные» (Sheet2)
    30. Sheet2.Activate
    31. ResetSettings:
    32. ‘Сбросить настройки макрооптимизации
    33. Application.EnableEvents = True
    34. Application.Calculation = xlCalculationAutomatic
    35. Application.ScreenUpdating = True
    36. End Sub

    Показать больше

    ПРИМЕЧАНИЕ. Я просто проводил дополнительное тестирование кода выделения “добавить” и заметил кое-что, что я не знаю, сможете ли вы добавить. Если мы добавим Джона Смита, все его данные и формулы, строка будет оранжевой … но если одна ячейка должна быть перезаписана, она все равно должна измениться на розовый (эта одна ячейка), несмотря на то, что строка будет оранжевой. Перезапись отдельных ячеек в основном происходит, когда в ячейке есть формула, которая заменяется значением или другой формулой. Мы должны видеть их визуально, отсюда и розовый цвет. Я должен был это указать. Очевидно, вы не можете знать, о чем я думаю, извините за это.


    Рад слышать, что вы движетесь в правильном направлении …

    Что касается макроса UpdateFormulas … есть несколько возможностей …

    Вы могли бы преобразовать свою базу данных в таблицу

    Однако почему вы копируете из строки 2 полностью вниз?

    Все существующие строки уже обновлены …

    Запуск с последней использованной строки повысит производительность вашего листа …

    Относительно вашего способа добавления новых записей: как это сделано …?


    Мне нужно сохранить вещи в основном в том же формате, поскольку этот шаблон будет использоваться несколькими другими пользователями. В моей компании есть строгие протоколы.. даже глупые вещи. Чтобы преобразовать базу данных в таблицу, мне нужно получить разрешение от «сильных мира сего». Я мелкий подрядчик, поэтому мне сейчас нужно «раскрашивать между строк».

    – Почему я копирую из строки 2 вниз для формул? Честно говоря, потому что я не знаю, как закодировать его для копирования из последней строки, содержащей формулы, вниз. Это был бы лучший способ. Но поскольку я еще новичок, а объем данных постоянно меняется, я просто понятия не имел. Я бы предпочел вставить формулы из последней строки существующей строки формул. Я согласен, начиная с последнего ряда формул была бы лучшая производительность, это сводится к недостатку знаний с моей стороны.
    – Добавляя новые записи, я, честно говоря, не знаю, это не процесс, я полностью знаком с. Я – ОЧЕНЬ подробный процесс расчета заработной платы для государственных контрактов. Существует множество переменных, и иногда расчет формулы требует перезаписи в виде значения или исправленной формулы. Я просмотрел предыдущие книги, и там есть множество выделенных ячеек и строк, которые были раскрашены вручную для этой цели. Это происходит постоянно (и пользователи всегда выбирают ВСЮ строку, а не только 103 фактических столбца в пределах диапазона).

    Моя роль – оптимизировать и автоматизировать процесс. Конечный пользователь тратит так много времени на форматирование, вставку столбцов, копирование и вставку формул из предыдущей книги, и этот список можно продолжить! Выделение измененных ячеек и строк


    Честно говоря … мне вас очень жаль … !!!

    Очень грустно (и почти невероятно …) слышать, что вы не имеете права использовать Excel таким образом, чтобы каждый мог работать более продуктивно …

    Хочу пожелать вам удачи в попытках оптимизировать ваш процесс … в рамках наложенных на вас глупых ограничений …: smash:


    Спасибо, Карим, за вашу помощь. Это очень ценится. И я согласен … Я тоже не мог в это поверить, когда я попытался внести некоторые простые изменения (по крайней мере, я так думал), и был отключен.


    Не стесняйтесь приходить назад на форум … для новых вопросов … надеюсь, с меньшими ограничениями …: wink:


    Карим,
    Большое спасибо! Некоторые вещи требуют одобрения нашей штаб-квартиры в другой стране … и, честно говоря, это просто глупо! Но мне нужна зарплата. И да, я вернусь. Еще раз спасибо за вашу помощь!

    ~~ Шерри


    Карим,

    Надеюсь, вы можете помочь. Был изменен запрос на этот макрос выделения. Код ниже – это то, что вы мне предоставили в последний раз. Мне нужно, чтобы эти макросы выполнялись ТОЛЬКО, когда пользователь делает что-то ВРУЧНУЮ с книгой. Если пользователь запускает макрос для импорта или копирования данных на листы в книге, ничего не должно выделяться. Однако, если пользователь вручную добавляет новую строку в книгу, эта строка (столбцы A-DD) будет выделена оранжевым цветом (индекс цвета 46). Я провел UAT с пользователем сегодня, и мне посоветовали, что пользователь выберет похожую строку и скопирует/вставит эту строку в 1-ю пустую строку, чтобы пользователь вручную изменил любые особенности. В этом случае вся строка (A-DD) должна быть оранжевой, а затем, когда каждая ячейка будет изменена пользователем, только эти ячейки будут розовыми.
    Пользователь копирует запись сотрудника, вставляет в новую строка. Затем меняет имя сотрудника, emp #, дату начала, должность и т. Д. Только те измененные ячейки розового цвета, остальные остаются оранжевыми. Возможно ли это?

    1. Option Explicit
    2. Private Sub Worksheet_Change (ByVal Target As Range)
    3. Если Target.Row = 1, то выйдите из Sub
    4. Dim i As Double
    5. i = ActiveSheet.Cells (Application.Rows.Count , “A”). End (xlUp) .Row
    6. Application.Calculation = xlCalculationManual
    7. Application.EnableEvents = False
    8. Если Target.Row> i Then
    9. Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = 46
    10. ElseIf Target.Row
    11. Target.Interior.ColorIndex = 38 ‘
    12. End If
    13. Application.EnableEvents = True
    14. Application.Calculation = xlCalculationAutomatic
    15. End Sub
    16. Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)
    17. ‘Щелкните правой кнопкой мыши, чтобы очистить цвета
    18. Если Target.Row = 1 Затем выйдите из Sub
    19. Dim i As Double
    20. i = ActiveSheet.Cells (Application.Rows.Count, “A”). End (xlUp) .Row
    21. Application.Calculation = xlCalculationManual
    22. Application.EnableEvents = False
    23. If Target.Row> i Then
    24. Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = xlNone
    25. ElseIf Target.Row
    26. Target.Interior.ColorIndex = xlNone
    27. End If
    28. Application.EnableEvents = True
    29. Application.Calculation = xlCalculationAutomatic
    30. Cancel = False
    31. End Sub

    Показать больше


    Шерри,

    Как вы очень хорошо знаете, есть два типа макросов:

    1. Стандартные макросы

    2. Макросы событий

    Стандарт требует, чтобы пользователь запускал запрос через меню, ярлык или кнопку

    Макрос события запускается действием, выполняемым пользователем

    Итак, самое первое решение, которое вы должны принять, – какой маршрут вы хотите выбрать …

    Затем второе решение связано с тем, что именно вам нужно отслеживать … и, следовательно, выделять …

    Надеюсь, это поможет

    Номер строки самой нижней ячейки, которая использована на листе

    lRws = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
    

    Количество срок можно определить по наличию значений в определенном столбце:

    With ActiveSheet
        lRws = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With
    

    Этими двумя методами можно определить последнюю ячейку, но не всегда. Если последние строки скрыты, они в подсчет не попадут.

    Количество строк пользовательского диапазона:

    lRws = ActiveSheet.UsedRange.Rows.Count
    

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

    With ActiveSheet
        lRws = .UsedRange.Row + .UsedRange.Rows.Count - 1
    End With
    

    Стоит упомянуть и о «большом подводном камне» при использовании UsedRange.Row. Это касается и SpecialCells(xlLastCell).Row (а вот .End(xlUp).Row к этому нечувствителен).

    Часто пользователи форматируют строки с запасом. Или на листе данные, копированные с другого диапазона. Или ниже данных скрыты строки… Учитывается весь пользовательский диапазон, все форматированные строки. Даже те строки, которые удалены, но сохранение изменений еще не произведено. И вместо 10 строк будет определено 10000 )

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

    ‘ ———————-

    С переносом данных тоже не все однозначно. Можно Вырезать/Вставить, Копировать/Вставить. Если расположение данных разное или нужна фильтрация, лучше пользоваться массивами (обработка в памяти и выгрузка на лист результата).

    Понравилась статья? Поделить с друзьями:

    А вот еще интересные статьи:

  • Выделенные области в word
  • Выделенная ячейка в excel в макросе
  • Выделенная часть в excel
  • Выделенная область в excel это
  • Выделение ячейки цветом при условии excel формула если

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии