Содержание
- Выделение активной ячейки, строки или столбца
- Выделение активной ячейки
- Выделение всей строки и столбца, содержащих активную ячейку
- Выделение строки и столбца, содержащих активную ячейку, в текущей области
- Об участнике
- Поддержка и обратная связь
- Выбор ячеек и диапазонов с помощью процедур Visual Basic в Excel
- Выбор ячейки на активном листе
- Выбор ячейки на другом листе в той же книге
- Выбор ячейки на листе в другой книге
- Выбор диапазона ячеек на активном листе
- Выбор диапазона ячеек на другом листе в той же книге
- Выбор диапазона ячеек на листе в другой книге
- Выбор именованного диапазона на активном листе
- Выбор именованного диапазона на другом листе в той же книге
- Выбор именованного диапазона на листе в другой книге
- Выбор ячейки относительно активной ячейки
- Выбор ячейки относительно другой (не активной) ячейки
- Выбор смещения диапазона ячеек из указанного диапазона
- Выбор указанного диапазона и изменение его размера
- Выбор указанного диапазона, его смещение и изменение размера
- Выбор объединения двух или более указанных диапазонов
- Выбор пересечения двух или более указанных диапазонов
- Выбор последней ячейки столбца непрерывных данных
- Выбор пустой ячейки в нижней части столбца непрерывных данных
- Выбор целого диапазона смежных ячеек в столбце
- Как выбрать весь диапазон несмежных ячеек в столбце
- Выбор прямоугольного диапазона ячеек
- Выбор нескольких несмежных столбцов разной длины
- Примечания к примерам
- Выбор и активация ячеек
- Использование метода Select и свойства Selection
- Выбор ячеек на активном листе
- Активация ячейки в выделенном фрагменте
- Поддержка и обратная связь
- Использование VBA для выбора и выделения строк Excel
- Макрос VBA – выделение Строка для дополнений ИЛИ ячейка для изменений
Выделение активной ячейки, строки или столбца
В следующих примерах кода показаны способы выделения активной ячейки или строк и столбцов, содержащих активную ячейку. В этих примерах используется событие SelectionChange объекта Worksheet.
Пример кода предоставил: Том Уртис, Atlas Programming Management
Выделение активной ячейки
В следующем примере кода показано, как удалить цвет во всех ячейках листа, присвоив свойству ColorIndex значение 0, а затем выделить активную ячейку, присвоив свойству ColorIndex значение 8 (бирюзовый).
Выделение всей строки и столбца, содержащих активную ячейку
В следующем примере кода показано, как удалить цвет во всех ячейках листа, присвоив свойству ColorIndex значение 0, а затем выделить всю строку и столбец, содержащие активную ячейку, с помощью свойств EntireRow и EntireColumn.
Выделение строки и столбца, содержащих активную ячейку, в текущей области
В следующем примере кода показано, как удалить цвет во всех ячейках листа, присвоив свойству ColorIndex значение 0, а затем в текущей области выделить строку и столбец, содержащие активную ячейку, используя свойство CurrentRegion объекта Range.
Об участнике
Том Уртис, MVP — основатель компании Atlas Programming Management, создающей полноценные бизнес-решения для Microsoft Office и Excel в Кремниевой долине. Том обладает больше чем 25 годами опыта управления бизнесом и разработки приложений для Microsoft Office, а также является соавтором книги «Holy Macro! It’s 2,500 Excel VBA Examples».
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Выбор ячеек и диапазонов с помощью процедур Visual Basic в Excel
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена. В примерах в этой статье используются методы Visual Basic, перечисленные в следующей таблице.
В примерах в этой статье используются свойства, приведенные в следующей таблице.
Выбор ячейки на активном листе
Чтобы выбрать ячейку D5 на активном листе, можно использовать один из следующих примеров:
Выбор ячейки на другом листе в той же книге
Чтобы выбрать ячейку E6 на другом листе в той же книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать ячейку с помощью метода 1, приведенного выше:
Выбор ячейки на листе в другой книге
Чтобы выбрать ячейку F7 на листе в другой книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать ячейку с помощью метода 1, приведенного выше:
Выбор диапазона ячеек на активном листе
Чтобы выбрать диапазон C2:D10 на активном листе, можно использовать любой из следующих примеров:
Выбор диапазона ячеек на другом листе в той же книге
Чтобы выбрать диапазон D3:E11 на другом листе в той же книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать диапазон с помощью метода 4, приведенного выше:
Выбор диапазона ячеек на листе в другой книге
Чтобы выбрать диапазон E4:F12 на листе в другой книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать диапазон с помощью метода 4, приведенного выше:
Выбор именованного диапазона на активном листе
Чтобы выбрать именованный диапазон «Тест» на активном листе, можно использовать один из следующих примеров:
Выбор именованного диапазона на другом листе в той же книге
Чтобы выбрать именованный диапазон «Тест» на другом листе в той же книге, можно использовать следующий пример:
Или можно активировать лист, а затем использовать метод 7 выше, чтобы выбрать именованный диапазон:
Выбор именованного диапазона на листе в другой книге
Чтобы выбрать именованный диапазон «Тест» на листе в другой книге, можно использовать следующий пример:
Или можно активировать лист, а затем использовать метод 7 выше, чтобы выбрать именованный диапазон:
Выбор ячейки относительно активной ячейки
Чтобы выбрать ячейку с пятью строками ниже и четырьмя столбцами слева от активной ячейки, можно использовать следующий пример:
Чтобы выбрать ячейку с двумя строками выше и тремя столбцами справа от активной ячейки, можно использовать следующий пример:
При попытке выбрать ячейку, которая находится вне листа, произойдет ошибка. Первый пример, показанный выше, вернет ошибку, если активная ячейка находится в столбцах A–D, так как перемещение четырех столбцов влево приведет к переходу активной ячейки на недопустимый адрес ячейки.
Выбор ячейки относительно другой (не активной) ячейки
Чтобы выбрать ячейку с пятью строками ниже и четырьмя столбцами справа от ячейки C7, можно использовать один из следующих примеров:
Выбор смещения диапазона ячеек из указанного диапазона
Чтобы выбрать диапазон ячеек того же размера, что и именованный диапазон «Тест», но сдвинув четыре строки вниз и три столбца вправо, можно использовать следующий пример:
Если именованный диапазон находится на другом (не активном) листе, сначала активируйте этот лист, а затем выберите диапазон, используя следующий пример:
Выбор указанного диапазона и изменение его размера
Чтобы выбрать именованный диапазон «База данных», а затем расширить выделение на пять строк, можно использовать следующий пример:
Выбор указанного диапазона, его смещение и изменение размера
Чтобы выбрать диапазон из четырех строк ниже и трех столбцов справа от именованного диапазона «База данных» и включить две строки и один столбец больше именованного диапазона, можно использовать следующий пример:
Выбор объединения двух или более указанных диапазонов
Чтобы выбрать объединение (то есть объединенную область) двух именованных диапазонов «Тест» и «Образец», можно использовать следующий пример:
Значение , чтобы оба диапазона были на одном листе для работы в этом примере. Обратите внимание, что метод Union не работает на разных листах. Например, эта строка работает нормально.
возвращает сообщение об ошибке:
Сбой метода Union класса приложения
Выбор пересечения двух или более указанных диапазонов
Чтобы выбрать пересечение двух именованных диапазонов «Тест» и «Образец», можно использовать следующий пример:
Обратите внимание, что для работы в этом примере оба диапазона должны находиться на одном листе.
Примеры 17–21 в этой статье относятся к следующему примеру набора данных. В каждом примере указывается диапазон ячеек в выборке данных, которые будут выбраны.
Выбор последней ячейки столбца непрерывных данных
Чтобы выбрать последнюю ячейку в непрерывном столбце, используйте следующий пример:
При использовании этого кода с образцом таблицы будет выбрана ячейка A4.
Выбор пустой ячейки в нижней части столбца непрерывных данных
Чтобы выбрать ячейку под диапазоном смежных ячеек, используйте следующий пример:
При использовании этого кода с образцом таблицы будет выбрана ячейка A5.
Выбор целого диапазона смежных ячеек в столбце
Чтобы выбрать диапазон смежных ячеек в столбце, используйте один из следующих примеров:
При использовании этого кода с образцом таблицы будут выделены ячейки A1–A4.
Как выбрать весь диапазон несмежных ячеек в столбце
Чтобы выбрать диапазон несмежных ячеек, используйте один из следующих примеров:
При использовании этого кода с образцом таблицы будут выделены ячейки A1–A6.
Выбор прямоугольного диапазона ячеек
Чтобы выбрать прямоугольный диапазон ячеек вокруг ячейки, используйте метод CurrentRegion. Диапазон, выбранный методом CurrentRegion, — это область, ограниченная любым сочетанием пустых строк и пустых столбцов. Ниже приведен пример использования метода CurrentRegion.
Этот код будет выбирать ячейки A1–C4. Ниже перечислены другие примеры выбора того же диапазона ячеек.
В некоторых случаях может потребоваться выбрать ячейки A1–C6. В этом примере метод CurrentRegion не будет работать из-за пустой строки в строке 5. В следующих примерах будут выделены все ячейки:
Выбор нескольких несмежных столбцов разной длины
Чтобы выбрать несколько несмежных столбцов разной длины, используйте следующий пример таблицы и макроса:
При использовании этого кода с образцом таблицы будут выбраны ячейки A1:A3 и C1:C6.
Примечания к примерам
Свойство ActiveSheet обычно можно опустить, так как оно подразумевается, если конкретный лист не называется. Например, вместо
вы можете использовать:
Свойство ActiveWorkbook также обычно можно опустить. Если не указано имя конкретной книги, она подразумевается.
При использовании метода Application.Goto, если вы хотите использовать два метода Cells в методе Range, если указанный диапазон находится на другом (не активном) листе, необходимо каждый раз включать объект Sheets. Например:
Для любого элемента в кавычках (например, именованного диапазона Test) можно также использовать переменную, значение которой является текстовой строкой. Например, вместо
Источник
Выбор и активация ячеек
В Microsoft Excel обычно выбирается ячейка или ячейки, а затем выполняется действие, например форматирование ячеек или ввод значений. В Visual Basic обычно не требуется выбирать ячейки перед их изменением.
Например, чтобы ввести формулу в ячейку D6 с помощью Visual Basic, не нужно выбирать диапазон D6. Просто возвратите объект Range для этой ячейки, а затем присвойте свойству Formula нужную формулу, как показано в следующем примере.
Дополнительные сведения и примеры использования других методов для управления ячейками без их выбора см. в разделе Практическое руководство. Ссылка на ячейки и диапазоны.
Использование метода Select и свойства Selection
Метод Select активирует листы и объекты на листах; свойство Selection возвращает объект, представляющий текущее выделение на активном листе в активной книге. Перед использованием свойства Selection необходимо активировать книгу, активировать или выбрать лист, а затем выбрать диапазон (или другой объект) с помощью метода Select.
Средство записи макросов часто создает макрос, использующий метод Select и свойство Selection. Следующая процедура Sub была создана с помощью средства записи макросов и показывает, как Select и Selection работают вместе.
В следующем примере выполняется та же задача без активации или выбора листа или ячеек.
Выбор ячеек на активном листе
Если для выбора ячеек используется метод Select, имейте в виду, что Select работает только на активном листе. Если выполнить процедуру Sub из модуля, метод Select завершится ошибкой, если процедура не активирует лист перед использованием метода Select для диапазона ячеек. Например, следующая процедура копирует строку из Листа1 в Лист2 в активной книге.
Активация ячейки в выделенном фрагменте
Используйте метод Activate для активации ячейки в выделенном фрагменте. Активной может быть только одна ячейка, даже если выделен диапазон ячеек. Следующая процедура выделяет диапазон и активирует ячейку в диапазоне, не изменяя выделенный фрагмент.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Использование VBA для выбора и выделения строк Excel
Как указать Excel выделять строки по их номеру. Например, скажем, я хотел выделить строки 6, 10, 150, 201. Спасибо.
Вот еще один, основанный на .EntireRow.Interior.ColorIndex
Mote. ‘не ограничивает вас вводом номеров строк, но дает пользователю гибкость в выборе строк во время выполнения.
FOLLOWUP
Есть ли способ написать макрос для чтения номеров строк из список и выделить строки?
Да, есть способ. Скажем, список в ячейках от A1 до A10, тогда вы можете использовать этот код
В качестве альтернативы ответу Motes вы можете использовать условное форматирование.
Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …
Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)
В качестве альтернативы ответу Моутса вы можете использовать условное форматирование.
Например: выберите A1: J500, Условное форматирование >> Новое правило >> Использовать формулу …
Для формулы введите: = OR (ROW () = 6, ROW () = 10, ROW () = 150, ROW () = 201)
Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, а затем очистить его, чтобы сделать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:
Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:
Добавление в строку нескольких выберите:
- Запись макроса
- Просмотр версии Excel
- Используйте/редактируйте нужный код
Для базового кода VBA вы всегда можете начать запись макроса, выполнить действие, остановить запись, посмотреть, какой код был сгенерирован, и затем очистите это, чтобы делать то, что вы хотите. Например, запись действия выделения строки (установка значения Interior.Color) дает вам:
Команды выбора и посторонние внутренние свойства могут быть удалены дает вам:
Добавление в строку нескольких выберите:
- Запись макроса
- Просмотр версии Excel
- Используйте/редактируйте нужный код
Обновление: не понял дату на этом, но подумал, что добавлю это, поскольку это имеет отношение к выбранному ответу.
В дополнение к Ответ Сиддхарта Роута, поскольку у меня пока недостаточно комментариев для комментариев, вы можете динамически определить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.
Обновление: не понял дату на этом, но подумал, что добавлю это, так как это имеет отношение к выбранному ответу.
В дополнение к ответу Сиддхарта Роута, поскольку у меня еще недостаточно репутации для комментариев, вы можете динамически вычислить, сколько строк на вашем листе с этими двумя строками. xlCellTypeConstants можно изменить на другую константу XlCellType, которая вам нужна, а диапазон всегда можно изменить в соответствии с таблицей.
Извините, если он не такой краткий или элегантный, как другие ответы, но он выполняет свою работу. Когда я писал код для своего собственного приложения, мне нужно было перебрать мой код в цикле. Кроме того, вместо выделения всей строки мне нужно было выделить только часть строк.
Извините, если он не такой краткий или элегантный, как другие ответы, но он выполняет свою работу. Когда я писал код для своего собственного приложения, мне нужно было перебрать мой код в цикле. Кроме того, вместо выделения всей строки мне нужно было выделить только часть строк.
Вы можете добиться того же, используя условное форматирование
- помещаю список значений в столбец (я использую отдельную вкладку и даю списку имя)
- в условном форматировании – Новое правило – «использовать формулу для определения с ячейками для форматирования»
- прочтите эту статью http://www.howtogeek.com/howto/45670/how-to-highlight-a-row-in-excel-using-conditional-formatting/
правило использует vlookup в формуле- = $ A2 = VLOOKUP ($ A2, list, 1, FALSE)
Вы могли бы добиться того же, используя условное форматирование
- 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 – это идентификатор сотрудника, который является движущей силой всех транзакций
- Private Sub Worksheet_Change (ByVal Целевой как диапазон)
- Const WS_RANGE As String = “A2: DD2500”
- При ошибке GoTo ws_exit:
- Application.EnableEvents = False
- Если не пересекается (Target, Me.Range (WS_RANGE)), то ничего не значит
- С целью
- .Interior.ColorIndex = 38
- Завершить на
- End If
- ws_exit:
- Application.EnableEvents = True
- End Sub
Может вы публикуете образец файла от 10 до 15 строк … (с анонимными данными …)
Мне кажется, что весь процесс необходимо пересматривать в свете ваших 650 000 записей в год …
Я создал частичный файл … не со всеми столбцами. Я думаю, что попал в колонку AD. Имена, адреса, имя сотрудников, ставки заработной платы … это все фиктивные данные, но они представляют собой тип даты, которая будет заполнена. Большинство типов данных, которые будут отображаться на этом листе, представляют собой числовые значения и суммы в долларах, а около 75% рабочего листа – формулы.. Теперь этот рабочий лист называется Sheet3 (хотя и не в этом примере), а кодовое имя также Sheet3. Я хотел бы иметь возможность использовать кодовое имя, а не имя листа, так как я не могу контролировать, решит ли пользователь переименовать лист.
Прикреплен ваш тестовый файл …
Быстро добавил щелчок правой кнопкой мыши, чтобы очистить все внутренние цвета …
Работает отлично. Я скорректировал скрипт для
, которые у вас есть для моего файла примера до 108 столбцов для моего фактического файла. Он по-прежнему работал отлично. Но потом я понял, что когда люди добавляются, у меня есть сценарий, который копирует формулы во все строки с данными. И это работает отлично … за исключением того, что теперь у меня есть ваш замечательный скрипт выделения, форматирование было перезаписано, потому что мой скрипт “формулы” использует для этого это “Автозаполнение”. Есть ли лучший способ, чтобы этот сценарий мог копировать формулы (первая строка данных всегда – это строка 2, заголовки в строке 1) и копировать полностью вниз? Мне нравится ваш сценарий, и это именно то, что мне нужно. Как и этот скрипт для формул … Мне просто нужен способ, чтобы мой скрипт UpdateFormulas НЕ перезаписывал форматы, созданные вашим выделением. Как я, возможно, уже упоминал, этот шаблон предназначен для другого отдела, поэтому такие вещи должны быть на месте. Ниже мой код для обновления всех формул при добавлении данных. Пожалуйста, простите за грубое кодирование, поскольку я еще новичок.
- Sub UpdateFormulas ()
- ‘Оптимизация скорости макросов
- Application.ScreenUpdating = False
- Application.EnableEvents = False
- Application.Calculation = xlCalculationManual
- ‘Имя листа и расположение столбца, которые нужно удалить
- Sheet3.Select
- ‘Диапазон ячеек, в которых находятся формулы
- ‘ Должен существовать столбец для обозначения формулы.
- Диапазон (“I2”) .AutoFill Destination: = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AC2”). Назначение автозаполнения: = Range (“AC2: AC” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AJ2″). Назначение автозаполнения: = Range (” AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
- Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL ” & Ячейки (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AT2”). Автозаполнение места назначения ция: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“BH2: CH2”). Назначение автозаполнения: = Диапазон (“BH2: CH” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“CJ2: DD2”). Назначение автозаполнения: = Диапазон («CJ2: DD» и ячейки (Rows.Count, «B»). Конец (xlUp). Строка)
- ‘Имя листа и расположение столбца для удаления
- Sheet4.Select
- ‘Диапазон ячеек, в которых находятся формулы
- ‘ Должен существовать столбец для обозначения формулы.
- Диапазон (“I2”). Назначение автозаполнения : = Range (“I2: I” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“AC2”). Назначение автозаполнения: = Range ( «AC2: AC» и ячейки (Rows.Count, «B»). End (xlUp) .Row)
- Range («AJ2»). Назначение автозаполнения: = Range («AJ2: AJ “& Cells (Rows.Count,” B “). End (xlUp) .Row)
- Range (” AL2 “). Назначение автозаполнения: = Range (” AL2: AL “& Cells ( Rows.Count, “B”). End (xlUp) .Row)
- Range (“AT2”). Назначение автозаполнения: = Range (“AT2: AT” & Cells (Rows.Count, “B”). End (xlUp) .Row)
- Range (“BH2: CH2”). Назначение автозаполнения: = Range (“BH2: CH” & Cells (Rows.Count, “B “) .End (xlUp) .Row)
- Range (” CJ2: DE2 “). Назначение автозаполнения: = Range (” CJ2: DE “& Cells (Rows.Count,” B “) .End (xlUp) .Row)
- ‘активирует лист с определенным именем
- ‘Activ Включает вкладку «Основные» (Sheet2)
- Sheet2.Activate
- ResetSettings:
- ‘Сбросить настройки макрооптимизации
- Application.EnableEvents = True
- Application.Calculation = xlCalculationAutomatic
- Application.ScreenUpdating = True
- End Sub
ПРИМЕЧАНИЕ. Я просто проводил дополнительное тестирование кода выделения “добавить” и заметил кое-что, что я не знаю, сможете ли вы добавить. Если мы добавим Джона Смита, все его данные и формулы, строка будет оранжевой … но если одна ячейка должна быть перезаписана, она все равно должна измениться на розовый (эта одна ячейка), несмотря на то, что строка будет оранжевой. Перезапись отдельных ячеек в основном происходит, когда в ячейке есть формула, которая заменяется значением или другой формулой. Мы должны видеть их визуально, отсюда и розовый цвет. Я должен был это указать. Очевидно, вы не можете знать, о чем я думаю, извините за это.
Рад слышать, что вы движетесь в правильном направлении …
Что касается макроса UpdateFormulas … есть несколько возможностей …
Вы могли бы преобразовать свою базу данных в таблицу
Однако почему вы копируете из строки 2 полностью вниз?
Все существующие строки уже обновлены …
Запуск с последней использованной строки повысит производительность вашего листа …
Относительно вашего способа добавления новых записей: как это сделано …?
Мне нужно сохранить вещи в основном в том же формате, поскольку этот шаблон будет использоваться несколькими другими пользователями. В моей компании есть строгие протоколы.. даже глупые вещи. Чтобы преобразовать базу данных в таблицу, мне нужно получить разрешение от «сильных мира сего». Я мелкий подрядчик, поэтому мне сейчас нужно «раскрашивать между строк».
– Почему я копирую из строки 2 вниз для формул? Честно говоря, потому что я не знаю, как закодировать его для копирования из последней строки, содержащей формулы, вниз. Это был бы лучший способ. Но поскольку я еще новичок, а объем данных постоянно меняется, я просто понятия не имел. Я бы предпочел вставить формулы из последней строки существующей строки формул. Я согласен, начиная с последнего ряда формул была бы лучшая производительность, это сводится к недостатку знаний с моей стороны.
– Добавляя новые записи, я, честно говоря, не знаю, это не процесс, я полностью знаком с. Я – ОЧЕНЬ подробный процесс расчета заработной платы для государственных контрактов. Существует множество переменных, и иногда расчет формулы требует перезаписи в виде значения или исправленной формулы. Я просмотрел предыдущие книги, и там есть множество выделенных ячеек и строк, которые были раскрашены вручную для этой цели. Это происходит постоянно (и пользователи всегда выбирают ВСЮ строку, а не только 103 фактических столбца в пределах диапазона).
Моя роль – оптимизировать и автоматизировать процесс. Конечный пользователь тратит так много времени на форматирование, вставку столбцов, копирование и вставку формул из предыдущей книги, и этот список можно продолжить! Выделение измененных ячеек и строк
Честно говоря … мне вас очень жаль … .
Очень грустно (и почти невероятно …) слышать, что вы не имеете права использовать Excel таким образом, чтобы каждый мог работать более продуктивно …
Хочу пожелать вам удачи в попытках оптимизировать ваш процесс … в рамках наложенных на вас глупых ограничений …: smash:
Спасибо, Карим, за вашу помощь. Это очень ценится. И я согласен … Я тоже не мог в это поверить, когда я попытался внести некоторые простые изменения (по крайней мере, я так думал), и был отключен.
Не стесняйтесь приходить назад на форум … для новых вопросов … надеюсь, с меньшими ограничениями …: wink:
Карим,
Большое спасибо! Некоторые вещи требуют одобрения нашей штаб-квартиры в другой стране … и, честно говоря, это просто глупо! Но мне нужна зарплата. И да, я вернусь. Еще раз спасибо за вашу помощь!
Надеюсь, вы можете помочь. Был изменен запрос на этот макрос выделения. Код ниже – это то, что вы мне предоставили в последний раз. Мне нужно, чтобы эти макросы выполнялись ТОЛЬКО, когда пользователь делает что-то ВРУЧНУЮ с книгой. Если пользователь запускает макрос для импорта или копирования данных на листы в книге, ничего не должно выделяться. Однако, если пользователь вручную добавляет новую строку в книгу, эта строка (столбцы A-DD) будет выделена оранжевым цветом (индекс цвета 46). Я провел UAT с пользователем сегодня, и мне посоветовали, что пользователь выберет похожую строку и скопирует/вставит эту строку в 1-ю пустую строку, чтобы пользователь вручную изменил любые особенности. В этом случае вся строка (A-DD) должна быть оранжевой, а затем, когда каждая ячейка будет изменена пользователем, только эти ячейки будут розовыми.
Пользователь копирует запись сотрудника, вставляет в новую строка. Затем меняет имя сотрудника, emp #, дату начала, должность и т. Д. Только те измененные ячейки розового цвета, остальные остаются оранжевыми. Возможно ли это?
- Option Explicit
- Private Sub Worksheet_Change (ByVal Target As Range)
- Если Target.Row = 1, то выйдите из Sub
- Dim i As Double
- i = ActiveSheet.Cells (Application.Rows.Count , “A”). End (xlUp) .Row
- Application.Calculation = xlCalculationManual
- Application.EnableEvents = False
- Если Target.Row> i Then
- Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = 46
- ElseIf Target.Row
- Target.Interior.ColorIndex = 38 ‘
- End If
- Application.EnableEvents = True
- Application.Calculation = xlCalculationAutomatic
- End Sub
- Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)
- ‘Щелкните правой кнопкой мыши, чтобы очистить цвета
- Если Target.Row = 1 Затем выйдите из Sub
- Dim i As Double
- i = ActiveSheet.Cells (Application.Rows.Count, “A”). End (xlUp) .Row
- Application.Calculation = xlCalculationManual
- Application.EnableEvents = False
- If Target.Row> i Then
- Range (Cells (Target.Row, 1), Cells (Target.Row, 108)). Interior.ColorIndex = xlNone
- ElseIf Target.Row
- Target.Interior.ColorIndex = xlNone
- End If
- Application.EnableEvents = True
- Application.Calculation = xlCalculationAutomatic
- Cancel = False
- End Sub
Как вы очень хорошо знаете, есть два типа макросов:
1. Стандартные макросы
2. Макросы событий
Стандарт требует, чтобы пользователь запускал запрос через меню, ярлык или кнопку
Макрос события запускается действием, выполняемым пользователем
Итак, самое первое решение, которое вы должны принять, – какой маршрут вы хотите выбрать …
Затем второе решение связано с тем, что именно вам нужно отслеживать … и, следовательно, выделять …
Источник
Mehanik |
|
1 |
|
27.12.2007, 18:03. Показов 13987. Ответов 5
Необходимо найти нужный текст в одной из ячеек Excel — это просто, |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
27.12.2007, 18:03 |
Ответы с готовыми решениями: Как выделить всю текущую строку в Excel?
Подскажите, как решить задачу: В ячейке А1 введено значение 10 Ячейки, содержащие положительные числа, выделить голубым, отрицательные – красным, нулевые – зелёным (Excel) 5 |
0 / 0 / 0 Регистрация: 17.08.2007 Сообщений: 539 |
|
27.12.2007, 18:17 |
2 |
А еще зовешься Механиком! Rows(‘4:4’).Select — выделяет строку под номером 4 Вот тебе удочка: Tools->Macro->Record New Macro. Потом сделай все ручками и просмотри код записанного макроса. Удачи!
0 |
Mehanik |
|
09.01.2008, 09:03 |
3 |
Все замечательно, толькло маленький нюанс, я зарание не знаю координат ячейки. |
AGZ 0 / 0 / 0 Регистрация: 12.08.2007 Сообщений: 7 |
||||
10.01.2008, 13:21 |
4 |
|||
0 |
M.H.Cobra 0 / 0 / 0 Регистрация: 27.11.2007 Сообщений: 23 |
||||||||
10.01.2008, 15:17 |
5 |
|||||||
Если переменный диапазон то:
а если именно всю строку,
Успехов.
0 |
3 / 3 / 0 Регистрация: 16.01.2008 Сообщений: 359 |
|
30.04.2008, 11:35 |
6 |
ну вы блин даете!!!! особенно прикольно смотриться алгоритм предложенный AGZ-ом.А все гораздо проще: тоже справедливо и для столбцов (EntireColumn)
1 |
How can I tell Excel to highlight rows by their row number. For instance, let’s say I wanted row 6, 10, 150, 201 highlighted. Thanks.
asked Jun 6, 2012 at 22:12
Here is another one based on Mote’s .EntireRow.Interior.ColorIndex
This one doesn’t restrict you to enter the row numbers but gives the user the flexibility to choose the rows at runtime.
Option Explicit
Sub Sample()
Dim Ret As Range
On Error Resume Next
Set Ret = Application.InputBox("Please select the rows that you would like to color", "Color Rows", Type:=8)
On Error GoTo 0
If Not Ret Is Nothing Then Ret.EntireRow.Interior.ColorIndex = 6
End Sub
FOLLOWUP
Is there a way to write the macro to read the row numbers from a list and highlight the rows?
Yes there is a way. Let’s say the list in Cell A1 to A10 then you can use this code
Option Explicit
Sub Sample()
Dim i As Long, sh As Worksheet
On Error GoTo Whoa
Application.ScreenUpdating = False
'~~> Set this to the sheet where the rows need to be colored
Set sh = Sheets("Sheet2")
'~~> Change Sheet1 to the sheet which has the list
With Sheets("Sheet1")
For i = 1 To 10
If Not Len(Trim(.Range("A" & i).Value)) = 0 And _
IsNumeric(.Range("A" & i).Value) Then _
sh.Rows(.Range("A" & i).Value).Interior.ColorIndex = 3 '<~~ Red
Next i
End With
LetsContinue:
Application.ScreenUpdating = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Reafidy
8,2505 gold badges49 silver badges81 bronze badges
answered Jun 6, 2012 at 23:25
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges
2
As an alternative to Motes’ answer, you can use conditional formatting.
Eg: select A1:J500, Conditional formatting >> New rule >> Use a formula…
For the formula enter: =OR(ROW()=6, ROW()=10, ROW()=150, ROW()=201)
answered Jun 6, 2012 at 22:38
Tim WilliamsTim Williams
150k8 gold badges96 silver badges124 bronze badges
0
For basic VBA code, you can always start recording a macro, perform the action, stop recording, look at what code was generated, and then clean that up to do what you want. For example, recording the action of highlighting a row (setting the value of Interior.Color) gives you:
Rows("13:13").Select
Range("C13").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
The selection commands and extraneous Interior properties can be removed giving you:
Rows("13:13").Interior.Color = 65535
Adding in the row multi-select:
Rows("6:6,10:10,150:150,201:201").Interior.Color = 65535
Summary:
- Record macro
- View Excel’s version
- Use/Edit what code you need
answered Jun 6, 2012 at 22:36
Steve KonvesSteve Konves
2,6283 gold badges24 silver badges44 bronze badges
1
objWB.Cells(rowNum,201).EntireRow.Interior.ColorIndex = 6
etc
answered Jun 6, 2012 at 22:16
MotomotesMotomotes
3,8941 gold badge25 silver badges24 bronze badges
1
Update: Didn’t realize the date on this, but thought I’d add this in since it was relevant to the chosen answer.
In addition to Siddharth Rout’s answer, since I don’t have enough rep to comment yet, you can dynamically figure out how many rows there are in your worksheet with these two lines. xlCellTypeConstants
could be changed to another XlCellType constant that you need, and the range can always be changed to accommodate to your spreadsheet.
Dim numRows As Integer
numRows = Range("A2", Range("A1048576").End(xlUp)).SpecialCells(xlCellTypeConstants).Cells.Count
answered Mar 17, 2015 at 19:56
KelsiusKelsius
4132 gold badges5 silver badges19 bronze badges
Sorry if it is not as concise or elegant as other answers, but it gets the job done. When I was writing code for my own application I needed to loop through my code. Also, instead of highlighting the entire row, I only needed to highlight a portion of the rows.
Sub Highlight()
Dim ThisWB As Workbook
Dim ThisWS As Worksheet
Dim rows(0 To 3) As Integer
Dim test As String
Set ThisWB = ActiveWorkbook
Set ThisWS = ThisWB.Sheets("Sheet1")
rows(0) = 6
rows(1) = 10
rows(2) = 150
rows(3) = 201
For i = 0 To 3
test = "A" & rows(i) & ":H" & rows(i)
ThisWS.Range(test).Interior.ColorIndex = 15
Next i
End Sub
answered Jun 28, 2016 at 19:45
title | ms.prod | ms.assetid | ms.date |
---|---|---|---|
Highlight the Active Cell, Row, or Column |
excel |
51a30ffb-77f2-4bd7-8eb6-b6781dc55d43 |
06/08/2017 |
Highlight the Active Cell, Row, or Column
The following code examples show ways to highlight the active cell or the rows and columns that contain the active cell. These examples use the SelectionChange event of the Worksheet object.
Sample code provided by: Tom Urtis, Atlas Programming Management
Highlighting the Active Cell
The following code example clears the color in all the cells on the worksheet by setting the ColorIndex property equal to 0, and then highlights the active cell by setting the ColorIndex property equal to 8 (Turquoise).
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.ScreenUpdating = False ' Clear the color of all the cells Cells.Interior.ColorIndex = 0 ' Highlight the active cell Target.Interior.ColorIndex = 8 Application.ScreenUpdating = True End Sub
Highlighting the Entire Row and Column that Contain the Active Cell
The following code example clears the color in all the cells on the worksheet by setting the ColorIndex property equal to 0, and then highlights the entire row and column that contain the active cell by using the EntireRow and EntireColumn properties.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub Application.ScreenUpdating = False ' Clear the color of all the cells Cells.Interior.ColorIndex = 0 With Target ' Highlight the entire row and column that contain the active cell .EntireRow.Interior.ColorIndex = 8 .EntireColumn.Interior.ColorIndex = 8 End With Application.ScreenUpdating = True End Sub
Highlighting the Row and Column that Contain the Active Cell, Within the Current Region
The following code example clears the color in all the cells on the worksheet by setting the ColorIndex property equal to 0, and then highlights the row and column that contain the active cell, within the current region by using the CurrentRegion property of the Range object.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Clear the color of all the cells Cells.Interior.ColorIndex = 0 If IsEmpty(Target) Or Target.Cells.Count > 1 Then Exit Sub Application.ScreenUpdating = False With ActiveCell ' Highlight the row and column that contain the active cell, within the current region Range(Cells(.Row, .CurrentRegion.Column), Cells(.Row, .CurrentRegion.Columns.Count + .CurrentRegion.Column - 1)).Interior.ColorIndex = 8 Range(Cells(.CurrentRegion.Row, .Column), Cells(.CurrentRegion.Rows.Count + .CurrentRegion.Row - 1, .Column)).Interior.ColorIndex = 8 End With Application.ScreenUpdating = True End Sub
About the Contributor
MVP Tom Urtis is the founder of Atlas Programming Management, a full-service Microsoft Office and Excel business solutions company in Silicon Valley. Tom has over 25 years of experience in business management and developing Microsoft Office applications, and is the coauthor of «Holy Macro! It’s 2,500 Excel VBA Examples.»
! Знаю ячейку, а как выделить всю строку?
- GAL
- Обычный пользователь
-
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
! Знаю ячейку, а как выделить всю строку?
Привет!
Люди, подскажите, пожалуйста..
Как выделить строку если я знаю ячейку в этой строке?
Заранее большое спасибо.
- uhm
- Продвинутый гуру
-
- Сообщения: 1597
- Зарегистрирован: 02.12.2004 (Чт) 15:21
uhm » 06.04.2005 (Ср) 10:38
Rows(номер_строки).Select
Если в строке есть ячейки, объединенные с другими строками, выделится несколько строк.
- GAL
- Обычный пользователь
-
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
GAL » 06.04.2005 (Ср) 10:49
Я не знаю номер строки.
Я немогу явно указать номер этой строки.
У меня в макросе запускается поиск, нахожу ячейку с таким-то содержимым и мне нужно выделить строку содержащую эту ячейку.
Есть такая возможность?
- GAL
- Обычный пользователь
-
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
GAL » 06.04.2005 (Ср) 10:52
Я незнаю номер строки.
Я немогу указать его явно.
У меня макрос ищет ячейку с таким-то содержимым и когда найдет мне нужно выделить строку содержащую эту ячейку.
Есть такая возможность?
- uhm
- Продвинутый гуру
-
- Сообщения: 1597
- Зарегистрирован: 02.12.2004 (Чт) 15:21
uhm » 06.04.2005 (Ср) 10:53
Да, если x — это твоя найденная ячейка, то она содержится в столбце x.Column и в строке x.Row. Соответственно, можешь выделить строку так:
Rows(x.Row).Select
- GAL
- Обычный пользователь
-
- Сообщения: 69
- Зарегистрирован: 05.11.2004 (Пт) 15:57
GAL » 06.04.2005 (Ср) 11:03
Да, так получилось.
Спасибо uhm!
- GSerg
- Шаман
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 06.04.2005 (Ср) 12:51
x.entirerow.select
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2