Excel макросы для списков

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

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

Создание раскрывающегося списка

Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».

Создание выпадающего списка.

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

  1. Вручную через «точку-с-запятой» в поле «Источник».
  2. Ввод значений.

  3. Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
  4. Проверка вводимых значений.

  5. Назначить имя для диапазона значений и в поле источник вписать это имя.

Имя диапазона.
Раскрывающийся список.

Любой из вариантов даст такой результат.



Выпадающий список в Excel с подстановкой данных

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

  1. Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
  2. Форматировать как таблицу.

  3. Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
  4. Выпадающий список.

  5. Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:

Ввод значения в источник.

Протестируем. Вот наша таблица со списком на одном листе:

Список и таблица.

Добавим в таблицу новое значение «елка».

Добавлено значение елка.

Теперь удалим значение «береза».

Удалено значение береза.

Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.

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

Ввод данных из списка.

  1. Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
  2. Создание имени.

  3. Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
  4. Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
  5. Сообщение об ошибке.

  6. Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
  7. 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
     
  8. Сохраняем, установив тип файла «с поддержкой макросов».
  9. Сообщение об ошибке.

  10. Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».

Макрос.

Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».

Нажмем «Да» и добавиться еще одна строка со значением «баобаб».

Выпадающий список в Excel с данными с другого листа/файла

Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.

  1. Делаем активной ячейку, куда хотим поместить раскрывающийся список.
  2. Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).

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

Как сделать зависимые выпадающие списки

Возьмем три именованных диапазона:

Три именованных диапазона.

Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.

  1. Создадим первый выпадающий список, куда войдут названия диапазонов.
  2. Список диапазонов.

  3. Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
  4. Таблица со списком.

  5. Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
  6. Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

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

    1. Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
    2. 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
       
    3. Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
    4. 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
       
    5. Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.

    6. 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

    Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.

    Выпадающий список с поиском

    1. На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
    2. Вставить ActiveX.

    3. Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
    4. Элемент ActiveX.

    5. Жмем «Свойства» – открывается перечень настроек.
    6. Свойства ActiveX.

    7. Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.

    Скачать пример выпадающего списка

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

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

Как сделать связанный выпадающий список в «Эксель», зависящий от значения в соседней ячейке.

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

Для начала следует создать обыкновенный выпадающий список.

Для этого необходимо:

  • Войти во вкладку «Данные»;
  • Выбрать опцию «Проверка данных»;
  • Выбрать «Список»;
  • Указать диапазон, из которого будет выбираться выпадающий список или создать список прямо в появившемся поле через знак «;».

После этой процедуры следует записать макрос в документ.

Для записи макроса следует:

  • Открыть вкладку «Разработчик» ( Если вкладка отключена, включите ее в разделе Файл=> Параметры=> Настройка Ленты);

Разработчик

  • Во вкладке «Разработчик» выбрать кнопку «Просмотр кода»;
  • В открывшееся окно записать макрос;

Макрос

  • Закрыть окно с макросом.

Давайте рассмотрим несколько макросов с выпадающими списками.

Первый макрос со смещением списка в сторону (горизонтально).

Горизонтальный список
Текст макроса:
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
указывается разделитель «//». Его можно заменить на любой знак препинания, текст или поставить пробел.

Содержание

  1. Циклический просмотр списка данных на листе с помощью макросов в Excel
  2. Аннотация
  3. Дополнительная информация
  4. Поиск списка с постоянным, известным числом строк
  5. Поиск динамического списка или списка с неизвестным количеством строк
  6. Поиск списка для конкретной записи
  7. Выпадающий список в Excel с помощью инструментов или макросов
  8. Создание раскрывающегося списка
  9. Выпадающий список в Excel с подстановкой данных
  10. Выпадающий список в Excel с данными с другого листа/файла
  11. Как сделать зависимые выпадающие списки
  12. Выбор нескольких значений из выпадающего списка Excel
  13. Выпадающий список с поиском
  14. Создание макросов и пользовательских функций на VBA
  15. Введение
  16. Способ 1. Создание макросов в редакторе Visual Basic
  17. Способ 2. Запись макросов макрорекордером
  18. Запуск и редактирование макросов
  19. Создание кнопки для запуска макросов
  20. Создание пользовательских функций на VBA

Циклический просмотр списка данных на листе с помощью макросов в Excel

Аннотация

При написании макроса Microsoft Visual Basic для приложений (VBA), возможно, придется выполнять циклический просмотр список данных на листе. Существует несколько методов выполнения этой задачи. Раздел “Дополнительная информация” этой статьи содержит сведения о методах, которые можно использовать для поиска в списках следующих типов:

  • Список, содержащий известное, постоянное количество строк.
  • Динамический список или список с неизвестным числом строк.
  • Список, содержащий определенную запись.

Дополнительная информация

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

Поиск списка с постоянным, известным числом строк

Этот код перемещает столбец А в конец списка:

Поиск динамического списка или списка с неизвестным количеством строк

Этот код перемещает столбец А в конец списка. (Этот код предполагает, что каждая ячейка в столбце А содержит запись до конца.)

Примечание Если в столбце A в данных есть пустые ячейки, измените этот код, чтобы он был указан в этом условии. Убедитесь, что пустые ячейки находятся на одинаковом расстоянии друг от друга. Например, если каждая другая ячейка в столбце А пуста (например, такая ситуация может возникнуть, если каждая запись «Record» использует две строки с отступом второй строки), этот цикл может быть изменен следующим образом:

Поиск списка для конкретной записи

Этот код перемещает столбец А в конец списка:

Источник

Выпадающий список в Excel с помощью инструментов или макросов

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

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

Создание раскрывающегося списка

Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».

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

  1. Вручную через «точку-с-запятой» в поле «Источник».
  2. Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
  3. Назначить имя для диапазона значений и в поле источник вписать это имя.

Любой из вариантов даст такой результат.

Выпадающий список в Excel с подстановкой данных

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

  1. Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
  2. Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
  3. Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:

Протестируем. Вот наша таблица со списком на одном листе:

Добавим в таблицу новое значение «елка».

Теперь удалим значение «береза».

Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.

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

  1. Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
  2. Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
  3. Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
  4. Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
  5. Сохраняем, установив тип файла «с поддержкой макросов».
  6. Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».

Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».

Нажмем «Да» и добавиться еще одна строка со значением «баобаб».

Выпадающий список в Excel с данными с другого листа/файла

Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.

  1. Делаем активной ячейку, куда хотим поместить раскрывающийся список.
  2. Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).

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

Как сделать зависимые выпадающие списки

Возьмем три именованных диапазона:

Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.

  1. Создадим первый выпадающий список, куда войдут названия диапазонов.
  2. Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
  3. Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.

Выбор нескольких значений из выпадающего списка Excel

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

  1. Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
  2. Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
  3. Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.

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

Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.

Выпадающий список с поиском

  1. На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
  2. Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
  3. Жмем «Свойства» – открывается перечень настроек.
  4. Вписываем диапазон в строку 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, не раз создавал выпадающие списки, но плохо разбирается в макросах, увидеть эти списки будет серьёзным испытанием для психики, особенно если вы подсунете данный файл, уже адаптированным под ваши задачи. Они пол дня потратят, чтобы понять: «КАК, чёрт возьми, ты это сделал»? :)

Функционал

  1. Создание каскадных выпадающих списков. Количество каскадов не ограничено, но увлекаться не стоит, так как это может повлиять на производительность Excel при работе с ячейками списков. 2-4 каскада более чем достаточно для типовых задач.
  2. В цепочке списков выделяются начальный список, так как он ни от кого не зависит, и конечный список, так как от него никто не зависит. Промежуточные списки всегда от кого-то зависят и всегда являются для кого-то родительскими. Родительский список передаёт своему наследнику своё значение и тот отображает список следующего этапа уже фильтруя возможные варианты по родительскому значению.
  3. При изменении значения ячейки-списка вышестоящего уровня, нижестоящие (зависимые) ячейки очищаются.
  4. При переходе на ячейку, содержащую список, он автоматически открывается, что упрощает и ускоряет выбор значения. Если в выборе нет необходимости, то следует нажать Esc.

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

CascadedLists.zip

Как это настроить для вашего файла с нуля?

Шаг 1

Создайте книгу Excel, которая поддерживает макросы (*.XLSM)

Создайте 3 листа:

  1. Первый — место, где будут находиться ваши каскадные списки. Я далее буду называть этот лист FRONT, а вы можете дать ему имя, которое захотите
  2. Второй — место для таблицы-справочника, столбцы которого будут отображать списки. Этот лист я буду называть REF. Вы опять можете дать другое имя листа, но немного проще будет оставить это.
  3. Третий — вспомогательный лист, назовём его BACK. Имя менять не рекомендую, так как этот лист нам предстоит всё равно сделать скрытым.

Шаг 2

На листе REF создайте таблицу-справочник по аналогии с нашим примером. Таблица не должна содержать пустых ячеек. Первая колонка должна использоваться для списков первого уровня, вторая — для второго и так далее. Вас не должно смущать, что значения в старших колонках могут повторяться — макрос отфильтрует все дубликаты, показывая лишь уникальные значения.

Сделайте эту таблицу «умной». Для этого:

  1. Встаньте на любую ячейку внутри справочника,
  2. выберите в ленте на вкладке ГЛАВНАЯ пункт Форматировать как таблицу,
  3. выберите понравившейся шаблон таблицы, укажите есть ли строка с заголовками, нажмите OK
  4. в ленте на вкладке КОНСТРУКТОР (курсор должен стоять на ячейке таблицы), перейдите в поле ввода Имя таблицы и дайте нашей таблице имя, например Reference

Шаг 3

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

Для создания именованного диапазона:

  1. В ленте выберите вкладку ФОРМУЛЫ, пункт Диспетчер имен
  2. Нажмите кнопку Создать…
  3. Дайте имя rngRef, Область оставьте Книга, в качестве Диапазона укажите =Reference[#Данные] (=Reference[#Data])
  4. Нажмите OK

Шаг 4

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

Шаг 5

Теперь необходимо настроить лист BACK. Для этого:

  1. В ячейку A1 листа BACK внесите имя созданного вами именованного диапазона, то есть rngRef
  2. В те же ячейке на листе FRONT, где у вас будут выпадающие списки, но только на листе BACK необходимо занести данные в определенном формате
  3. Данные в каждой ячейке будут состоять из трёх частей, разделенных точкой с запятой, например «2;A2;C2» или «1;;B3«
  4. Первая часть (до первого символа «;») означает номер столбца в вашем справочнике, который (столбец) будет использован для формирования значений списка.
  5. Вторая часть (между двумя символами «;») означает адрес родительской ячейки. У списков, являющихся первыми в каскаде, на этом месте всегда пустота, так как у них нет родительских ячеек.
  6. Третья часть (справа от второго символа «;») означает адрес ячейки, которая зависит от текущей. У списков, которые замыкают каскад, на этой позиции всегда пустота, например, «3;B4
  7. Скройте лист BACK (правой кнопкой мыши по ярлыку листа, далее выбрать пункт Скрыть)

Шаг 6 (последний)

Нам необходимо записать макрос в нашу созданную книгу

  1. Откройте редактор Visual Basic через комбинацию клавиш Alt+F11
  2. Слева, в окне с именем Project — VBAProject найдите лист FRONT вашей книги (не забудьте, что вы могли его назвать иначе)
  3. Сделайте двойной щелчок мышью по имени данного листа
  4. Скопируйте этот код с сайта в редактор кода Visual Basic (правая часть экрана)
  5. Если вы лист 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!

  • Каскадные комбинированные списки

  • Динамические каскадные списки на основе сводных таблиц

  • Выпадающий список с контекстным поиском

Содержание

  1. Определение метода Range.Replace
  2. Синтаксис
  3. Параметры
  4. Макрос поиска ячейки с выпадающим списком
  5. Поиск функцией Find
  6. Примеры поиска функцией Find
  7. Поиск даты с помощью Find
  8. Предназначение и синтаксис метода Range.Find
  9. Синтаксис метода Range.Find
  10. Параметры метода Range.Find
  11. «Найти и заменить» в Excel
  12. Горячие клавиши
  13. Процедура «Найти и заменить» не работает
  14. Подстановочные знаки, или как найти «звездочку»
  15. Знаки подстановки для поисковой фразы

Определение метода 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:

  • xlValues (-4163) – значения;
  • xlComments (-4144) – примечания*;
  • xlNotes (-4144) – примечания*;
  • [xlFormulas (-4123) – формулы]**.
LookAt Поиск частичного или полного совпадения. Список констант xlLookAt:

  • xlWhole (1) – полное совпадение;
  • xlPart (2) – частичное совпадение.
SearchOrder Определяет способ поиска. Список констант xlSearchOrder:

  • xlByRows (1) – поиск по строкам;
  • xlByColumns (2) – поиск по столбцам.
SearchDirection Определяет направление поиска. Список констант xlSearchDirection:

  • xlNext (1) – поиск вперед;
  • xlPrevious (2) – поиск назад.
MatchCase Определяет учет регистра:

  • False (0) – поиск без учета регистра (по умолчанию);
  • True (1) – поиск с учетом регистра.
MatchByte Условия поиска при использовании двухбайтовых кодировок:

  • False (0) – двухбайтовый символ может соответствовать однобайтовому символу;
  • True (1) – двухбайтовый символ должен соответствовать только двухбайтовому символу.
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: выпадающие списки

Выпадающий список в Microsoft Excel

​Смотрите также​ Next​ то подправьте эти​ и вниз до​ значений на лист​Список​При использовании этого способа,​ диапазона:​Важный нюанс. В качестве​ выбранное значение –​ исходный код листа​ lReply = MsgBox(«Добавить​

​ указать диапазон ячеек​ соответствующий базе данных​

Создание дополнительного списка

​ же книге, можно​ же свойства, как​ а затем кликаем​При работе в программе​If poisk Like​ параметры в макросе​

​ конца — до​ (это так же​» и указываем диапазон​ также возможно указывать​Этот способ частично напоминает​ источника данных для​ в строку LinkedCell.​ готовый макрос. Как​ введенное имя «​ со списком.​ с городами. Если​ на другом листе.​ и в предыдущий​ по надписи «Параметры».​ Microsoft Excel в​

tablitsa-zagotovka-i-spisok-v-microsoft-excel

​ «*» & TextBox1.Value​ на свои.​ последнего имени.​ позволит работать со​ списка​ в качестве​ предыдущий. Основное отличие​

Присвоение имени в Microsoft Excel

​ списка может выступать​ Для изменения шрифта​ это делать, описано​ & _ Target​Назначить имя для диапазона​ пользователь выберет​Мы будем использовать именованные​ раз, выделяем верхние​В открывшемся окне переходим​ таблицах с повторяющимися​ & «*» Then​Всё! Теперь при попытке​

Создание имени в Microsoft Excel

​Выделяем ячейку D2 и​ списком на любом​3.​ListFillRange​ в том, что​ и динамический именованный​ и размера –​ выше. С его​

Проверка данных в Microsoft Excel

​ & » в​ значений и в​Portugal​ диапазоны и сделаем​ ячейки, и при​ в подраздел «Настройка​ данными, очень удобно​ListBox1.AddItem sh.Name &​ ввести новое имя​в Excel 2007 и​ листе). Делается это​Если есть желание​

Параметры вводимых значений в Microsoft Excel

​не только одномерные​ на лист добавляется​ диапазон, например прайс-лист.​ Font.​ помощью справа от​ выпадающий список?», vbYesNo​ поле источник вписать​, то мы должны​ так, чтобы эти​

Выпадающий список в программе Microsoft Excel

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

​ нажатой клавише мышки​ ленты», и ставим​ использовать выпадающий список.​ «!» & poisk.Address​ в ячейку D2​ новее — жмем​ так:​ подсказать пользователю о​ диапазоны. Можно, например​ не элемент управления,​ Тогда при дописывании​Скачать пример выпадающего списка​ выпадающего списка будут​ + vbQuestion) If​

Переход в параметры Microsoft Excel

​ это имя.​ обратиться к базе​ связанные выпадающие списки​ «протаскиваем» вниз.​ флажок напротив значения​ С его помощью​

Включение режима разработчика в Microsoft Excel

​ListBox1.List(j, 1) =​ Excel будет спрашивать​ на вкладке​То есть вручную,​ его действиях, то​ задать диапазон из​ а элемент ActiveX​ новых товаров к​При вводе первых букв​ добавляться выбранные значения.Private​ lReply = vbYes​Любой из вариантов даст​ с индексом​ работали во всех​

Выбор поля со списком в Microsoft Excel

​Всё, таблица создана.​ «Разработчик». Жмем на​ можно просто выбирать​ poisk​… и при утвердительном​

Форма списка в Microsoft Excel

​Данные (Data)​ через​ переходим во вкладку​ двух столбцов и​

Переход в свойства элемента управления в Microsoft Excel

​»Поле со списком»​ прайсу, они будут​ с клавиатуры высвечиваются​ Sub Worksheet_Change(ByVal Target​ Then Range(«Деревья»).Cells(Range(«Деревья»).Rows.Count +​ такой результат.​3​

Свойства элемента управления в Microsoft Excel

​ версиях Excel. Следующий​Мы разобрались, как сделать​ кнопку «OK».​ нужные параметры из​j = j + 1​

Редактирование в Microsoft Excel

​ ответе пользователя автоматически​кнопку​

Выпадающий список в приложении Microsoft Excel

​;​ «​ нескольких строк, указав​из раскрывающегося набора​ автоматически добавляться к​ подходящие элементы. И​ As Range) On​

Протягивание выпадающего списка в Microsoft Excel

Связанные списки

​ 1, 1) =​​, в которой хранятся​ шаг – создать​ выпадающий список в​После этого, на ленте​ сформированного меню. Давайте​End If​ добавлять новое имя​Проверка данных (Data Validation)​(точка с запятой) вводим​Сообщение для ввода​ дополнительно, что выводить​ под кнопкой​ выпадающему списку. Еще​ это далеко не​ Error Resume Next​

​ Target End If​Необходимо сделать раскрывающийся список​ названия городов Португалии.​ именованные диапазоны для​ Экселе. В программе​ появляется вкладка с​

Таблицы в Microsoft Excel

​ выясним, как сделать​Next​ к списку в​в Excel 2003 и​ список в поле​

Присваивание имени в Microsoft Excel

​» и заполняем заголовок​ нужно два столбца​Вставить (Insert)​ одним часто используемым​ все приятные моменты​

Ввод данных в Microsoft Excel

​ If Not Intersect(Target,​ End If End​ со значениями из​ Мы воспользуемся функцией​ наших списков. На​ можно создавать, как​ названием «Разработчик», куда​

Ввод данных для второй ячейки в Microsoft Excel

​ раскрывающийся список различными​

Список создан в Microsoft Excel

​Next​ столбце А и​ старше — выбираем​ «​ и текст сообщения​ (свойство​с вкладки​ трюком для таких​

Таблица создана в Microsoft Excel

​ данного инструмента. Здесь​

​ 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)​​ в котором мы​ с выпадающим списком​ весьма привлекательные результаты,​

Связанный выпадающий список в Excel

​Механизм добавления тот же​ (когда содержимое одного​ в качестве источника​ = False If​Переходим на лист со​ или удаляются данные),​B1​Name Manager​ использовать различные методы​ должен стать выпадающим​Самым удобным, и одновременно​ # (поправил за​: Всем привет!​.​​ хотим его видеть​​4.​​ окупающие все потраченные​​ — выбираем объект​​ списка меняется в​​ сразу два столбца.​ Len(Target.Offset(0, 1)) =​​ списком. Вкладка «Разработчик»​​ они автоматически отражаются​​в таблице с​​(Диспетчер имён). Нажав​ создания. Выбор зависит​​ меню. Затем, кликаем​​ наиболее функциональным способом​ Вас). И Правила​Искал что-то подобное​

Связанный выпадающий список в Excel

​Далее выбираем из выпадающего​ (значения введённые слева-направо​Так же необязательно​ на дополнительные настройки​ из списка и​ зависимости от выбора​У кого мало времени​ 0 Then Target.Offset(0,​ — «Код» -​ в раскрывающемся списке.​ названиями стран. После​ на нее, откроется​ от конкретного предназначения​

​ на Ленте на​ создания выпадающего списка,​ форума почитайте.​ обсуждавшееся, но не​ списка​ будут отображаться в​ можно создать и​ усилия:​ рисуем его на​ в другом).​​ и нужно быстро​​ 1) = Target​​ «Макросы». Сочетание клавиш​​Выделяем диапазон для выпадающего​ того как индекс​ диалоговое окно​​ списка, целей его​​ значок «Вставить», и​

Связанный выпадающий список в Excel

​ является метод, основанный​​SLAVICK​​ нашел.​Тип данных (Allow)​ ячейке сверху вниз).​​ сообщение, которое будет​​Способ 1.​

Связанный выпадающий список в Excel

​ листе. А вот​​Этот способ представляет собой​​ ухватить суть -​​ Else Target.End(xlToRight).Offset(0, 1)​​ для быстрого вызова​ списка. В главном​ будет известен, мы​​Name Manager​​ создания, области применения,​ среди появившихся элементов​ на построении отдельного​

​: Попробуйте так:​

​В чем суть.​​позицию​​При всех своих​ появляться при попытке​

Связанный выпадающий список в Excel

​Примитивный​ дальше начинаются серьезные​ вставку на лист​

​ смотрим обучающее видео:​ = Target End​ – Alt +​ меню находим инструмент​ выберем список, который​​(Диспетчер имён).​​ и т.д.​ в группе «Элемент​ списка данных.​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Private Sub TextBox1_Change()​​ Допустим есть список:​​Список (List)​​ плюсах выпадающий список,​ ввести неправильные данные​Способ 2.​​ отличия от предыдущего​​ нового объекта -​

Связанный выпадающий список в Excel

​Кому интересны подробности и​​ If Target.ClearContents Application.EnableEvents​​ F8. Выбираем нужное​

Связанный выпадающий список в Excel

​ «Форматировать как таблицу».​ станет источником данных​Нажмите кнопку​Автор: Максим Тютюшев​​ 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.​ в двух принципиально​ к диапазонам на​​Один щелчок правой кнопкой​​ снизу, вставляем другой​ списка новое наименование,​ имеет значения. Наличие​

​ формулу:​ Откроется диалоговое окно​ табличку, где можно​

Связанный выпадающий список в Excel

​ со списком. Как​ списком данные, которые​ sh As Worksheet​В ячейке начинаем​ на шаге 1​​ только при непосредственном​​работать будет, но​Элемент ActiveX​ разных состояниях -​ листе. Для этого:​

Связанный выпадающий список в Excel

​ мыши по пустой​ код обработчика.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​Что же делает эта​В поле​

  1. ​ При этом с​Затем мы перемещаемся в​Ввод значений.
  2. ​ Эти данные можно​If LT =​ список со строками,​ диапазона поставить знак​Проверка вводимых значений.
  3. ​ попытаетесь вставить в​ сообщение пользователю о​средняя​ параметры и свойства,​

Имя диапазона. Раскрывающийся список.

​Разработчик (Developer)​ контекстного меню​

​ Resume Next If​

Выпадающий список в Excel с подстановкой данных

​Нажмем «Да» и добавиться​ со словом «Деревья».​ формула? Она ищет​Name​ помощью выпадающих списков,​ «Режим конструктора». Жмем​ размещать как на​ 0 Then Exit​

  1. ​ в которых содержится​ равенства!​ ячейку с​ его предполагаемых действиях,​Форматировать как таблицу.
  2. ​высокая​ двигать его по​. В более ранних​Выбрать из раскрывающегося списка​ Not Intersect(Target, Range(«Н2:К2»))​ еще одна строка​ То есть нужно​ значение из ячейки​(Имя) введите имя​ необходимо ограничить доступные​ на кнопку «Свойства​ этом же листе​ Sub​Выпадающий список.
  3. ​ эта комбинация:​):​проверкой данных​ а вместо сообщения​Возможность настройки шрифта, цвета​ листу и менять​ версиях — панель​(Choose from drop-down list)​

Ввод значения в источник.

​ Is Nothing And​ со значением «баобаб».​ выбрать стиль таблицы​

Список и таблица.

​B1​Country​

Добавлено значение елка.

​ пользователям варианты стран​

Удалено значение береза.

​ элемента управления».​ документа, так и​j = 0​

​ПОЛотенце зеленое​Чтобы Excel позволил нам​значения из буфера​ об ошибке с​ и т.д.​ размеры и -​ инструментов​

Ввод данных из списка.

  1. ​или нажать сочетание​ Target.Cells.Count = 1​Когда значения для выпадающего​ со строкой заголовка.​в списке стран​Создание имени.
  2. ​для нашего первого​ и городов, из​Открывается окно свойств элемента​ на другом, если​iAdr = Sheets(1).UsedRange.Address​
  3. ​ПОЛено дубовое​ в будущем ввести​ обмена, т.е скопированные​ вашим текстом будет​нет​ режиме ввода, когда​Формы (Forms)​Сообщение об ошибке.
  4. ​ клавиш​ Then Application.EnableEvents =​ списка расположены на​ Получаем следующий вид​ и возвращает соответствующий​ именованного диапазона, а​ которых они могут​ управления. В графе​ вы не хотите,​iAdr = Mid(iAdr,​переПОЛох в душе​ в список и​ предварительно любым способом,​ появляться стандартное сообщение.​нет​ единственное, что можно​через меню​ALT+стрелка вниз​ False If Len(Target.Offset(1,​ другом листе или​ диапазона:​ индекс, который затем​ в поле​ выбирать. В первой​ «ListFillRange» вручную через​ чтобы обе таблице​ InStr(iAdr, «:») +​Дописываем дальше, «поле»​ новые имена, снимем​ то Вам это​5.​да​ — выбирать из​
  5. ​Вид — Панели инструментов​. Способ не работает,​Сообщение об ошибке.
  6. ​ 0)) = 0​ в другой книге,​Ставим курсор в ячейку,​ использует функция​Refers to​ ячейке мы сделаем​ двоеточие прописываем диапазон​ располагались визуально вместе.​

Макрос.

​ 1)​ — остается для​ галочки на вкладках​ удастся. Более того,​Если список значений​Количество отображаемых строк​

​ него данные. Переключение​ — Формы (View​ если ячейку и​

Выпадающий список в Excel с данными с другого листа/файла

​ Then Target.Offset(1, 0)​ стандартный способ не​ где будет находиться​CHOOSE​(Диапазон) выберите тот,​ выбор страны, а​ ячеек таблицы, данные​Выделяем данные, которые планируем​Set sh =​ выбора одно Полено​Сообщение для ввода (Input​

  1. ​ вставленное значение из​ находится на другом​всегда 8​
  2. ​ между этими режимами​ — Toolbars -​ столбец с данными​

​ = Target Else​ работает. Решить задачу​ выпадающий список. Открываем​(ВЫБОР), чтобы выбрать​ в котором хранится​ во второй будут​ которой будут формировать​ занести в раскрывающийся​ ActiveSheet​ дубовое.​

Как сделать зависимые выпадающие списки

​ Message)​

Три именованных диапазона.

​ буфера УДАЛИТ ПРОВЕРКУ​ листе, то вышеописанным​любое​ происходит с помощью​ Forms)​ отделяет хотя бы​ Target.End(xlDown).Offset(1, 0) =​ можно с помощью​

  1. ​ параметры инструмента «Проверка​ 1-й, 2-й или​ список стран:​Список диапазонов.
  2. ​ доступны только принадлежащие​ пункты выпадающего списка.​ список. Кликаем правой​For Each poisk​Подскажите варианты плз.​Таблица со списком.
  3. ​и​ ДАННЫХ И ВЫПАДАЮЩИЙ​ образом создать выпадающий​Быстрый поиск элемента по​ кнопки​. Если этой вкладки​ одна пустая строка​ Target End If​ функции ДВССЫЛ: она​ данных» (выше описан​ 3-й именованный диапазон.​=Sheet3!$A$3:$A$5​ выбранной стране города.​Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

    ​Далее, кликаем по ячейке,​ кнопкой мыши, и​ In Range(«d1:d100»)​Спасибо​Сообщение об ошибке (Error​

    1. ​ СПИСОК ИЗ ЯЧЕЙКИ,​ список не получится​ первым буквам​Режим Конструктора (Design Mode)​ не видно, то​ или вам нужен​ Target.ClearContents Application.EnableEvents =​ сформирует правильную ссылку​ путь). В поле​Вот так будет выглядеть​Нажмите​ Думаю, это понятно?​ и в контекстном​ в контекстном меню​On Error Resume​SLAVICK​ Alert)​ в которую вставили​ (до версии Excel​нет​на вкладке​ нажмите кнопку​ товар, который еще​ True End If​ на внешний источник​ «Источник» прописываем такую​
    2. ​ наш второй раскрывающийся​ОК​Итак, давайте начнём наш​ меню последовательно переходим​ выбираем пункт «Присвоить​ Next​: Без примера -​и нажмем​ предварительно скопированное значение.​ 2010). Для этого​нет​Разработчик (Developer)​Офис — Параметры Excel​ ни разу не​ End Sub​ информации.​ функцию:​ список:​, чтобы сохранить и​
    3. ​ простой пример с​ по пунктам «Объект​ имя…».​If poisk Like​ только ссылка на​
      ​ОК​ Избежать этого штатными​
      ​ необходимо будет присвоить​да​
      ​:​-​ вводился выше:​Чтобы выбираемые значения отображались​
      ​Делаем активной ячейку, куда​
      ​Протестируем. Вот наша таблица​
      ​В результате мы получим​
      ​ закрыть диалоговое окно.​
      ​ того, как можно​ ComboBox» и «Edit».​Открывается форма создания имени.​
      ​ "*" & TextBox1.Value​ похожую тему​. Теперь у нас​
      ​ средствами Excel нельзя.​
      ​ имя списку. Это​
      ​Необходимость использования дополнительной функции​
      ​Если эта кнопка нажата,​флажок​
      ​Выделите ячейки с данными,​
      ​ в одной ячейке,​
      ​ хотим поместить раскрывающийся​

    ​ со списком на​ два связанных (или​Имена диапазонам, содержащим города,​ создать связанный (или​Выпадающий список в Microsoft​ В поле «Имя»​

    Выпадающий список с поиском

    1. ​ & «*» Then​Наверное ближе будет​ есть выпадающий список​Задача​ можно сделать несколько​ИНДЕКС​Вставить ActiveX.
    2. ​ то мы можем​Отображать вкладку Разработчик на​ которые должны попасть​ разделенные любым знаком​ список.​ одном листе:​Элемент ActiveX.
    3. ​ зависимых) выпадающих списка.​ можно присвоить точно​Свойства ActiveX.
    4. ​ зависимый) выпадающий список​ Excel готов.​ вписываем любое удобное​ListBox1.AddItem sh.Name &​ Эта тема -​ в ячейке D2.​: сделать в ячейке​ способами.​

    ​нет​

    ​ настраивать параметры выпадающего​ ленте (Office Button​ в выпадающий список​ препинания, применим такой​Открываем параметры проверки данных.​Добавим в таблицу новое​ Если мы выбираем​ таким же образом.​ в Excel? В​Чтобы сделать и другие​

    exceltable.com

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

Видео

​ наименование, по которому​ «!» & poisk.Address​ там в примере​ Причем, если, например,​

​ D2 выпадающий список,​Первый​да​ списка, нажав соседнюю​

Способ 1. Примитивный

​ — Excel Options​ (например, наименованиями товаров).​ модуль.​ В поле «Источник»​ значение «елка».​​ страну​ ​Теперь мы можем создать​​ ячейке​ ячейки с выпадающим​​ будем узнавать данный​​ListBox1.List(j, 1) =​ нужно нажать кнопку​ вручную дописать новое​ чтобы пользователь мог​: выделите список и​нет​ кнопку​ — Show Developer​Если у вас Excel​

Выпадающее меню вȎxcel

Способ 2. Стандартный

  1. ​Private Sub Worksheet_Change(ByVal​ вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).​Теперь удалим значение «береза».​France​
  2. ​ выпадающие списки в​B1​ списком, просто становимся​ список. Но, это​​ poisk​ найти.​ ​ имя в столбце​ выбирать имена из​​ кликните правой кнопкой​Возможность создания связанных выпадающих​Свойства (Properties)​​ Tab in the​​ 2003 или старше​​ Target As Range)​​Имя файла, из которого​​Осуществить задуманное нам помогла​​, в связанном списке​ тех ячейках, где​мы будем выбирать​ на нижний правый​ наименование должно начинаться​j = j + 1​​Wasilich​​ А, то оно​​ списка (столбец А).​​ мыши, в контекстном​
  3. ​ списков​, которая откроет окно​ Ribbon)​ — выберите в​On Error Resume​ берется информация для​​ «умная таблица», которая​ у нас будут​​ планировали выбирать данные.​​ страну, а в​​ край готовой ячейки,​​ обязательно с буквы.​​End If​: Видно надо, что​​ автоматически появится в​​ Если нужного имени​ меню выберите «​​нет​​ со списком всех​

Выпадающее меню вȎxcel

​Найдите значок выпадающего списка​​ меню​​ Next​

​ списка, заключено в​

Выпадающее меню вȎxcel

​ легка «расширяется», меняется.​ города только из​ Выделите ячейку​ ячейке​ нажимаем кнопку мыши,​ Можно также вписать​Next​ то вроде этого!​ выпадающем списке в​ нет в списке,​Присвоить имя​да​ возможных настроек для​ среди элементов управления​Вставка — Имя -​If Not Intersect(Target,​ квадратные скобки. Этот​Теперь сделаем так, чтобы​

Способ 3. Элемент управления

​ Франции.​B1​B2​ и протягиваем вниз.​ примечание, но это​End Sub​Sendex​ ячейке D2, поскольку​

  1. ​ то пользователь может​»​​нет​​ выделенного объекта:​ форм (не ActiveX!).​ Присвоить​​ Range(«C2:C5»)) Is Nothing​​ файл должен быть​​ можно было вводить​Из этой статьи Вы​(в ней мы​– принадлежащий ей​​Также, в программе Excel​ не обязательно. Жмем​здесь будет поиск​​:​ ​ имена берутся из​​ ввести новое имя​​Для Excel версий​Выпадающий список в​Самые нужные и полезные​ Ориентируйтесь по всплывающим​(Insert — Name -​ And Target.Cells.Count =​
  2. ​ открыт. Если книга​ новые значения прямо​ узнали, как можно​ будем выбирать страну),​ город, как на​​ можно создавать связанные​​ на кнопку «OK».​
    Выпадающее меню вȎxcel
    ​ в диапазоне Range(«d1:d100»).​SLAVICK​ динамического диапазона People,​ прямо в ячейку​
  3. ​ ниже 2007 те​ ячейке позволяет пользователю​ свойства, которые можно​​ подсказкам -​​ Define),​ 1 Then​
  • ​ с нужными значениями​​ в ячейку с​ сделать простейшие связанные​ откройте вкладку​ примере:​
  • ​ выпадающие списки. Это​​Переходим во вкладку «Данные»​Лучше указывать не​, спасибо! Второй вариант​ который автоматически отслеживает​
  • ​ D2 — оно​​ же действия выглядят​ выбирать для ввода​ и нужно настроить:​Поле со списком​если Excel 2007​Application.EnableEvents = False​ находится в другой​

​ этим списком. И​​ выпадающие списки в​​Data​

​Для начала нужно создать​ такие списки, когда​ программы Microsoft Excel.​ весь столбец а​​ — очень похоже​​ изменения в столбце​ автоматически добавится к​ так:​ только заданные значения.​

Выпадающее меню вȎxcel

Способ 4. Элемент ActiveX

​ListFillRange​:​ или новее -​newVal = Target​ папке, нужно указывать​ данные автоматически добавлялись​​ Microsoft Excel. Вы​​(Данные), нажмите​ базу данных. На​​ при выборе одного​​ Выделяем область таблицы,​​ диапазон(можно с запасом),​​ на то что​

Выпадающее меню вȎxcel

​ А.​ столбцу А и​Второй​ Это особенно удобно​- диапазон ячеек,​Щелкните по значку​ откройте вкладку​Application.Undo​

​ путь полностью.​ в диапазон.​ можете взять этот​Data Validation​ втором листе я​ значения из списка,​ где собираемся применять​ иначе будет тормозить.​ нужно, который с​Щелкаем правой кнопкой мыши​ начнет отображаться в​: воспользуйтесь​ при работе с​ откуда берутся данные​ и нарисуйте небольшой​Формулы (Formulas)​oldval = Target​​Возьмем три именованных диапазона:​​Сформируем именованный диапазон. Путь:​​ простой пример и​​(Проверка данных), а​

Выпадающее меню вȎxcel

​ занес список стран,​ в другой графе​ выпадающий список. Жмем​Wasilich​ кнопкой «Найти»​​ по ярлычку нашего​​ выпадающем списке в​Диспетчером имён​ файлами структурированными как​ для списка. Выделить​

Выпадающее меню вȎxcel

​ горизонтальный прямоугольник -​и воспользуйтесь кнопкой​If Len(oldval) <>​

  • ​Это обязательное условие. Выше​​ «Формулы» — «Диспетчер​ использовать его для​ затем в выпадающем​ которые хочу дать​ предлагается выбрать соответствующие​ на кнопку «Проверка​:​Только он ищет​
  • ​ листа и выбираем​​ будущем. Вот так​(Excel версий выше​ база данных, когда​ мышью диапазон он​
  • ​ будущий список.​​Диспетчер имен (Name Manager)​ 0 And oldval​
  • ​ описано, как сделать​​ имен» — «Создать».​ решения реальных задач.​ меню выберите​ пользователям на выбор​
  • ​ ему параметры. Например,​​ данных», расположенную на​​Sendex​​ совпадения по всем​Исходный текст (View Source)​

​ примерно:​ 2003 — вкладка​ ввод несоответствующего значения​ не даст, надо​Щелкните по нарисованному списку​, затем​ <> newVal Then​ обычный список именованным​ Вводим уникальное название​Урок подготовлен для Вас​Data Validation​ в первом раскрывающемся​ при выборе в​

​ Ленте.​, я так понял,​ листам, а в​​. Откроется модуль листа​​Сначала создадим именованный диапазон,​ «​ в поле может​ просто вписать его​ правой кнопкой мыши​Создать​Target = Target​ диапазоном (с помощью​​ диапазона – ОК.​​ командой сайта office-guru.ru​(Проверка данных).​ списке, а в​ списке продуктов картофеля,​Открывается окно проверки вводимых​

Выпадающее меню вȎxcel

Итоговая сравнительная таблица всех способов

​ у Вас 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:M3​Font​- укажите ячейку​Выделите ячейки (можно сразу​Не забываем менять диапазоны​

​ выделяем попеременно нужные​ позволит нам вводить​​Очень удобный инструмент 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​

Выпадающее меню вȎxcel

Шаг 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)​ инструмент «Вставить» –​ списке названию. Если​​ вкладке «Исходный текст».​

Выпадающее меню вȎxcel

​ листа или файла,​ «=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)​ на всплывающие подсказки).​ «Источник» функцию вида​ (только вставьте свои​

​ инструмент «Проверка данных»​ список, чтобы пользователи​ будет использован.​ через проверку данных.​

Выпадающее меню вȎxcel

​ выпадающего списка с​ заметку. В любом​ 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.UsedRange​People​
​ в столбце А,​ проверку данных, не​Тип данных​

​ представления (цветов, шрифтов​​ содержимое нужной по​​.​​ ListFillRange (руками). Ячейку,​ помощью инструмента «Проверка​ If WorksheetFunction.CountIf(Range(«Деревья»), Target)​Ввести значения заранее. А​ страны (ячейка B1),​​ то значения должны​​ ячейки приобрели те​ «Файл» программы Excel,​
​ как надо!​On Error Resume​, а как-то еще,​ начиная с А1​ прибегая к вынесению​» -«​ и т.д.)​ счету ячейки из​
​Все! Наслаждайтесь!​​ куда будет выводиться​ данных». Добавляем в​ = 0 Then​ в качестве источника​ чтобы получить индекс​

excelworld.ru

​ находиться в той​

Понравилась статья? Поделить с друзьями:
  • Excel макросы для работы с таблицами
  • Excel макросы сортировка данных
  • Excel макросы для построения графиков
  • Excel макросы создать ячейку
  • Excel макросы для объединения ячеек без потери