Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.
Очень удобный инструмент Excel для проверки введенных данных. Повысить комфорт работы с данными позволяют возможности выпадающих списков: подстановка данных, отображение данных другого листа или файла, наличие функции поиска и зависимости.
Создание раскрывающегося списка
Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».
Ввести значения, из которых будет складываться выпадающий список, можно разными способами:
- Вручную через «точку-с-запятой» в поле «Источник».
- Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
- Назначить имя для диапазона значений и в поле источник вписать это имя.
Любой из вариантов даст такой результат.
Выпадающий список в Excel с подстановкой данных
Необходимо сделать раскрывающийся список со значениями из динамического диапазона. Если вносятся изменения в имеющийся диапазон (добавляются или удаляются данные), они автоматически отражаются в раскрывающемся списке.
- Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
- Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
- Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:
Протестируем. Вот наша таблица со списком на одном листе:
Добавим в таблицу новое значение «елка».
Теперь удалим значение «береза».
Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.
Теперь сделаем так, чтобы можно было вводить новые значения прямо в ячейку с этим списком. И данные автоматически добавлялись в диапазон.
- Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
- Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
- Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
- Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
- Сохраняем, установив тип файла «с поддержкой макросов».
- Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».
Private Sub Worksheet_Change(ByVal Target As Range) Dim lReply As Long If Target.Cells.Count > 1 Then Exit Sub If Target.Address = "$C$2" Then If IsEmpty(Target) Then Exit Sub If WorksheetFunction.CountIf(Range("Деревья"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("Деревья").Cells(Range("Деревья").Rows.Count + 1, 1) = Target End If End If End If End Sub
Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».
Нажмем «Да» и добавиться еще одна строка со значением «баобаб».
Выпадающий список в Excel с данными с другого листа/файла
Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.
- Делаем активной ячейку, куда хотим поместить раскрывающийся список.
- Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).
Имя файла, из которого берется информация для списка, заключено в квадратные скобки. Этот файл должен быть открыт. Если книга с нужными значениями находится в другой папке, нужно указывать путь полностью.
Как сделать зависимые выпадающие списки
Возьмем три именованных диапазона:
Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.
- Создадим первый выпадающий список, куда войдут названия диапазонов.
- Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
- Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
- Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
- Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
- Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.
- На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
- Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
- Жмем «Свойства» – открывается перечень настроек.
- Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.
Выбор нескольких значений из выпадающего списка Excel
Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("Е2:Е9")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset(0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("Н2:К2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset(1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
newVal = Target
Application.Undo
oldval = Target
If Len(oldval) <> 0 And oldval <> newVal Then
Target = Target & "," & newVal
Else
Target = newVal
End If
If Len(newVal) = 0 Then Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.
Выпадающий список с поиском
Скачать пример выпадающего списка
При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.
Ранее в публикациях рассказывалось о том, как создается выпадающий список в ячейках для упрощения внесения данных.
Ссылка на описания метода создания связанного выпадающего списка ниже:
Как сделать связанный выпадающий список в «Эксель», зависящий от значения в соседней ячейке.
В данной публикации описана процедура создания выпадающих списков, которые записывают в ячейки по нескольку значений.
Для начала следует создать обыкновенный выпадающий список.
Для этого необходимо:
- Войти во вкладку «Данные»;
- Выбрать опцию «Проверка данных»;
- Выбрать «Список»;
- Указать диапазон, из которого будет выбираться выпадающий список или создать список прямо в появившемся поле через знак «;».
После этой процедуры следует записать макрос в документ.
Для записи макроса следует:
- Открыть вкладку «Разработчик» ( Если вкладка отключена, включите ее в разделе Файл=> Параметры=> Настройка Ленты);
- Во вкладке «Разработчик» выбрать кнопку «Просмотр кода»;
- В открывшееся окно записать макрос;
- Закрыть окно с макросом.
Давайте рассмотрим несколько макросов с выпадающими списками.
Первый макрос со смещением списка в сторону (горизонтально).
Текст макроса:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range(«B2:B10»)) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
If Len(Target.Offset(0, 1)) = 0 Then
Target.Offset(0, 1) = Target
Else
Target.End(xlToRight).Offset(0, 1) = Target
End If
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Необходимо обратить внимание, что в строке :
If Not Intersect(Target, Range(«B1:B10»)) Is Nothing And Target.Cells.Count = 1 Then
Значения («B1:B10»)— это диапазон в пределах которого будет работать выпадающий список.
Аналогичным образом можно создать выпадающий список со смещением вниз и выпадающий список, записывающий в ячейку несколько значений через знак табуляции или пробел.
Макрос выпадающего списка со смещением вниз:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range(«C2:F2»)) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
If Len(Target.Offset(1, 0)) = 0 Then
Target.Offset(1, 0) = Target
Else
Target.End(xlDown).Offset(1, 0) = Target
End If
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Макрос выпадающего списка с внесением нескольких значений в одну ячейку:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range(«B2:B5»)) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
newVal = Target
Application.Undo
oldval = Target
If Len(oldval) <> 0 And oldval <> newVal Then
Target = Target & «//» & newVal
Else
Target = newVal
End If
If Len(newVal) = 0 Then Target.ClearContents
Application.EnableEvents = True
End If
End Sub
В строке If Not Intersect(Target, Range(«B2:B5»)) Is Nothing And Target.Cells.Count = 1 Then
указывается диапазон действия макроса.
В строке
Target = Target & «//» & newVal
указывается разделитель «//». Его можно заменить на любой знак препинания, текст или поставить пробел.
Содержание
- Циклический просмотр списка данных на листе с помощью макросов в Excel
- Аннотация
- Дополнительная информация
- Поиск списка с постоянным, известным числом строк
- Поиск динамического списка или списка с неизвестным количеством строк
- Поиск списка для конкретной записи
- Выпадающий список в Excel с помощью инструментов или макросов
- Создание раскрывающегося списка
- Выпадающий список в Excel с подстановкой данных
- Выпадающий список в Excel с данными с другого листа/файла
- Как сделать зависимые выпадающие списки
- Выбор нескольких значений из выпадающего списка Excel
- Выпадающий список с поиском
- Создание макросов и пользовательских функций на VBA
- Введение
- Способ 1. Создание макросов в редакторе Visual Basic
- Способ 2. Запись макросов макрорекордером
- Запуск и редактирование макросов
- Создание кнопки для запуска макросов
- Создание пользовательских функций на VBA
Циклический просмотр списка данных на листе с помощью макросов в Excel
Аннотация
При написании макроса Microsoft Visual Basic для приложений (VBA), возможно, придется выполнять циклический просмотр список данных на листе. Существует несколько методов выполнения этой задачи. Раздел “Дополнительная информация” этой статьи содержит сведения о методах, которые можно использовать для поиска в списках следующих типов:
- Список, содержащий известное, постоянное количество строк.
- Динамический список или список с неизвестным числом строк.
- Список, содержащий определенную запись.
Дополнительная информация
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена. В следующих примерах кода предполагается, что в списке есть строка заголовка, которая начинается в ячейке A1, и данные, которые начинаются в ячейке A2.
Поиск списка с постоянным, известным числом строк
Этот код перемещает столбец А в конец списка:
Поиск динамического списка или списка с неизвестным количеством строк
Этот код перемещает столбец А в конец списка. (Этот код предполагает, что каждая ячейка в столбце А содержит запись до конца.)
Примечание Если в столбце A в данных есть пустые ячейки, измените этот код, чтобы он был указан в этом условии. Убедитесь, что пустые ячейки находятся на одинаковом расстоянии друг от друга. Например, если каждая другая ячейка в столбце А пуста (например, такая ситуация может возникнуть, если каждая запись «Record» использует две строки с отступом второй строки), этот цикл может быть изменен следующим образом:
Поиск списка для конкретной записи
Этот код перемещает столбец А в конец списка:
Источник
Выпадающий список в Excel с помощью инструментов или макросов
Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.
Очень удобный инструмент Excel для проверки введенных данных. Повысить комфорт работы с данными позволяют возможности выпадающих списков: подстановка данных, отображение данных другого листа или файла, наличие функции поиска и зависимости.
Создание раскрывающегося списка
Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».
Ввести значения, из которых будет складываться выпадающий список, можно разными способами:
- Вручную через «точку-с-запятой» в поле «Источник».
- Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
- Назначить имя для диапазона значений и в поле источник вписать это имя.
Любой из вариантов даст такой результат.
Выпадающий список в Excel с подстановкой данных
Необходимо сделать раскрывающийся список со значениями из динамического диапазона. Если вносятся изменения в имеющийся диапазон (добавляются или удаляются данные), они автоматически отражаются в раскрывающемся списке.
- Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
- Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
- Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:
Протестируем. Вот наша таблица со списком на одном листе:
Добавим в таблицу новое значение «елка».
Теперь удалим значение «береза».
Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.
Теперь сделаем так, чтобы можно было вводить новые значения прямо в ячейку с этим списком. И данные автоматически добавлялись в диапазон.
- Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
- Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
- Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
- Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
- Сохраняем, установив тип файла «с поддержкой макросов».
- Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».
Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».
Нажмем «Да» и добавиться еще одна строка со значением «баобаб».
Выпадающий список в Excel с данными с другого листа/файла
Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.
- Делаем активной ячейку, куда хотим поместить раскрывающийся список.
- Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).
Имя файла, из которого берется информация для списка, заключено в квадратные скобки. Этот файл должен быть открыт. Если книга с нужными значениями находится в другой папке, нужно указывать путь полностью.
Как сделать зависимые выпадающие списки
Возьмем три именованных диапазона:
Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.
- Создадим первый выпадающий список, куда войдут названия диапазонов.
- Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
- Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
Выбор нескольких значений из выпадающего списка Excel
Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.
- Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
- Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
- Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.
Private Sub Worksheet_Change( ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range( «C2:C5» )) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
newVal = Target
Application.Undo
oldval = Target
If Len(oldval) <> 0 And oldval <> newVal Then
Target = Target & «,» & newVal
Else
Target = newVal
End If
If Len(newVal) = 0 Then Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.
Выпадающий список с поиском
- На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
- Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
- Жмем «Свойства» – открывается перечень настроек.
- Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.
При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.
Источник
Создание макросов и пользовательских функций на VBA
Введение
Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую «рутинную составляющую» — одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос — это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP. ), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно — редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис — Макрос — Редактор Visual Basic(Toos — Macro — Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
- Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):
Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source) . Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
- Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
- Любой макрос должен заканчиваться оператором End Sub.
- Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно.
Способ 2. Запись макросов макрорекордером
Макрорекордер — это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись(Tools — Macro — Record New Macro)
- в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить(Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в. — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов — это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros) :
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
- Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button) :
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
- В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button) :
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined) :
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Источник
Надстройка для облегчения ввода значений в ячейку Excel
Автор: nerv
Last Update: 27/03/2012
Вам часто приходится заниматься заполнением электронных таблиц, долго и муторно выбирать варианты из выпадающих списков?
А, может, иметь дело с одними теми же, но не структурированными данными?
Раз так, то данная надстройка призвана облегчить Вам жизнь: сократить время, потраченное на нудную, однообразную работу, а вместе с тем повысить ее качество и эффективность.
Как это работает:
По нажатию Ctrl+Enter рядом с выделенной ячейкой появляется список, который позволяет не только выбирать, но и производить поиск по интересующим Вас данным.
Посмотрим, что он умеет:
- Не содержит повторов (уникальный). Легко выявить однотипные данные;
- Отсортирован по возрастанию. Возможность быстро найти то, что нужно;
- После вызова сразу готов к поиску/выбору из списка. Лишние движения ни к чему;
- Позволяет искать с использованием специальных подстановочных символов (*,?,~ и т.п.);
- Осуществлять быстрый поиск по «шаблону». Если ячейка, из которой был вызван список, содержит информацию, поиск будет произведен по ней;
- Появляется рядом с текущей/активной ячейкой и не «убегает» за пределы экрана;
- Навигация привычными стандартными клавишами: Up [Вверх], Down [Вниз], Page Up [На страницу Вверх ], Page Down [На страницу вниз];
- Корректная работа со всеми типами данных: строки, даты, числа;
- Обработка ошибок формул листа. Никаких пустых строк в списке;
- Обработка защиты ячеек листа. В защищенные ячейки ввод запрещен;
- Информация об общем количестве списка и найденных по запросу элементах;
- Быстрый вызов по нажатию Ctrl+Enter;
- Быстрое закрытие: клавиша Esc;
- Быстрый ввод клавишей Enter
Помимо всего вышеперечисленного, позволяет сэкономить на размере файла за счет формирования списка «на лету», который создается в разы быстрее, если данные упорядочены или частично упорядочены по возрастанию.
Отличия версии 1.6 от 1.5:
- новая, более мощная/быстрая процедура сортировки;
- переход после ввода на следующую ячейку (в зависимости от установок Excel);
Добавлены настройки:
- использования и формирования списка (подробнее во вложении «how to use»);
- поиска с учетом регистра и без него;
- маски поиска;
- заголовков.
- 160117 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Введение
Несколько дней назад ко мне поступил вопрос от бывшего коллеги, как реализовать в Excel каскадные выпадающие списки, чтобы то, что вы выбрали в первом списке, определяло то, что вы можете выбрать во втором списке и так далее. Тема выпадающих списков так давно и так плотно засижена популяризаторами Excel, что я не сомневался, что с лёгкостью найду нужный рецепт, но не тут то было. Рецепт я нашёл, но он мне не очень понравился из-за своей громоздкости, повторить такое пользователю со средней квалификацией будет достаточно трудно. Хотя способ внушает уважение, так как реализован только формулами рабочего листа. Однако мне пришёл в голову ещё один способ, который мы с вами сейчас и разберем. Само-собой я поделюсь примером, который вы легко сможете адаптировать под свои нужды.
Как это выглядит
Для тех, кто знает, как работать с Проверкой данных (Data Validation) в Excel, не раз создавал выпадающие списки, но плохо разбирается в макросах, увидеть эти списки будет серьёзным испытанием для психики, особенно если вы подсунете данный файл, уже адаптированным под ваши задачи. Они пол дня потратят, чтобы понять: «КАК, чёрт возьми, ты это сделал»?
Функционал
- Создание каскадных выпадающих списков. Количество каскадов не ограничено, но увлекаться не стоит, так как это может повлиять на производительность Excel при работе с ячейками списков. 2-4 каскада более чем достаточно для типовых задач.
- В цепочке списков выделяются начальный список, так как он ни от кого не зависит, и конечный список, так как от него никто не зависит. Промежуточные списки всегда от кого-то зависят и всегда являются для кого-то родительскими. Родительский список передаёт своему наследнику своё значение и тот отображает список следующего этапа уже фильтруя возможные варианты по родительскому значению.
- При изменении значения ячейки-списка вышестоящего уровня, нижестоящие (зависимые) ячейки очищаются.
- При переходе на ячейку, содержащую список, он автоматически открывается, что упрощает и ускоряет выбор значения. Если в выборе нет необходимости, то следует нажать Esc.
Скачать пример
CascadedLists.zip
Как это настроить для вашего файла с нуля?
Шаг 1
Создайте книгу Excel, которая поддерживает макросы (*.XLSM)
Создайте 3 листа:
- Первый — место, где будут находиться ваши каскадные списки. Я далее буду называть этот лист FRONT, а вы можете дать ему имя, которое захотите
- Второй — место для таблицы-справочника, столбцы которого будут отображать списки. Этот лист я буду называть REF. Вы опять можете дать другое имя листа, но немного проще будет оставить это.
- Третий — вспомогательный лист, назовём его BACK. Имя менять не рекомендую, так как этот лист нам предстоит всё равно сделать скрытым.
Шаг 2
На листе REF создайте таблицу-справочник по аналогии с нашим примером. Таблица не должна содержать пустых ячеек. Первая колонка должна использоваться для списков первого уровня, вторая — для второго и так далее. Вас не должно смущать, что значения в старших колонках могут повторяться — макрос отфильтрует все дубликаты, показывая лишь уникальные значения.
Сделайте эту таблицу «умной». Для этого:
- Встаньте на любую ячейку внутри справочника,
- выберите в ленте на вкладке ГЛАВНАЯ пункт Форматировать как таблицу,
- выберите понравившейся шаблон таблицы, укажите есть ли строка с заголовками, нажмите OK
- в ленте на вкладке КОНСТРУКТОР (курсор должен стоять на ячейке таблицы), перейдите в поле ввода Имя таблицы и дайте нашей таблице имя, например Reference
Шаг 3
Создадим именованный диапазон, который будет ссылаться на только что созданную умную таблицу. В сущности, умная таблица нам нужна только для того, чтобы наш именованный диапазон автоматически расширялся при добавлении новых строк / столбцов в справочник.
Для создания именованного диапазона:
- В ленте выберите вкладку ФОРМУЛЫ, пункт Диспетчер имен
- Нажмите кнопку Создать…
- Дайте имя rngRef, Область оставьте Книга, в качестве Диапазона укажите =Reference[#Данные] (=Reference[#Data])
- Нажмите OK
Шаг 4
На листе FRONT наметьте, где будут располагаться ваши списки выбора. Не используйте для этого ячейку A1.
Шаг 5
Теперь необходимо настроить лист BACK. Для этого:
- В ячейку A1 листа BACK внесите имя созданного вами именованного диапазона, то есть rngRef
- В те же ячейке на листе FRONT, где у вас будут выпадающие списки, но только на листе BACK необходимо занести данные в определенном формате
- Данные в каждой ячейке будут состоять из трёх частей, разделенных точкой с запятой, например «2;A2;C2» или «1;;B3«
- Первая часть (до первого символа «;») означает номер столбца в вашем справочнике, который (столбец) будет использован для формирования значений списка.
- Вторая часть (между двумя символами «;») означает адрес родительской ячейки. У списков, являющихся первыми в каскаде, на этом месте всегда пустота, так как у них нет родительских ячеек.
- Третья часть (справа от второго символа «;») означает адрес ячейки, которая зависит от текущей. У списков, которые замыкают каскад, на этой позиции всегда пустота, например, «3;B4;»
- Скройте лист BACK (правой кнопкой мыши по ярлыку листа, далее выбрать пункт Скрыть)
Шаг 6 (последний)
Нам необходимо записать макрос в нашу созданную книгу
- Откройте редактор Visual Basic через комбинацию клавиш Alt+F11
- Слева, в окне с именем Project — VBAProject найдите лист FRONT вашей книги (не забудьте, что вы могли его назвать иначе)
- Сделайте двойной щелчок мышью по имени данного листа
- Скопируйте этот код с сайта в редактор кода Visual Basic (правая часть экрана)
- Если вы лист REF назвали иначе, то найдите строку Const con_wsRef = «REF» и исправьте стандартное имя листа в кавычках на ваше (это в 8-й строке).
Как это работает?
В Excel в стандартные объекты (листы, ячейки), с которыми мы работаем, встроены пользовательские обработчики событий, которые VBA программист может легко использовать в своих целях. Вот мы и использовали событие рабочего листа FRONT, которое называется SelectionChange. Это означает, что при каждом изменении текущей ячейки на листе вызывается процедура Worksheet_SelectionChange, в которую мы поместили свой код. Этот код ничего не делает, пока пользователь не встанет на какую-нибудь ячейку, которая определенным образом помечена на листе BACK.
Если макрос видит, что пользователь встал на ячейку, в которой должен быть список, то он проверяет, от какой ячейки текущая ячейка зависит, если родительская ячейка пуста, то макрос ничего не делает, а если она содержит значение, то формируется набор значений для выпадающего списка и подставляется через механизм Проверки данных (Data Validation)
Выше вы можете найти код макроса, но я рекомендую его изучать в редакторе VBA в Excel, так как никак не поборю отсутствие отступов в коде VBA на сайте. Надеюсь, статья вам понравилась. Удивите своих коллег крутыми каскадными выпадающими списками в своих файлах!
Обновление!
Все, кто пытался прикрутить данную реализацию каскадных списков к более-менее обширным данным, сталкивался с одной печальной ситуацией: всё вроде бы работает, но после переоткрытия файла Excel вам с прискорбием сообщает, что ваш файл повреждён и предлагает его восстановить, что успешно и делает. Возникает это из-за того, что существует ограничение в 255 символов на строку, которую мы прописываем в правило проверки данных для реализации выпадающего списка. Когда мы создаём этот список программно, то Excel на это не ругается (в отличие от попытки это сделать через стандартное диалоговое окно). Не ругается он на это и при сохранении файла, а вот при открытии — ой. В связи с этим у меня возникла идея не хранить в ячейке правило валидации вообще. То есть на событие SelectionChange мы налету формируем выпадающий список, а на событие Change мы этот список удаляем, так как пользователь уже выбрал интересовавшее его значение. Однако, если пользователь не осуществляет выбор значения из списка, то событие Change не возникает и правило контроля данных остаётся, что опять несёт риск «повреждения» файла. Поэтому приходится идти на такой извращенческий приём, как перебор всех правил контроля данных на листе и удаление «наших» (те, которые коррелируют по расположению с листов BACK). Сейчас я прикрутил это к событиям листа Activate / Deactivate. Если у вас на листе много ячеек, использующих правила валидации данных, но которые не связаны с каскадными выпадающими списками, то, данное решение я, пожалуй, вам НЕ порекомендую использовать.
Скачать версию 0.02
Читайте также:
-
Создание выпадающего списка в ячейке
-
Универсальные динамические каскадные выпадающие списки без VBA!
-
Каскадные комбинированные списки
-
Динамические каскадные списки на основе сводных таблиц
-
Выпадающий список с контекстным поиском
Содержание
- Определение метода Range.Replace
- Синтаксис
- Параметры
- Макрос поиска ячейки с выпадающим списком
- Поиск функцией Find
- Примеры поиска функцией Find
- Поиск даты с помощью Find
- Предназначение и синтаксис метода Range.Find
- Синтаксис метода Range.Find
- Параметры метода Range.Find
- «Найти и заменить» в Excel
- Горячие клавиши
- Процедура «Найти и заменить» не работает
- Подстановочные знаки, или как найти «звездочку»
- Знаки подстановки для поисковой фразы
Определение метода Range.Replace
Range.Replace – это метод, который находит по шаблону подстроку в содержимом ячеек указанного диапазона, заменяет ее на другую подстроку и возвращает значение типа Boolean.
Метод имеет некоторые особенности, которые заключаются в следующем:
- при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
- если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.
Синтаксис
Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:
variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])
Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:
expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]
- variable – переменная (тип данных – Boolean);
- expression – выражение, возвращающее объект Range.
Параметры
Параметр | Описание |
---|---|
What | Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр. |
Replacement | Подстрока, заменяющая искомую подстроку. Обязательный параметр. |
LookAt | Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки: 1 (xlWhole) – поиск полного вхождения искомого текста; 2 (xlPart) – поиск частичного вхождения искомого текста. Необязательный параметр. |
SearchOrder | Задает построчный или постолбцовый поиск: 1 (xlByRows) – построчный поиск; 2 (xlByColumns) – постолбцовый поиск. Необязательный параметр. |
MatchCase | Поиск с учетом или без учета регистра: 0 (False) – поиск без учета регистра; 1 (True) – поиск с учетом регистра. Необязательный параметр. |
MatchByte | Способы сравнения двухбайтовых символов: 0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами; 1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами. Необязательный параметр. |
SearchFormat | Формат поиска. Необязательный параметр. |
ReplaceFormat | Формат замены. Необязательный параметр. |
* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.
Макрос поиска ячейки с выпадающим списком
Допустим у нас имеется таблица Excel сформированная в результате экспорта журнала фактур из истории взаиморасчетов с клиентами фирмы, как показано ниже на рисунке:
Нам необходимо найти все выпадающие списки или определить каким ячейкам присвоена проверка вводимых данных, создана инструментом: «ДАННЫЕ»-«Работа с данными»-«Проверка данных».
В программе Excel по умолчанию есть встроенный инструмент для поиска ячеек с проверкой правил вводимых значений. Чтобы его использовать следует выбрать: ГЛАВНАЯ»-«Редактирование»-«Найти и выделить»-«Выделить группу ячеек». В появившемся диалоговом окне следует отметить опцию «проверка данных» и нажать на кнопку ОК. Но как всегда более гибким решением является написание своего специального макроса. Ведь в такие случаи всегда можно усовершенствовать инструмент и дописать много других полезных функций. А этот код макроса послужит прекрасным началом программы.
Откройте редактор макросов Visual Basic (ALT+F11) и создайте новый модуль выбрав в редакторе инструмент: «Insert»-«Module». В созданный модуль введите VBA код макроса:
SubProvDan()
DimiAs Long
Dimdiapaz1AsRange
Dimdiapaz2AsRange
Setdiapaz1 = Application.Range(ActiveSheet.Range("A1"), _
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
On Error Resume Next
Fori = 1Todiapaz1.Count
IfIsError(diapaz1(i).Validation.Type)Then
Else
Ifdiapaz2Is Nothing Then
Setdiapaz2 = diapaz1(i)
Else
Setdiapaz2 = Application.Union(diapaz2, diapaz1(i))
End If
End If
Next
On Error GoTo0
Ifdiapaz2Is Nothing Then
MsgBox"Ненайдено ниодной ячейки!"
Else
diapaz2.Select
MsgBox"Найдено: "& diapaz2.Count &" ячеек!"
End If
End Sub
Если нужно выделить все ячейки в таблице, которые содержат проверку вводимых значений включенной инструментом «Проверка данных», тогда выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«ProvDan»-«Выполнить».
В результате выделились 14 ячеек в столбце G, для которых включена проверка данных в стиле выпадающего списка:
В данном коде мы сначала выделяем все ячейки на текущем листе с помощью инструкции:
Cells.Select
После, определяем диапазон ячеек на листе, который использует исходная таблица и с которыми будет работать наш макрос. Чтобы определить диапазон таблицы на рабочем листе Excel, мы могли бы использовать свойство UsedRange при создании экземпляра объекта Range в переменной diapaz1. Данное свойство охватывает только непустые ячейки, а это может быть даже несмежный диапазон. Но таблица может содержать пустые ячейки для, которых присвоена проверка ввода значений. Чтобы наш макрос не игнорировал пустые ячейки внутри таблицы мы определяем смежный (неразрывный) диапазон, который начинается с ячейки A1 и заканчивается последней используемой ячейкой на рабочем листе Excel.
Set diapaz1 = Application.Range(ActiveSheet.Range(“A1”), ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell))
Последняя ячейка находиться наиболее отдаленно от ячейки A1 (в данном примере – это G15) и была использована на листе (это обязательное условие). При чем использована в прямом смысле, она может даже не содержать значения, но иметь измененный числовой формат, другой цвет фона, другие границы, объединение и т.п. Чтобы найти последнюю используемую ячейку на листе стандартными средствами Excel, выберите инструмент: «ГЛАВНАЯ»-«Редактирование»-«Найти и выделить»-«Выделить группу ячеек».
В появившемся окне следует выбрать опцию «последнюю ячейку». А после просто нажать ОК. Курсор клавиатуры сразу переместиться на последнюю используемую ячейку на рабочем листе Excel.
Можно даже при создании экземпляра объекта Range в переменной diapaz1 использовать диапазон целого листа. Для этого просто замените выше описанную инструкцию на:
Set diapaz1 = Selection
Так на первый взгляд даже проще, но тогда макрос будет проверять все ячейки на листе и потребует больше ресурсов. Особенно если мы при изменении этой инструкции не удалим инструкцию выделения всех ячеек на листе Excel. Таким кодом макроса, можно существенно снизить производительность работы программы Excel при его выполнении. Поэтому так делать не рекомендуется. Проверяйте ячейки только те, которые были использованы на листе. Так вы получите в десятки раз меньший диапазон и выше производительность макроса.
Далее в коде макроса перед циклом прописана инструкция для выключения обработки ошибок, выполняемых в коде.
On Error Resume Next
Но после конца цикла обработка ошибок снова включается.
On Error GoTo 0
Внутри цикла проверяться по отдельности все ячейки на наличие включенной проверки вводимых значений инструментом «Проверка данных». Если ячейка содержит проверку вводимых значений?
If IsError(diapaz1(i).Validation.Type) Then
Тогда она присоединяется к диапазону ячеек, находящихся в переменной diapaz2.
Set diapaz2 = Application.Union(diapaz2, diapaz1(i))
В конце кода выделяется несмежный диапазон переменной diapaz2, который включает в себя все выпадающие списки на текущем рабочем листе Excel. И сразу же выводиться сообщение о количестве найденных и выделенных ячеек в этом же диапазоне.
MsgBox “Найдено: ” & diapaz2.Count & ” ячеек!”
Поиск функцией Find
Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую “123” достаточно такого кода:
Sheets("Данные").Select Set fcell = Columns("A:A").Find("123") If Not fcell Is Nothing Then MsgBox "Нашел в строке: " + CStr(fcell.Row) End If
Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист “Данные”;
2-я строка: Осуществляем поиск значения “123” в колонке “A”, результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае – будет пустой, т.е. Nothing.
Полностью синтаксис оператора поиска выглядит так:
Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
What – Строка с текстом, который ищем или любой другой тип данных Excel
After – Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.
LookIn – Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).
LookAt – Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).
SearchOrder – Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)
SearchDirection – Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)
MatchCase – Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)
MatchByte – Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)
SearchFormat – Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.
Чтобы продолжить поиск, можно использовать FindNext (искать “далее”) или FindPrevious (искать “назад”).
Примеры поиска функцией Find
Пример 1: Найти в диапазоне “A1:A50” все ячейки с текстом “asd” и поменять их все на “qwe”
With Worksheets(1).Range("A1:A50") Set c = .Find("asd", LookIn:=xlValues) Do While Not c Is Nothing c.Value = "qwe" Set c = .FindNext(c) Loop End With
Обратите внимание: Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:
Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.
With Worksheets(1).Range("A1:A50") Set c = .Find("asd", lookin:=xlValues) If Not c Is Nothing Then firstResult = c.Address Do c.Font.Bold = True Set c = .FindNext(c) If c Is Nothing Then Exit Do Loop While c.Address <> firstResult End If End With
В ниже следующем примере используется другой вариант продолжения поиска – с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.
Пример 3: Продолжение поиска с использованием Find с параметром After.
With Worksheets(1).Range("A1:A50") Set c = .Find("asd", lookin:=xlValues) If Not c Is Nothing Then firstResult = c.Address Do c.Font.Bold = True Set c = .Find("asd", After:=c, lookin:=xlValues) If c Is Nothing Then Exit Do Loop While c.Address <> firstResult End If End With
Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.
Пример 4: Найти все ячейки с шрифтом “курсив” и поменять их формат на обычный (не “курсив”)
lLastRow = Cells.SpecialCells(xlLastCell).Row lLastCol = Cells.SpecialCells(xlLastCell).Column Application.FindFormat.Font.Italic = True With Worksheets(1).Range(Cells(1, 1), Cells(lLastRow, lLastCol)) Set c = .Find("", SearchFormat:=True) Do While Not c Is Nothing c.Font.Italic = False Set c = .Find("", After:=c, SearchFormat:=True) Loop End With
Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)
Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка – цикл пока результат поиска не будет пустым. 7-я строка – меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.
Хочу обратить внимание на то, что в этом примере я не стал использовать “защиту от зацикливания”, как в Примерах 2 и 3, т.к. шрифт меняется и после “прохождения” по всем ячейкам, больше не останется ни одной ячейки с курсивом.
Свойство FindFormat можно задавать разными способами, например, так:
With Application.FindFormat.Font .Name = "Arial" .FontStyle = "Regular" .Size = 10 End With
Следующий пример – применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.
Пример 5: Найти последнюю колонку и столбец, заполненные данными
Set c = Worksheets(1).UsedRange.Find("*", SearchDirection:=xlPrevious) If Not c Is Nothing Then lLastRow = c.Row: lLastCol = c.Column Else lLastRow = 1: lLastCol = 1 End If MsgBox "lLastRow=" & lLastRow & " lLastCol=" & lLastCol
В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.
При поиске можно так же использовать шаблоны, чтобы найти текст по маске, следующий пример это демонстрирует.
Пример 6: Выделить красным шрифтом ячейки, в которых текст начинается со слова из 4-х букв, первая и последняя буквы “т”, при этом после этого слова может следовать любой текст.
With Worksheets(1).Cells Set c = .Find("т??т*", LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then firstResult = c.Address Do c.Font.Color = RGB(255, 0, 0) Set c = .FindNext(c) If c Is Nothing Then Exit Do Loop While c.Address <> firstResult End If End With
Для поиска функцией Find по маске (шаблону) можно применять символы:
* – для обозначения любого количества любых символов;
? – для обозначения одного любого символа;
~ – для обозначения символов *, ? и ~. (т.е. чтобы искать в тексте вопросительный знак, нужно написать ~?, чтобы искать именно звездочку (*), нужно написать ~* и наконец, чтобы найти в тексте тильду, необходимо написать ~~)
Поиск даты с помощью Find
Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:
- Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не “01.03.2018”
- В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas
Приведу несколько примеров поиска даты.
Пример 7: Найти текущую дату на листе независимо от формата отображения даты.
d = Date Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole) If Not c Is Nothing Then MsgBox "Нашел" Else MsgBox "Не нашел" End If
Пример 8: Найти 1 марта 2018 г.
d = #3/1/2018# Set c = Cells.Find(d, LookIn:=xlFormulas, LookAt:=xlWhole) If Not c Is Nothing Then MsgBox "Нашел" Else MsgBox "Не нашел" End If
Искать часть даты – сложнее. Например, чтобы найти все ячейки, где месяц “март”, недостаточно искать “03” или “3”. Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел – это выбрать формат в котором месяц прописью для ячеек с датами и искать слово “март” в xlValues.
Тем не менее, можно найти, например, 1 марта независимо от года.
Пример 9: Найти 1 марта любого года.
d = #3/1/1900# Set c = Cells.Find(Format(d, "m/d/"), LookIn:=xlFormulas, LookAt:=xlPart) If Not c Is Nothing Then MsgBox "Нашел" Else MsgBox "Не нашел" End If
Предназначение и синтаксис метода Range.Find
Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.
Синтаксис метода Range.Find
Expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat) |
Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.
В скобках перечислены параметры метода, среди них только What является обязательным.
Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.
Параметры метода Range.Find
Наименование | Описание |
Обязательный параметр | |
What | Данные для поиска, которые могут быть представлены строкой или другим типом данных Excel. Тип данных параметра – Variant. |
Необязательные параметры | |
After | Ячейка, после которой следует начать поиск. |
LookIn | Уточняет область поиска. Список констант xlFindLookIn:
|
LookAt | Поиск частичного или полного совпадения. Список констант xlLookAt:
|
SearchOrder | Определяет способ поиска. Список констант xlSearchOrder:
|
SearchDirection | Определяет направление поиска. Список констант xlSearchDirection:
|
MatchCase | Определяет учет регистра:
|
MatchByte | Условия поиска при использовании двухбайтовых кодировок:
|
SearchFormat | Формат поиска – используется вместе со свойством Application.FindFormat. |
* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments
и MsgBox xlNotes
.
** Тесты показали неработоспособность метода Range.Find с константой xlFormulas в моей версии VBA Excel.
В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.
Процедура поиска и замены данных — одна из самых востребованных в Excel. Базовая процедура позволяет заменить за один заход только одно значение, но зато множеством способов. Рассмотрим, как эффективно работать с ней.
Горячие клавиши
Сочетания клавиш ниже заметно ускорят работу с инструментом:
- Для запуска диалогового окна поиска — CTRL+F
- Для запуска окна поиска и замены — Ctrl+H
- Для выделения всех найденных ячеек (после нажатия кнопки «найти все» — CTRL+A
- Для очистки всех найденных ячеек — CTRL+Delete
- Для ввода одних и тех же данных во все найденные ячейки — Ввод текста, CTRL+Enter
Смотрите gif-примеры: здесь мы производим поиск ячеек с дальнейшим их редактированием. В отличие от замены, редактирование найденных ячеек позволяет быстро менять их содержимое целиком.
Процедура «Найти и заменить» не работает
Я сам когда-то неоднократно впадал в ступор в подобных ситуациях. Уверен и видишь своими глазами, что искомый паттерн в данных есть, но Excel при выполнении процедуры поиска сообщает:
или при замене:
Так вот, совет нажать кнопку «Параметры» в обоих этих сообщениях действительно полезен. Там наверняка активен чекбокс «Учитывать регистр» или «Ячейка целиком», которые мешают Excel найти искомое. Excel сохраняет конфигурацию последнего поиска.
Подстановочные знаки, или как найти «звездочку»
Сухая официальная справка по Excel сообщает, что можно использовать подстановочные символы «*» и «?». Что они означают несколько символов, включая их отсутствие, и один любой символ. И что их можно использовать для соответствующих процедур поиска.
Чего не говорит справка — это того, что в комбинации с опцией «ячейка целиком» эти символы позволяют, не прибегая к помощи расширенного фильтра и процедуры поиска группы ячеек:
- Находить ячейки, заканчивающиеся на определенный символ, слово или текст
- Аналогично, находить ячейки, начинающиеся с определенного символа, слова или текста
- Находить непустые ячейки
На примере ниже мы находим все двузначные числа, затем числа, заканчивающиеся и начинающиеся на 7, и, наконец, все непустые ячейки. Напомню, выделить все результаты поиска помогает горячее сочетание клавиш Ctrl+A
Так а как найти звездочку?
Действительно, забыл. Чтобы найти «звездочку», нужно в окошке поиска ставить перед ней знак «~» (тильда), находится обычно под клавишей Esc. Это позволяет экранировать «звездочку», как и вопросительный знак, и не воспринимать их как служебные символы.
Знаки подстановки для поисковой фразы
Условные знаки в шаблоне поисковой фразы:
- ? – знак вопроса обозначает любой отдельный символ;
- * – звездочка обозначает любое количество любых символов, в том числе ноль символов;
- ~ – тильда ставится перед ?, * и ~, чтобы они обозначали сами себя (например, чтобы тильда в шаблоне обозначала сама себя, записать ее нужно дважды: ~~).
Источники
- https://vremya-ne-zhdet.ru/vba-excel/metod-range-replace/
- https://exceltable.com/vba-macros/makros-poiska-yacheyki
- https://codernotes.ru/articles/vba/poisk-na-liste-excel.html
- https://vremya-ne-zhdet.ru/vba-excel/metod-range-find/
- https://SEMTools.guru/ru/change-replace-tools/bulk-replace/
Приветствую на странице, которую каждый начинающий VBA-программист просто обязан добавить в закладки. Сейчас расскажу почему.
Макросы могут сэкономить массу времени. Можно автоматизировать небольшие задачи (ссылка на примеры), или создавать целые проекты автоматизации. Нажал кнопку и макрос выполнил работу целого отдела (вот я вообще не преувеличиваю).
Если Вы не знаете, что такое макрос в Excel и для чего они нужны, то рекомендую начать обучение с бесплатного самоучителя. Сборник готовых примеров, конечно, тоже поможет, но лучше начать с основ, а потом уже переходить к практике.
Моя история
Я ещё со школы начал изучать VBA. Читал книжки, пользовался макрорекордером (подсматривал код, изменял под себя).
Когда ты школьник, то верх мастерства сделать калькулятор или игру. Стал студентом — разработал инвестиционный проект строительства свиноводческого комплекса (вводишь пару основных цифр и программа говорит какая мощность комплекса нужна, сколько нужно людей и денег, плюс тонную документов с деталями цикла производства и план-график выхода на проектную мощность).
Это всё, конечно, интересно и круто, но не сравнить с написанием макросов для решения реальных бизнес-задач.
Представьте на минуту, что всю вашу рутину:
- привести таблицу в «нормальный» вид;
- собрать данные из нескольких файлов в один;
- отфильтровать простыню из данных по нескольким критериям;
- построить сводную таблицу, график и отправить боссу
- тонна аналогичных скучных задач.
можно поручить Excel. ОДИН РАЗ прописать логику с помощью VBA и всё! Да, я знаю, что написание макроса иногда может занять неделю, а то и месяц. Но сколько вы каждый день/неделю/месяц тратите время на ерунду?
Я сам далеко не сразу узнал всё про макросы. Приходилось много читать скучных книг с примерами, которые даже не понимал куда применить, собирать по крупицам информацию в интернете. Да что там говорить — я и сейчас продолжаю изучать VBA.
Про сборник
Изначально я не хотел никому и не при каких обстоятельствах показывать сборник. Максимум ученикам и то, какую-нибудь урезанную версию (т..к постоянно добавляю новые коды). С рождением сына я пересмотрел свою позицию и захотел оставить след в истории (пафосно звучит, ну и пусть).
На поиск всех этих примеров я потратил слишком много времени, и будет круто, если сэкономлю ваше и вы сможете уделить его действительно важным вещам.
Если вы считаете, что что-то должно быть в списке, просто оставьте комментарий. Как только добавлю код — удалю комментарий, а про вас напишу в статье.
В этой огромной статье я собрал уже более 200 макросов, для удобства разбил их по группам.
Вы сможете использовать эти коды, даже если до этого не использовали VBA.
Работа с Excel файлами (WorkBook)
- Как создать файл Excel с помощью VBA
- Как сохранить файл в Excel при изменении определенной ячейки или диапазона
- Как сохранить файл в Excel перед закрытием
- Как защитить лист в книге перед закрытием
- Как снятие защиту с листа при открытии Excel файла
- Как открыть Excel файл на нужном листе
- Как открыть Excel файл, определенный пользователем
- Как определить, открыт ли Excel файл
- Как определяем, существует ли Excel файл в папке
- Как обновить все связи в открытых Excel файлах
- Как закрыть сразу все Excel файлы
- Как открыть все Excel файлы в папке
- Как распечатать все Excel файлы в папке
- Как не дать закрыть Excel файл до тех пор, пока не заполнит ячейку
- Как создать резервную копию текущего Excel файла с сегодняшней датой
Назад к списку тем
Работа с листами Excel файла (WorkSheets)
- Как добавить новый лист и присвоить имя
- Как удалить все листы, кроме активного
- Как скрыть все, кроме активного рабочего листа
- Как отобразить все листы книги
- Как переместить рабочие листы книги
- Как сортировать листы по названию
- Как сгруппировать листы по цвету ярлычка
- Как скопировать лист в новый Excel файл
- Как создать новый Excel файл для каждого листа
- Как распечатать листы
- Как защитить все листы
- Как снять защиту со всех листов
- Как создать оглавление со списком листов
- Как изменить масштаб листа с помощью двойного клика
- Как выделить столбец активной строки на листе
Назад к списку тем
Работа с диапазонами (Range)
Эта часть посвящена диапазонам: их выбору, изменению, скрытию и т. д.
- Как выбрать и изменить форматирование диапазона
- Как создать и выбрать именованный диапазон
- Как сделать перебор диапазона ячеек
- Как выбрать и форматировать диапазон
- Как вставить пустые строки в диапазон
- Как отобразить все скрытые строки и столбцы
- Как удалить пустые строки
- Как удалить пустые столбцы
- Как отобрать и отформатировать все формулы на листе
- Как найти первую пустую строку или столбец
- Как применить дополнительный цвет заливки
- Как отсортировать диапазоны по двойному щелчку
- Как ограничить диапазон прокрутки в той или иной области
- Как автоматически задать область печати листа
Назад к списку тем
Макросы для работы с данными
Эта часть посвящена управлению данными: их очистке, форматированию и т. д.
- Как скопировать и вставить диапазон
- Как преобразовать все формулы в диапазон с значениями
- Как преобразовать текстовые значения в числовые
- Как преобразовать тире в минус
- Как удалить лишние пробелы из всех ячеек в диапазоне
- Как отсечь слева 5 знаков в каждой ячейке диапазона
- Как добавить в ячейку недостающие нули
- Как заменить пустые ячейки нулём
- Как добавить текст в начало или конец ячейки
- Как создать макрос преобразования данных
- Как очистить данные от непечатаемых символов
- Как выделить дубликаты в диапазоне данных
- Как скрыть повторяющиеся строки
- Как выборочно скрыть стрелки автофильтра
- Как скопировать отфильтрованные строки в новый Excel файл
- Как создать новый лист для каждого элемента в автофильтре
- Как показать отфильтрованные столбцы в строке состояния
Назад к списку тем
Макросы для сводных таблиц
- Как создать обратную совместимость сводной таблицы
- Как обновить все сводные таблицы книги
- Как создать список всех сводных таблиц книги
- Как создать все сводные таблицы, используя единый кэш
- Как скрыть все промежуточные итоги в сводной таблице
- Как изменить названия всех полей сводной
- Как принудительно суммировать значения для всех полей сводной
- Как применить числовой формат для всех элементов данных
- Как сортировать поля сводной в алфавитном порядке
- Как применить пользовательскую сортировку к элементам данных
- Как поставить защиту на сводную таблицу
- Как применить ограничения сводного поля
- Как автоматически удалять листы с детализацией
- Как распечатать сводную таблицу для каждого значения фильтра
- Как для каждого элемента фильтра создать новый Excel файл
- Как подготовить диапазон данных для сводной таблицы
Назад к списку тем
Макросы для графиков
- Как изменить размер диаграмм на рабочем листе
- Как привязать график к определенному диапазону
- Как создать набора бессвязных диаграмм
- Как распечатать всех диаграммы на рабочем листе
- Как отметить первое и последнее значение на графике
- Как сопоставить цвет диаграммы и исходных данных
- Как сопоставить цвет точек графика и исходных данных
Назад к списку тем
Макросы для отправки писем из Excel
- Как отправить Excel файл почтой (как вложение)
- Как отправить диапазон значений в качестве вложения
- Как отправить один листа файла в качестве вложения
- Как отправить письмо со ссылкой на наши файлы
- Как разослать письма с добавлением адресов в наш список контактов
- Как сохранить все вложения в отдельной папке
- Как сохранить определенные вложения в папку
Назад к списку тем
Макросы для работы с Access
- Как выполнить запрос Access из Excel
- Как запустить макрос Access из Excel
- Как открыть отчет Access из Excel
- Как открыть форму Access из Excel
- Как сжать базу данных Access из Excel
Назад к списку тем
Макросы для работы с MS Word
- Как отправить данные из Excel в Word документ
- Как сделать слияние с Word документом
Назад к списку тем
Макросы для работы с PowerPoint
- Как отправить данные Excel в PowerPoint
- Как отправить график из Excel в PowerPoint
- Как преобразовать рабочую книгу в презентацию PowerPoint
Назад к списку тем
Уже добавили страницу в закладки? Зря, я же пополняю список)
Microsoft Excel: выпадающие списки
Смотрите также Next то подправьте эти и вниз до значений на листСписокПри использовании этого способа, диапазона:Важный нюанс. В качестве выбранное значение – исходный код листа lReply = MsgBox(«Добавить
указать диапазон ячеек соответствующий базе данных
Создание дополнительного списка
же книге, можно же свойства, как а затем кликаемПри работе в программеIf poisk Like параметры в макросе
конца — до (это так же» и указываем диапазон также возможно указыватьЭтот способ частично напоминает источника данных для в строку LinkedCell. готовый макрос. Как введенное имя « со списком. с городами. Если на другом листе. и в предыдущий по надписи «Параметры». Microsoft Excel в
«*» & TextBox1.Value на свои. последнего имени. позволит работать со списка в качестве предыдущий. Основное отличие
списка может выступать Для изменения шрифта это делать, описано & _ TargetНазначить имя для диапазона пользователь выберетМы будем использовать именованные раз, выделяем верхниеВ открывшемся окне переходим таблицах с повторяющимися & «*» ThenВсё! Теперь при попытке
Выделяем ячейку D2 и списком на любом3.ListFillRange в том, что и динамический именованный и размера – выше. С его
& » в значений и вPortugal диапазоны и сделаем ячейки, и при в подраздел «Настройка данными, очень удобноListBox1.AddItem sh.Name & ввести новое имяв Excel 2007 и листе). Делается этоЕсли есть желание
не только одномерные на лист добавляется диапазон, например прайс-лист. Font. помощью справа от выпадающий список?», vbYesNo поле источник вписать, то мы должны так, чтобы эти
Создание выпадающего списка с помощью инструментов разработчика
нажатой клавише мышки ленты», и ставим использовать выпадающий список. «!» & poisk.Address в ячейку D2 новее — жмем так: подсказать пользователю о диапазоны. Можно, например не элемент управления, Тогда при дописыванииСкачать пример выпадающего списка выпадающего списка будут + vbQuestion) If
это имя. обратиться к базе связанные выпадающие списки «протаскиваем» вниз. флажок напротив значения С его помощью
ListBox1.List(j, 1) = Excel будет спрашивать на вкладкеТо есть вручную, его действиях, то задать диапазон из а элемент ActiveX новых товаров кПри вводе первых букв добавляться выбранные значения.Private lReply = vbYesЛюбой из вариантов даст с индексом работали во всех
Всё, таблица создана. «Разработчик». Жмем на можно просто выбирать poisk… и при утвердительном
Данные (Data) через переходим во вкладку двух столбцов и
»Поле со списком» прайсу, они будут с клавиатуры высвечиваются Sub Worksheet_Change(ByVal Target Then Range(«Деревья»).Cells(Range(«Деревья»).Rows.Count + такой результат.3
версиях Excel. СледующийМы разобрались, как сделать кнопку «OK». нужные параметры изj = j + 1
ответе пользователя автоматическикнопку
; « нескольких строк, указавиз раскрывающегося набора автоматически добавляться к подходящие элементы. И As Range) On
Связанные списки
1, 1) =, в которой хранятся шаг – создать выпадающий список вПосле этого, на ленте сформированного меню. ДавайтеEnd If добавлять новое имяПроверка данных (Data Validation)(точка с запятой) вводимСообщение для ввода дополнительно, что выводить под кнопкой выпадающему списку. Еще это далеко не Error Resume Next
Target End IfНеобходимо сделать раскрывающийся список названия городов Португалии. именованные диапазоны для Экселе. В программе появляется вкладка с
выясним, как сделатьNext к списку вв Excel 2003 и список в поле
» и заполняем заголовок нужно два столбцаВставить (Insert) одним часто используемым все приятные моменты
If Not Intersect(Target, End If End со значениями из Мы воспользуемся функцией наших списков. На можно создавать, как названием «Разработчик», куда
раскрывающийся список различными
Next столбце А и старше — выбираем « и текст сообщения (свойствос вкладки трюком для таких
данного инструмента. Здесь
Range(«Е2:Е9»)) Is Nothing If End Sub динамического диапазона. ЕслиВПР вкладке простые выпадающие списки, мы и перемещаемся. способами.End Sub в выпадающий список в менюИсточниккоторое будет появляться
ColumnCount
lumpics.ru
Создаем связанные выпадающие списки в Excel – самый простой способ!
Разработчик (Developer) списков является создание можно настраивать визуальное And Target.Cells.Count =Сохраняем, установив тип файла вносятся изменения в(VLOOKUP) для поискаFormulas так и зависимые. Чертим в MicrosoftСкачать последнюю версиюОформляйте коды макросов в ячейку D2.Данные — Проверка (Data», в том порядке при выборе ячейки=2). Тогда можно получить: связанных выпадающих списков
представление информации, указывать 1 Then Application.EnableEvents «с поддержкой макросов». имеющийся диапазон (добавляются значения из ячейки(Формулы) есть команда При этом, можно Excel список, который Excel спецтегами — кнопкаSendex — Validation) в котором мы с выпадающим списком весьма привлекательные результаты,
Механизм добавления тот же (когда содержимое одного в качестве источника = False IfПереходим на лист со или удаляются данные),B1Name Manager использовать различные методы должен стать выпадающимСамым удобным, и одновременно # (поправил за: Всем привет!. хотим его видеть4. окупающие все потраченные — выбираем объект списка меняется в сразу два столбца. Len(Target.Offset(0, 1)) = списком. Вкладка «Разработчик» они автоматически отражаютсяв таблице с(Диспетчер имён). Нажав создания. Выбор зависит меню. Затем, кликаем наиболее функциональным способом Вас). И ПравилаИскал что-то подобное
Далее выбираем из выпадающего (значения введённые слева-направоТак же необязательно на дополнительные настройки из списка и зависимости от выбораУ кого мало времени 0 Then Target.Offset(0, — «Код» - в раскрывающемся списке. названиями стран. После на нее, откроется от конкретного предназначения
на Ленте на создания выпадающего списка, форума почитайте. обсуждавшееся, но не списка будут отображаться в можно создать и усилия: рисуем его на в другом). и нужно быстро 1) = Target «Макросы». Сочетание клавишВыделяем диапазон для выпадающего того как индекс диалоговое окно списка, целей его значок «Вставить», и
является метод, основанныйSLAVICK нашел.Тип данных (Allow) ячейке сверху вниз). сообщение, которое будетСпособ 1.
листе. А вотЭтот способ представляет собой ухватить суть - Else Target.End(xlToRight).Offset(0, 1) для быстрого вызова списка. В главном будет известен, мыName Manager создания, области применения, среди появившихся элементов на построении отдельного
: Попробуйте так:
В чем суть.позициюПри всех своих появляться при попытке
Примитивный дальше начинаются серьезные вставку на лист
смотрим обучающее видео: = Target End – Alt + меню находим инструмент выберем список, который(Диспетчер имён). и т.д. в группе «Элемент списка данных.200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub TextBox1_Change() Допустим есть список:Список (List) плюсах выпадающий список, ввести неправильные данныеСпособ 2. отличия от предыдущего нового объекта -
Кому интересны подробности и If Target.ClearContents Application.EnableEvents F8. Выбираем нужное
«Форматировать как таблицу». станет источником данныхНажмите кнопкуАвтор: Максим Тютюшев ActiveX» выбираем «ПолеПрежде всего, делаем таблицу-заготовку,Dim j Asполотенце зеленоеи вводим в созданный вышеописанным образом,Если Вы неСтандартный способа. элемента управления «поле нюансы всех описанных = True End имя. Нажимаем «Выполнить».Откроются стили. Выбираем любой. для нашего второгоNewПРЕДСТАВЬТЕ СИТУАЦИЮ: со списком». где собираемся использовать Long, i Asполено дубовое строку имеет один, но сделаете пункты 3Способ 3.Во-первых, созданный выпадающий ActiveX со списком» с способов — дальше If End SubКогда мы введем в Для решения нашей выпадающего списка. Для(Создать), чтобы добавитьМы хотим создатьКликаем по месту, где выпадающее меню, а Long, poisk Asтелефон новыйИсточник (Source) очень «жирный» минус: и 4, тоЭлемент управления список может находится последующей привязкой его по тексту.Чтобы выбранные значения показывались пустую ячейку выпадающего задачи дизайн не этого напишем такую новый именованный диапазон. в Excel небольшую
должна быть ячейка
также делаем отдельным
Range, iAdr$, LT%,переполох в душессылку на созданный проверка данных работаетпроверка данныхСпособ 4. в двух принципиально к диапазонам наОдин щелчок правой кнопкой снизу, вставляем другой списка новое наименование, имеет значения. Наличие
формулу: Откроется диалоговое окно табличку, где можно
со списком. Как списком данные, которые sh As WorksheetВ ячейке начинаем на шаге 1 только при непосредственномработать будет, ноЭлемент ActiveX разных состояниях - листе. Для этого:
мыши по пустой код обработчика.Private Sub появится сообщение: «Добавить заголовка (шапки) важно.=CHOOSE(VLOOKUP(B1,Sheet3!$A$3:$B$5,2,FALSE),England,France,Portugal)New Name выбрать страну и видите, форма списка в будущем включим
ListBox1.Clear писать «пол» и
именованный диапазон (
вводе значений с
при активации ячейки
office-guru.ru
Выпадающий список в Excel с помощью инструментов или макросов
Сложность режиме отладки, когдаВ Excel 2007/2010 откройте ячейке под столбцом Worksheet_Change(ByVal Target As введенное имя баобаб В нашем примере
=ВЫБОР(ВПР(B1;Sheet3!$A$3:$B$5;2;ЛОЖЬ);England;France;Portugal)(Создание имени). соответствующий ей город. появилась. в это меню.LT = Len(TextBox1.Value) тут же выпадаетне забудьте перед именем клавиатуры. Если Вы не будет появляться
Создание раскрывающегося списка
низкая можно настраивать его вкладку с данными, команда Range) On Error
в выпадающий список?». это ячейка А1Что же делает этаВ поле
- При этом сЗатем мы перемещаемся в
- Эти данные можноIf LT = список со строками, диапазона поставить знак
- попытаетесь вставить в сообщение пользователю осредняя параметры и свойства,
Разработчик (Developer) контекстного меню
Resume Next If
Выпадающий список в Excel с подстановкой данных
Нажмем «Да» и добавиться со словом «Деревья». формула? Она ищетName помощью выпадающих списков, «Режим конструктора». Жмем размещать как на 0 Then Exit
- в которых содержится равенства! ячейку с его предполагаемых действиях,
- высокая двигать его по. В более раннихВыбрать из раскрывающегося списка Not Intersect(Target, Range(«Н2:К2»)) еще одна строка То есть нужно значение из ячейки(Имя) введите имя необходимо ограничить доступные на кнопку «Свойства этом же листе Sub
- эта комбинация:):проверкой данных а вместо сообщенияВозможность настройки шрифта, цвета листу и менять версиях — панель(Choose from drop-down list)
Is Nothing And со значением «баобаб». выбрать стиль таблицы
B1Country
пользователям варианты стран
элемента управления». документа, так иj = 0
ПОЛотенце зеленоеЧтобы Excel позволил намзначения из буфера об ошибке с и т.д. размеры и - инструментов
- или нажать сочетание Target.Cells.Count = 1Когда значения для выпадающего со строкой заголовка.в списке стран
- для нашего первого и городов, изОткрывается окно свойств элемента на другом, еслиiAdr = Sheets(1).UsedRange.Address
- ПОЛено дубовое в будущем ввести обмена, т.е скопированные вашим текстом будетнет режиме ввода, когдаФормы (Forms)
- клавиш Then Application.EnableEvents = списка расположены на Получаем следующий вид и возвращает соответствующий именованного диапазона, а которых они могут управления. В графе вы не хотите,iAdr = Mid(iAdr,переПОЛох в душе в список и предварительно любым способом, появляться стандартное сообщение.нет единственное, что можночерез менюALT+стрелка вниз False If Len(Target.Offset(1, другом листе или диапазона: индекс, который затем в поле выбирать. В первой «ListFillRange» вручную через чтобы обе таблице InStr(iAdr, «:») +Дописываем дальше, «поле» новые имена, снимем то Вам это5.да — выбирать из
- Вид — Панели инструментов. Способ не работает,
- 0)) = 0 в другой книге,Ставим курсор в ячейку, использует функцияRefers to ячейке мы сделаем двоеточие прописываем диапазон располагались визуально вместе.
1) — остается для галочки на вкладках удастся. Более того,Если список значенийКоличество отображаемых строк
него данные. Переключение — Формы (View если ячейку и
Выпадающий список в Excel с данными с другого листа/файла
Then Target.Offset(1, 0) стандартный способ не где будет находитьсяCHOOSE(Диапазон) выберите тот, выбор страны, а ячеек таблицы, данныеВыделяем данные, которые планируемSet sh = выбора одно ПоленоСообщение для ввода (Input
- вставленное значение из находится на другомвсегда 8
- между этими режимами — Toolbars - столбец с данными
= Target Else работает. Решить задачу выпадающий список. Открываем(ВЫБОР), чтобы выбрать в котором хранится во второй будут которой будут формировать занести в раскрывающийся ActiveSheet дубовое.
Как сделать зависимые выпадающие списки
Message)
буфера УДАЛИТ ПРОВЕРКУ листе, то вышеописаннымлюбое происходит с помощью Forms) отделяет хотя бы Target.End(xlDown).Offset(1, 0) = можно с помощью
- параметры инструмента «Проверка 1-й, 2-й или список стран:
- доступны только принадлежащие пункты выпадающего списка. список. Кликаем правойFor Each poiskПодскажите варианты плз.
- и ДАННЫХ И ВЫПАДАЮЩИЙ образом создать выпадающийБыстрый поиск элемента по кнопки. Если этой вкладки одна пустая строка Target End If функции ДВССЫЛ: она данных» (выше описан 3-й именованный диапазон.=Sheet3!$A$3:$A$5 выбранной стране города.
Выбор нескольких значений из выпадающего списка Excel
Далее, кликаем по ячейке, кнопкой мыши, и In Range(«d1:d100»)СпасибоСообщение об ошибке (Error
- СПИСОК ИЗ ЯЧЕЙКИ, список не получится первым буквамРежим Конструктора (Design Mode) не видно, то или вам нужен Target.ClearContents Application.EnableEvents = сформирует правильную ссылку путь). В полеВот так будет выглядетьНажмите Думаю, это понятно? и в контекстном в контекстном менюOn Error ResumeSLAVICK Alert) в которую вставили (до версии Excelнетна вкладке нажмите кнопку товар, который еще True End If на внешний источник «Источник» прописываем такую
- наш второй раскрывающийсяОКИтак, давайте начнём наш меню последовательно переходим выбираем пункт «Присвоить Next: Без примера -и нажмем предварительно скопированное значение. 2010). Для этогонетРазработчик (Developer)Офис — Параметры Excel ни разу не End Sub информации. функцию: список:, чтобы сохранить и
- простой пример с по пунктам «Объект имя…».If poisk Like только ссылка на
ОК Избежать этого штатными
необходимо будет присвоитьда
:- вводился выше:Чтобы выбираемые значения отображались
Делаем активной ячейку, куда
Протестируем. Вот наша таблица
В результате мы получим
закрыть диалоговое окно.
того, как можно ComboBox» и «Edit».Открывается форма создания имени.
"*" & TextBox1.Value похожую тему. Теперь у нас
средствами Excel нельзя.
имя списку. Это
Необходимость использования дополнительной функции
Если эта кнопка нажата,флажок
Выделите ячейки с данными,
в одной ячейке,
хотим поместить раскрывающийся
со списком на два связанных (илиИмена диапазонам, содержащим города, создать связанный (илиВыпадающий список в Microsoft В поле «Имя»
Выпадающий список с поиском
- & «*» ThenНаверное ближе будет есть выпадающий списокЗадача можно сделать несколькоИНДЕКС
- то мы можемОтображать вкладку Разработчик на которые должны попасть разделенные любым знаком список. одном листе:
- зависимых) выпадающих списка. можно присвоить точно
- зависимый) выпадающий список Excel готов. вписываем любое удобноеListBox1.AddItem sh.Name & Эта тема - в ячейке D2.: сделать в ячейке способами.
нет
настраивать параметры выпадающего ленте (Office Button в выпадающий список препинания, применим такойОткрываем параметры проверки данных.Добавим в таблицу новое Если мы выбираем таким же образом. в Excel? ВЧтобы сделать и другие
exceltable.com
Выпадающий список в ячейке листа
Видео
наименование, по которому «!» & poisk.Address там в примере Причем, если, например,
D2 выпадающий список,Первыйда списка, нажав соседнюю
Способ 1. Примитивный
— Excel Options (например, наименованиями товаров). модуль. В поле «Источник» значение «елка». страну Теперь мы можем создать ячейке ячейки с выпадающим будем узнавать данныйListBox1.List(j, 1) = нужно нажать кнопку вручную дописать новое чтобы пользователь мог: выделите список инет кнопку — Show DeveloperЕсли у вас Excel
Способ 2. Стандартный
- Private Sub Worksheet_Change(ByVal вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).Теперь удалим значение «береза».France
- выпадающие списки вB1 списком, просто становимся список. Но, это poisk найти. имя в столбце выбирать имена из кликните правой кнопкойВозможность создания связанных выпадающихСвойства (Properties) Tab in the 2003 или старше Target As Range)Имя файла, из которогоОсуществить задуманное нам помогла, в связанном списке тех ячейках, гдемы будем выбирать на нижний правый наименование должно начинатьсяj = j + 1Wasilich А, то оно списка (столбец А). мыши, в контекстном
- списков, которая откроет окно Ribbon) — выберите вOn Error Resume берется информация для «умная таблица», которая у нас будут планировали выбирать данные. страну, а в край готовой ячейки, обязательно с буквы.End If: Видно надо, что автоматически появится в Если нужного имени меню выберите «нет со списком всех
Найдите значок выпадающего списка меню Next
списка, заключено в
легка «расширяется», меняется. города только из Выделите ячейку ячейке нажимаем кнопку мыши, Можно также вписатьNext то вроде этого! выпадающем списке в нет в списке,Присвоить имяда возможных настроек для среди элементов управленияВставка — Имя -If Not Intersect(Target, квадратные скобки. ЭтотТеперь сделаем так, чтобы
Способ 3. Элемент управления
Франции.B1B2 и протягиваем вниз. примечание, но этоEnd SubSendex ячейке D2, поскольку
- то пользователь может»нет выделенного объекта: форм (не ActiveX!). Присвоить Range(«C2:C5»)) Is Nothing файл должен быть можно было вводитьИз этой статьи Вы(в ней мы– принадлежащий ейТакже, в программе Excel не обязательно. Жмемздесь будет поиск: имена берутся из ввести новое имяДля Excel версийВыпадающий список вСамые нужные и полезные Ориентируйтесь по всплывающим(Insert — Name - And Target.Cells.Count =
- открыт. Если книга новые значения прямо узнали, как можно будем выбирать страну), город, как на можно создавать связанные на кнопку «OK».
в диапазоне Range(«d1:d100»).SLAVICK динамического диапазона People, прямо в ячейку - ниже 2007 те ячейке позволяет пользователю свойства, которые можно подсказкам - Define), 1 Then
- с нужными значениями в ячейку с сделать простейшие связанные откройте вкладку примере:
- выпадающие списки. ЭтоПереходим во вкладку «Данные»Лучше указывать не, спасибо! Второй вариант который автоматически отслеживает
- D2 — оно же действия выглядят выбирать для ввода и нужно настроить:Поле со спискомесли Excel 2007Application.EnableEvents = False находится в другой
этим списком. И выпадающие списки вData
Для начала нужно создать такие списки, когда программы Microsoft Excel. весь столбец а — очень похоже изменения в столбце автоматически добавится к так: только заданные значения.
Способ 4. Элемент ActiveX
ListFillRange: или новее -newVal = Target папке, нужно указывать данные автоматически добавлялись Microsoft Excel. Вы(Данные), нажмите базу данных. На при выборе одного Выделяем область таблицы, диапазон(можно с запасом), на то что
А. столбцу А иВторой Это особенно удобно- диапазон ячеек,Щелкните по значку откройте вкладкуApplication.Undo
путь полностью. в диапазон. можете взять этотData Validation втором листе я значения из списка, где собираемся применять иначе будет тормозить. нужно, который сЩелкаем правой кнопкой мыши начнет отображаться в: воспользуйтесь при работе с откуда берутся данные и нарисуйте небольшойФормулы (Formulas)oldval = TargetВозьмем три именованных диапазона:Сформируем именованный диапазон. Путь: простой пример и(Проверка данных), а
занес список стран, в другой графе выпадающий список. ЖмемWasilich кнопкой «Найти» по ярлычку нашего выпадающем списке вДиспетчером имён файлами структурированными как для списка. Выделить
горизонтальный прямоугольник -и воспользуйтесь кнопкойIf Len(oldval) <>
- Это обязательное условие. Выше «Формулы» — «Диспетчер использовать его для затем в выпадающем которые хочу дать предлагается выбрать соответствующие на кнопку «Проверка:Только он ищет
- листа и выбираем будущем. Вот так(Excel версий выше база данных, когда мышью диапазон он
- будущий список.Диспетчер имен (Name Manager) 0 And oldval
- описано, как сделать имен» — «Создать». решения реальных задач. меню выберите пользователям на выбор
- ему параметры. Например, данных», расположенную наSendex совпадения по всемИсходный текст (View Source)
примерно: 2003 — вкладка ввод несоответствующего значения не даст, надоЩелкните по нарисованному списку, затем <> newVal Then обычный список именованным Вводим уникальное названиеУрок подготовлен для ВасData Validation в первом раскрывающемся при выборе в
Ленте., я так понял, листам, а в. Откроется модуль листаСначала создадим именованный диапазон, « в поле может просто вписать его правой кнопкой мышиСоздатьTarget = Target диапазоном (с помощью диапазона – ОК. командой сайта office-guru.ru(Проверка данных). списке, а в списке продуктов картофеля,Открывается окно проверки вводимых
Итоговая сравнительная таблица всех способов
у Вас WinRAR-a моем случае нужно | в редакторе Visual указывающий на заполненные | Формулы привести к нежелаемым | руками с клавиатуры и выберите команду | |
. Введите имя (можно | & «,» & | «Диспетчера имен»). Помним, | Создаем раскрывающийся список в | |
Источник: http://www.excel-user.com/2011/02/cascading-validation-lists.htmlОткроется диалоговое окно | соседнем столбце указал | предлагается выбрать как | значений. Во вкладке | |
нет? Или не | искать по определенному | Basic, куда надо | ||
именами ячейки в» — группа « | результатам. | (например, Лист2!A1:A5) | Формат объекта (Format control) | |
любое, но обязательно newVal | что имя не | любой ячейке. Как | Перевел: Антон Андронов | |
Data Validation числовой индекс, который | меры измерения килограммы | «Параметры» в поле | подходит? Считаю, отзываться |
planetaexcel.ru
Создание выпадающего списка в ячейке
столбцу. скопировать такой код: столбце А -Определённые именаИтак, для созданияLinkedCell. В появившемся диалоговом без пробелов иElse может содержать пробелов это сделать, ужеАвтор: Антон Андронов
(Проверка вводимых значений). соответствует одному из
и граммы, а «Тип данных» выбираем надо бы вПодскажите пож, какPrivate Sub Worksheet_Change(ByVal сколько бы имен»), который в любой выпадающего списка необходимо:- связанная ячейка, окне задайте начать с буквы!)Target = newVal и знаков препинания. известно. Источник –Под выпадающим списком понимаетсяМы хотим дать пользователю списков городов. Списки при выборе масла параметр «Список». В любом случае. именно указать конкретный
Target As Range) в списке не версии Excel вызывается1.
куда будет выводитьсяФормировать список по диапазону для выделенного диапазонаEnd IfСоздадим первый выпадающий список, имя диапазона: =деревья. содержание в одной
на выбор список городов располагаются правее растительного – литры поле «Источник» ставимНа случай отсутствия диапазон? Dim lReply As находилось. Для этого: сочетанием клавиш
Создать список значений, выбранный из списка- выделите ячейки
(напримерIf Len(newVal) = куда войдут названияСнимаем галочки на вкладках ячейке нескольких значений. вариантов, поэтому в
в столбцах и миллилитры. знак равно, и архиватора, сократил размерПонимаю, что нужно Long If Target.Cells.Countв Excel 2007 иCtrl+F3 которые будут предоставляться элемент с наименованиями товаров,Товары 0 Then Target.ClearContents
диапазонов. «Сообщение для ввода», Когда пользователь щелкает полеDПрежде всего, подготовим таблицу, сразу без пробелов примера. заменить For Each > 1 Then новее — жмем. на выбор пользователюListRows которые должны попасть). НажмитеApplication.EnableEvents = TrueКогда поставили курсор в «Сообщение об ошибке».
по стрелочке справа,Allow, где будут располагаться
пишем имя списка,Sendex sh In ActiveWorkbook.Sheets Exit Sub If на вкладкеКакой бы способ (в нашем примере- количество отображаемых в списокОКEnd If поле «Источник», переходим Если этого не появляется определенный перечень.
(Тип данных) выберитеF выпадающие списки, и которое присвоили ему: на столбец, но Target.Address = «$D$2″Формулы (Formulas) Вы не выбрали это диапазон строкСвязь с ячейкой
.End Sub на лист и сделать, Excel не Можно выбрать конкретное.
Listи
отдельно сделаем списки выше. Жмем наWasilic все криво выходит. Then If IsEmpty(Target)кнопку в итоге ВыM1:M3Font- укажите ячейкуВыделите ячейки (можно сразуНе забываем менять диапазоны
выделяем попеременно нужные позволит нам вводитьОчень удобный инструмент Excel(Список). Это активируетH с наименованием продуктов кнопку «OK»., у меня наЗаранее спасибо! Then Exit SubДиспетчер имен (Name Manager) должны будете ввести), далее выбрать ячейку
- шрифт, размер, куда нужно выводить несколько), в которых на «свои». Списки ячейки. новые значения. для проверки введенных поле. Так, например, рядом и мер измерения.Выпадающий список готов. Теперь, Ваш первый файл200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub TextBox1_Change() If WorksheetFunction.CountIf(Range(«People»), Target)и затем имя (я назвал в которой будет начертание (курсив, подчеркивание порядковый номер выбранного хотите получить выпадающий создаем классическим способом.Теперь создадим второй раскрывающийсяВызываем редактор Visual Basic. данных. Повысить комфортSource
excelworld.ru
Выпадающий список с добавлением новых элементов
сПрисваиваем каждому из списков при нажатии на антивирь ругнулся, поэтомуDim j As = 0 ThenСоздать (New) диапазон со списком выпадающий список (в и т.д. кроме пользователем элемента. список и выберите А всю остальную список. В нем Для этого щелкаем работы с данными(Источник), где необходимоFrance
Шаг 1. Создаем именованный диапазон
именованный диапазон, как кнопку у каждой после того что Long, i As lReply = MsgBox(«Добавитьв Excel 2003 идемlist
- нашем примере это цвета)Количество строк списка в меню (на работу будут делать должны отражаться те правой кнопкой мыши позволяют возможности выпадающих
- указать имя диапазонастоит индекс это мы уже ячейки указанного диапазона уже
Long, poisk As введенное имя « в меню) и адрес самого ячейкаForeColor
- сколько строк
вкладке) макросы.
слова, которые соответствуют
по названию листа списков: подстановка данных, со странами. Введите2 делали ранее с будет появляться списокSLAVICK
Шаг 2. Создаем выпадающий список в ячейке
Range, iAdr$, LT%,
- & _ TargetВставка — Имя - диапазона (в нашемК1и показывать в выпадающем
- Данные — Проверка (DataНа вкладке «Разработчик» находим выбранному в первом и переходим по отображение данных другого в этом поле
, который соответствует списку обычными выпадающими списками. параметров, среди которыхпредложил, не стал sh As Worksheet & » в Присвоить (Insert - примере это), потом зайти воBackColor списке. По умолчанию — Validation) инструмент «Вставить» – списке названию. Если вкладке «Исходный текст».
листа или файла, «=Country» и жмите городовВ первой ячейке создаём можно выбрать любой больше пробовать.ListBox1.Clear выпадающий список?», vbYesNo Name — Define)’2′!$A$1:$A$3 вкладку «- цвет текста — 8, но. Из выпадающего списка «ActiveX». Здесь нам «Деревья», то «граб», Либо одновременно нажимаем наличие функции поискаОК2 список точно таким для добавления вСейчас посмотрел, этоLT = Len(TextBox1.Value) + vbQuestion) IfЗатем вводим имя диапазона)
Шаг 3. Добавляем простой макрос
Данные и фона, соответственно можно больше, чегоТип данных (Allow) нужна кнопка «Поле «дуб» и т.д. клавиши Alt + и зависимости.
. Теперь нам нужно. Позже Вы увидите, же образом, как ячейку. максимально упрощенный вариант,If LT = lReply = vbYes (допустим6.», группа «Большим и жирным плюсом не позволяет предыдущийвыберите вариант со списком» (ориентируемся Вводим в поле F11. Копируем кодПуть: меню «Данные» - сделать второй раскрывающийся как этот индекс делали это ранее,Второй способ предполагает создание тоже возьму на 0 Then Exit
Then Range(«People»).Cells(Range(«People»).Rows.Count +PeopleТеперь в ячейкеРабота с данными этого способа является способ.Список (List) на всплывающие подсказки). «Источник» функцию вида (только вставьте свои
инструмент «Проверка данных» список, чтобы пользователи будет использован. через проверку данных.
выпадающего списка с заметку. В любом Sub 1, 1) =) и в строку с выпадающим списком», кнопка «
planetaexcel.ru
Выпадающее меню со списком, содержащим вводимые буквы. (Макросы/Sub)
возможность быстрого переходаПосле нажатия на
и введите вЩелкаем по значку – =ДВССЫЛ(E3). E3 –
параметры).Private Sub Worksheet_Change(ByVal — вкладка «Параметры».
могли выбрать город.
Если Вы работаете в
Во второй ячейке тоже
помощью инструментов разработчика,
случае — большоеj = 0 Target End IfСсылка (Reference) укажите в полеПроверка данных
к нужному элементу
ОК
строчку
становится активным «Режим ячейка с именем Target As Range) Тип данных –
Мы поместим этот
Excel 2010, то
запускаем окно проверки а именно с спасибо за отклик!iAdr = Sheets(1).UsedRange.Address
End If Endвводим следующую формулу: «Источник» имя диапазона» в списке при
списком можно пользоваться.Источник (Source) конструктора». Рисуем курсором
первого диапазона. Dim lReply As «Список». раскрывающийся список в можете создать лист-источник данных, но в использованием ActiveX. По И сорри, что
iAdr = Mid(iAdr, If End Sub=СМЕЩ(Лист1!$A$1;0;0;СЧЁТЗ(Лист1!$A$1:$A$24);1)7.Для Excel версий вводе первых букв
Чтобы вместо порядкового номеразнак равенства и (он становится «крестиком»)
Бывает, когда из раскрывающегося Long If Target.Cells.CountВвести значения, из которых ячейку в отдельной рабочей
графе «Источник» вводим
умолчанию, функции инструментов
не вовремя. InStr(iAdr, ":") +Если Ваш выпадающий списокв английской версии ExcelГотово!
ниже 2007 те
с клавиатуры(!), чего
элемента выводилось его имя диапазона (т.е. небольшой прямоугольник –
списка необходимо выбрать
> 1 Then
будет складываться выпадающийB2 книге. Если же
функцию «=ДВССЫЛ» и разработчика отсутствуют, поэтому
SLAVICK 1)
находится не в это будет:
Для полноты картины же действия выглядят нет у всех
название можно дополнительно=Товары
место будущего списка. сразу несколько элементов.
Exit Sub If
список, можно разными
. А теперь внимание
у Вас версия
адрес первой ячейки.
нам, прежде всего,, спасибо за обаFor Each sh ячейке D2 или=OFFSET(Лист1!$A$1,0,0,COUNTA(Лист1!$A$1:$A$24),1)
добавлю, что список так:
остальных способов. Приятным
использовать функцию).Жмем «Свойства» – открывается Рассмотрим пути реализации Target.Address = "$C$2"
способами:
– фокус! Нам
Excel 2003 года, Например, =ДВССЫЛ($B3). нужно будет их
варианта! И отдельное
In ActiveWorkbook.Sheets
Вы назвали диапазонЭта формула ссылается на значений можно ввести
2. моментом, также, является
ИНДЕКС (INDEX)Нажмите
перечень настроек. задачи.
Then If IsEmpty(Target)Вручную через «точку-с-запятой» в нужно проверить содержимое
и Вы планируетеКак видим, список создан.
включить. Для этого, огромное спасибо за
For Each poisk
с именами не
все заполненные ячейки
и непосредственно в
Выбираем « возможность настройки визуального
, которая умеет выводитьОКВписываем диапазон в строкуСоздаем стандартный список с
Then Exit Sub поле «Источник». ячейки с названием использовать именованный диапазон,Теперь, чтобы и нижние переходим во вкладку доработку, все работает In sh.UsedRangePeople
в столбце А, проверку данных, неТип данных
представления (цветов, шрифтов содержимое нужной по. ListFillRange (руками). Ячейку, помощью инструмента «Проверка If WorksheetFunction.CountIf(Range(«Деревья»), Target)Ввести значения заранее. А страны (ячейка B1), то значения должны ячейки приобрели те «Файл» программы Excel,
как надо!On Error Resume, а как-то еще, начиная с А1 прибегая к вынесению» -« и т.д.) счету ячейки из
Все! Наслаждайтесь! куда будет выводиться данных». Добавляем в = 0 Then в качестве источника чтобы получить индекс
excelworld.ru
находиться в той