Skif_79 Пользователь Сообщений: 56 |
Всем доброго времени суток! Похоже «венцом» схемы реализации моих перерасчетов будет исполнение данной задачки. В написании макросов абсолютный НОЛЬ, хотя учиться никогда не поздно, а лучше всего это делать на конкретном схожем примере.. Так вот, суть возникшей сложности : Необходим макрос или формула, которые значения ячеек из диапазона О8:О3000 листа Данные последовательно подставят в ячейку С77 листа Расчеты , а значения ячеек из диапазона К8:К3000 листа Данные последовательно подставят в ячейку Н76 листа Расчеты, при том что подставление должно идти параллельно по строкам А8:АP8 на основе этой подсказки постараюсь реализовать остальные схемы перерасчетов, которые фигурирую на даном листе. вот только входные ячейки листа Расчеты останутся прежними, а именно С77 и Н76. В связи с этим возникает вопрос — Как организовать выполнение двух и более макросов,которые имеют входные и выходные данные на одних и тех же листах, но ссылаются на разные диапазоны ячеек. Вернее на листе Данные у них диапазоны разные, а вот на листе Расчеты ячейки одни и те же.. Не знаю, как доходчиво смог изложить существующую проблему.. Четко понимаю, что куда нужно подставлять, а вот не знаю как организовать это подставление последовательным и без «наворачивания» книги лишними дополнительными листами.. |
Примерно так Sub bb() |
|
Skif_79 Пользователь Сообщений: 56 |
Все работает !!!! Спасибо ! Вот только вопрос — как избавиться от #ЗНАЧ!? и еще один момент — исполнение макроса подстановки, необходимо выполнять только в случае наличия значений и в ячейки О8 и в К8. Если в какой то из них нет значения, то R8 оставлять пустой, а переходить на проверку и заполнение О8, К8 и R8 соответственно. |
Так как ?? Может кто нибудь помочь внести корректировки в макрос ? |
|
Добавьте оператор If Sub bb() |
|
Skif_79 Пользователь Сообщений: 56 |
Уважаемый, Казанский, Вы в очередной раз стали «соломинкой для утопающего» Огромной спасибо ! все работает замечательно! надеюсь, на основе этого макроса смогу реализовать намеченные задумки по пересчетам.. |
Skif_79 Пользователь Сообщений: 56 |
Уважаемый, Казанский! Я находил несколько вариантов ускорения работы макроса на сайте, но не соображу как их можно корректно внести в данный макрос. |
ikki Пользователь Сообщений: 9709 |
{quote}{login=skif}{date=14.05.2012 03:39}{thema=}{post}Занимает кучу времени!{/post}{/quote} и так — несколько тысяч раз подряд. >> как можно ускорить… у меня был случай — ускоряли с человеком его самодельный макрорекодерный макрос с кое-как прикрученными циклами… суть была такая же — изменение в цикле входных данных для расчетов, запись на лист, расчет, считывание с листа, запись в журнал работы. просидели один день + две ночи, ускорили почти в 2000 раз (я сам удивился! фрилансер Excel, VBA — контакты в профиле |
ну… вижу у Вас опыт комментирования сообщений большой.. |
|
Hugo Пользователь Сообщений: 23253 |
Можно сократить на некоторую долю — если заполнять результатами не ячейки по-одной, а созданный пустой массив. |
ikki Пользователь Сообщений: 9709 |
ну, если переносить расчеты в макрос не можете / не хотите, Sub bb() ускорение однозначно будет, а вот насколько значительным — судить сложно. фрилансер Excel, VBA — контакты в профиле |
Skif_79 Пользователь Сообщений: 56 |
{quote}{login=Hugo}{date=14.05.2012 05:35}{thema=}{post}Можно сократить на некоторую долю — если заполнять результатами не ячейки по-одной, а созданный пустой массив. |
Hugo Пользователь Сообщений: 23253 |
Попробуйте так (без проверки): Sub bb() |
ikki Пользователь Сообщений: 9709 |
только сейчас заметил: вероятно, в макросе имеется небольшпя неточность для случаев пустых ячеек в столбцах O и K — сейчас макрос просто пропускает такие строки, НЕ МЕНЯЯ соответствующую ячейку в столбце R. я советую добавить строку фрилансер Excel, VBA — контакты в профиле |
Hugo Пользователь Сообщений: 23253 |
Если данные обрабатываются группами — то думаю несложно этот код доработать: Но тестить не на чем — сообразите хоть какие данные и формулы в файле. |
Hugo Пользователь Сообщений: 23253 |
Сам что-то придумал… Sub bb() Set Inp1 = [Расчеты!C77] |
Skif_79 Пользователь Сообщений: 56 |
Попробовал предложенные варианты и убедился, что есть тут место для чуда Товарищи, аль Господа, ikki & Hugo крайне признателен Вам за активное участие и содействие. Спасибо ! |
Skif_79 Пользователь Сообщений: 56 |
Hugo, данный макрос интересен, но есть один нюанс — при целенаправленном/случайном удалении какого-нибудь значения из диапазонов в столбцах О, К, R после первого исполнения макроса, блокируется его работа при повторном исполнении/перерасчете. Дальнейшее выполнение не возможно, до тех пор пока не удалить все данные расчета по столбцу R. Это не очень удобно, т.к. провоцирует дополнительные манипуляции пользователя. |
Skif_79 Пользователь Сообщений: 56 |
У меня возник дополнительный вопрос — каким образом и где конкретно необходимо изменить макрос Sub bb() для того чтоб использовать дополнительную «троицу» диапазоновстолбцов листа Данные, так же подставляя их в те же самые «входные ячейки» листа Расчеты. Если проще это расписать на макросе предложенном ikki, то можно и на нем.. Это не принципиально. Скорость исполнения обоих макросов приемлима. более того скажу, что оба макроса «взял на заметку» для дальнейшей работы.. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Каким бы хорошим не был макрос, он не будет работать (или ничего не обработает), если удалять данные. Исключите вот это: |
Skif_79 Пользователь Сообщений: 56 |
Дело в том, что есть задумки об использовании нескольких «троиц» столбцов данных для увеличения статистики перерасчетов. Комп вроде «мощный» намерен напрягать его по полной.. |
Skif_79 Пользователь Сообщений: 56 |
{quote}{login=Юрий М}{date=15.05.2012 08:00}{thema=}{post}Каким бы хорошим не был макрос, он не будет работать (или ничего не обработает), если удалять данные. {/post}{/quote} |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
{quote}{login=skif}{date=15.05.2012 08:19}{thema=Re: }{post}Конечно можно организовать Кнопку по «стиранию» всего диапазона R, но повторяюсь, что это дополнительные манипуляции{/post}{/quote}Зачем кнопку? Перечитайте сообщение ikki от 14.05.2012, 17:53 |
Skif_79 Пользователь Сообщений: 56 |
Вы правы. Спасибо, что обратили мое внимание на рекомендацию ikki. может порекомендуете с чего начать в познании азов VBB? не постыжусь слова «для чайников» |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Список полезной литературы можно посмотреть в «Копилке» |
Skif_79 Пользователь Сообщений: 56 |
|
Skif_79 Пользователь Сообщений: 56 |
Так как с дополнительным вопрос — каким образом и где конкретно необходимо изменить макрос ? Sub bb() для того чтоб использовать дополнительную «троицу» диапазоновстолбцов листа Данные, так же подставляя их в те же самые «входные ячейки» листа Расчеты. Если проще это расписать на макросе предложенном ikki, то можно и на нем.. Это не принципиально. |
Hugo Пользователь Сообщений: 23253 |
Чтоб сильно не мудрить, напишите ещё один такой макрос Sub cc() с другими диапазонами в строках Ну и затем выполнять макрос sub запускающий() |
Skif_79 Пользователь Сообщений: 56 |
Согласно Вашим рекомендациям я все и сделал P.S.: чуток занят был.., по сему благодарю с некоторым опозданием. НО ИСКРЕННЕ! |
Skif_79 Пользователь Сообщений: 56 |
#30 26.05.2012 21:04:02 {quote}{login=Hugo}{date=15.05.2012 11:40}{thema=}{post}Чтоб сильно не мудрить, напишите ещё один такой макрос Sub cc() с другими диапазонами в строках… Ну и затем выполнять макрос — |
0 / 0 / 0 Регистрация: 04.04.2020 Сообщений: 43 |
|
1 |
|
Макрос для подстановки значений в формулу и копирования результата вычисления06.10.2021, 11:32. Показов 2794. Ответов 10
Доброго дня, во вложении файл с примером. Записью макроса обойтись не могу, т.к. нужно задавать диапазон для таблицы с исходными числами для подстановки в макрос. Есть формула, результат на выходе которой, условно зависит от одной задаваемой величины (на самом деле там много параметров, но нужно прогнать расчет для выявления зависимости от одного показателя). Нужен макрос который будет брать эти величины, подставлять их в заданную ячейку (откуда значение уже берет формула), затем копировать полученное значение результата расчета в отдельный столбец рядом со столбцом задаваемой величины. Нужно циклом прогнать расчет по всем заданным числам, и вывести результат расчета в соседний столбец. Спасибо!
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
06.10.2021, 11:32 |
Ответы с готовыми решениями: Макрос для поиска и подстановки значений перебором Мне необходим макрос, который бы… Макрос для сравнения значений в массивах и копирования на отдельный лист Нужна Ваша помощь.
Я благодарен за поддержку, которую вы мне оказываете. Я действительно… Макрос на вычисления лучшего результата 10 |
2632 / 1637 / 745 Регистрация: 23.03.2015 Сообщений: 5,143 |
|
06.10.2021, 13:32 |
2 |
SergeyBelov, Здесь и макрос не нужен…
0 |
5942 / 3154 / 698 Регистрация: 23.11.2010 Сообщений: 10,524 |
|
06.10.2021, 13:42 |
3 |
Narimanych, да не, все верно, в случае 1 в В4 должна быть единица, тогда мин = 134.
0 |
0 / 0 / 0 Регистрация: 04.04.2020 Сообщений: 43 |
|
06.10.2021, 14:45 [ТС] |
4 |
Во вложении ход расчета. Видимо я не совсем понятно расписал суть. Миниатюры
0 |
530 / 467 / 183 Регистрация: 11.12.2013 Сообщений: 2,459 |
|
06.10.2021, 15:00 |
5 |
как мне кажется ничего подставлять в ячейку В4 не надо, просто считайте значение из ячейки D1 в переменную и дальше в макросе используйте эту переменную для вычислений.
0 |
0 / 0 / 0 Регистрация: 04.04.2020 Сообщений: 43 |
|
06.10.2021, 15:18 [ТС] |
6 |
как мне кажется ничего подставлять в ячейку В4 не надо, просто считайте значение из ячейки D1 в переменную и дальше в макросе используйте эту переменную для вычислений. Логично, но, в моем случае та часть файла которая связана с ячейкой B4 и формулами в стоках 1 и 2, должна остаться нетронутой. Файл посчитан по конкретному значению B4. А макрос нужен как раз что бы иметь табличку со значениями в столбце E, которые могут получится при различных соответствующих им значениям D. Тот макрос который мне нужен, это что бы взять и провести обсчет неповоротливого файла, подставляя в ячейку B4 разные значения. Структуру формул менять нельзя. Можно конечно вручную повбивать значения в B4 и копировать значения из B2, но мне нужно проверить скажем 50 чисел. Привожу фрагмент записи макроса: Вот нужно сделать такой же алгоритм только что бы его можно было задать сразу через указание ячеек получения данных для подстановки D1 Код Sub Perebor() Range("D4").Select Selection.Copy Range("B4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("B2").Select Application.CutCopyMode = False Selection.Copy Range("E4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D5").Select Application.CutCopyMode = False Selection.Copy Range("B4").Select ActiveSheet.Paste Range("B2").Select Application.CutCopyMode = False Selection.Copy Range("E5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D6").Select Application.CutCopyMode = False Selection.Copy Range("B4").Select ActiveSheet.Paste Range("B2").Select Application.CutCopyMode = False Selection.Copy Range("E6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("E8").Select End Sub
0 |
530 / 467 / 183 Регистрация: 11.12.2013 Сообщений: 2,459 |
|
06.10.2021, 16:44 |
7 |
не уверен что сделал то, что нужно, но посмотрите на всякий случай
1 |
0 / 0 / 0 Регистрация: 04.04.2020 Сообщений: 43 |
|
07.10.2021, 14:24 [ТС] |
8 |
Добрый день. Видимо я своим файлом примера ввел в заблуждение. Приведу более развернутое описание. Ведется расчет срока окупаемости (курсовая), есть файл с расчетом. Его структура на изображении. В сами формулы макрос не должен вмешиваться. Задача макроса брать значения из таблички «вариация тарифа» и подставлять в ячейку отмеченную стрелочкой, затем полученное значение из другой ячейки «срок окупаемости» копировать и заносить в таблицу в соседний столбец. Сам файл трогать нельзя. Поэтом и прошу помочь с макросом, т.к. он нужен как «примочка» к текущему расчету что бы ускорить обсчет различных величин тарифа и получить соответствующие им сроки окупаемости. Миниатюры
0 |
5942 / 3154 / 698 Регистрация: 23.11.2010 Сообщений: 10,524 |
|
07.10.2021, 14:57 |
9 |
SergeyBelov, лучше приложите файл, замените свои подписи на «овцы» и «бараны», оно точно не к чему)
1 |
0 / 0 / 0 Регистрация: 04.04.2020 Сообщений: 43 |
|
07.10.2021, 15:29 [ТС] |
10 |
Во вложении файл с задачей. Насколько смог подробно описал требуемые для макроса действия.
0 |
SergeyBelov 0 / 0 / 0 Регистрация: 04.04.2020 Сообщений: 43 |
||||
08.10.2021, 15:39 [ТС] |
11 |
|||
Нашел на эксельпедии вот такой макрос:
Если заменить 2 выделенные строки кода на действие копировать в такую то ячейку и потом скопировать результат из третьей, и затем записать в четвертую, этот алгоритм будет работать? Я так понимаю что будет все записываться в одну ячейку. Что бы макрос записал столбец с результатом, нужно параллельно запускать второй цикл для заполнения ячеек с результатом? Спасибо!
0 |
Во вложении очень полезный макрос «Подстановка», написанный под версию Excel 2003.
Он подставляет данные по ключу из одной книги в другую, может суммировать, выбирать большее или меньшее из подставляемых значений. Очень удобно.
Добавляется автоматически в Надстройки при запуске файла.
При изменении настроек безопасности в Excel и установки компонентов VBA он прекрасно работает в версии 2007. Но вот в Excel 2010 работать не хочет.
Помогите, пожалуйста, разобраться, в чём проблема и «починить» файлик.
Запускается так: наводим на «Подстановка» в списке надстроек, в выпадающем списке выбираем Лист-источник, далее двойной щелчок по любой ячейке в столбце с данными, которые хотим подставить, нажимаем ОК. Потом двойной щелчок мышью по ячейке в столбце с ключами. Наживаем ОК. Потом переходим в файл, куда будем подставлять. Наводим мышкой на Подстановка, выбираем Лист-получатель. Опять выбираем столбец, куда подставляем и по каким ключам. Наводим на Подстановка и нажимаем Выполнить и заполнить пустые (например). И макрос по типу ВПР всё подставит (просуммирует).
[moder]Дайте теме более конкретное название в соответствии с Правилами форума[/moder]
При работе с табличными данными в Excel часто требуется отредактировать большой объем значений в ячейках, дописать текст в конце или в начале значений, подставить заданный символ в определенное положение либо заменить один символ другим во всех значениях ячеек заданного диапазона.
Для решения всех перечисленных задач в приложении Excel в наличии есть широкий набор инструментов от мгновенного заполнения (автоматического заполнения значений) до формул и функций. Есть у этих инструментов и свои ограничения, а также некоторое неудобство в использовании, связанное с необходимостью все манипуляции со значениями проводить в отдельных столбцах, а некоторые преобразования осуществлять с промежуточными вычислениями.
Кроме стандартных решений, встроенных в приложение Excel, описанные выше задачи можно решать при помощи разработок, использующих встроенный в приложения Office язык программирования VBA (Visual Basic for Application). Об одной из таких разработок и пойдет речь далее.
Надстройка для Excel работает со значениями выделенных диапазонов ячеек. Значением для подстановки может служить любой символ либо их сочетание. Кроме этого предусмотрена возможность задать для подстановки одиночный символ по его ASCII-коду.
надстройка для быстрой замены символов и подстановки значений
Подстановка значения в конце либо в начале значений ячейки
Для быстрой подстановки указанного значения во все значения выделенного диапазона ячеек достаточно лишь выделить диапазон, указать подставляемое значение и выбрать соответствующую опцию в разделе выбора позиции для подстановки.
Подстановка значения в заданную позицию
Быстрая вставка заданного одиночного символа или значения из нескольких символов в определенную позицию исходных значений осуществляется также просто, необходимо активировать опцию «Номер позиции» и установить в нем числовое значение – то есть именно ту позицию, в которую будет произведена вставка.
Вставка непечатаемых символов
Чтобы вставить непечатаемый (невидимый) символ, например, перевод строки, соответствующий сочетанию горячих клавиш Alt+Enter, в диалоговом окне надстройки можно использовать возможность ввода ASCII-кода вместо самого символа. Таким образом, для вставки перевода строки необходимо выбрать опцию «Символ с ASCII-кодом:» и в текстовом поле указать значение 10.
Стандартная замена значений
При использовании стандартного поиска и замены значений, который активируется нажатием сочетания горячих клавишь Ctrl+F, происходит замена ВСЕХ найденных значений, но часто нужно произвести выборочную замену, например найти и заменить только те значения, которые находятся после десятого символа или сделать только три замены, оставив остальные найденные значения без изменений. Это позволяет сделать функция, используемая в надстройке.
Замена значений от заданной позиции
При замене одного значения на другое в соответствующих текстовых полях указываются эти значения и вместо искомого значения производится замена на подставляемое значение, аналогично тому, как это делается стандартным поиском с последующей заменой. Если установить флажок в поле «начиная с позиции» и выставить числовое значение, то значения расположенные до указанной позиции заменяться не будут.
Замена значений с заданным количеством замен
Установка флажка в поле «количество замен» позволяет ограничить количество замен установленным числовым значением. Дополнительные условия для поиска и замены допускается использовать как по отдельности, так и одновременно, что позволяет сделать этот инструмент гораздо более гибким по сравнению со стандартными средствами Excel.
Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.
Очень удобный инструмент Excel для проверки введенных данных. Повысить комфорт работы с данными позволяют возможности выпадающих списков: подстановка данных, отображение данных другого листа или файла, наличие функции поиска и зависимости.
Создание раскрывающегося списка
Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».
Ввести значения, из которых будет складываться выпадающий список, можно разными способами:
- Вручную через «точку-с-запятой» в поле «Источник».
- Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
- Назначить имя для диапазона значений и в поле источник вписать это имя.
Любой из вариантов даст такой результат.
Выпадающий список в Excel с подстановкой данных
Необходимо сделать раскрывающийся список со значениями из динамического диапазона. Если вносятся изменения в имеющийся диапазон (добавляются или удаляются данные), они автоматически отражаются в раскрывающемся списке.
- Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
- Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
- Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:
Протестируем. Вот наша таблица со списком на одном листе:
Добавим в таблицу новое значение «елка».
Теперь удалим значение «береза».
Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.
Теперь сделаем так, чтобы можно было вводить новые значения прямо в ячейку с этим списком. И данные автоматически добавлялись в диапазон.
- Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
- Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
- Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
- Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
- Сохраняем, установив тип файла «с поддержкой макросов».
- Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».
Private Sub Worksheet_Change(ByVal Target As Range) Dim lReply As Long If Target.Cells.Count > 1 Then Exit Sub If Target.Address = "$C$2" Then If IsEmpty(Target) Then Exit Sub If WorksheetFunction.CountIf(Range("Деревья"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("Деревья").Cells(Range("Деревья").Rows.Count + 1, 1) = Target End If End If End If End Sub
Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».
Нажмем «Да» и добавиться еще одна строка со значением «баобаб».
Выпадающий список в Excel с данными с другого листа/файла
Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.
- Делаем активной ячейку, куда хотим поместить раскрывающийся список.
- Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).
Имя файла, из которого берется информация для списка, заключено в квадратные скобки. Этот файл должен быть открыт. Если книга с нужными значениями находится в другой папке, нужно указывать путь полностью.
Как сделать зависимые выпадающие списки
Возьмем три именованных диапазона:
Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.
- Создадим первый выпадающий список, куда войдут названия диапазонов.
- Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
- Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
- Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
- Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
- Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.
- На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
- Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
- Жмем «Свойства» – открывается перечень настроек.
- Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.
Выбор нескольких значений из выпадающего списка Excel
Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("Е2:Е9")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset(0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("Н2:К2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset(1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
newVal = Target
Application.Undo
oldval = Target
If Len(oldval) <> 0 And oldval <> newVal Then
Target = Target & "," & newVal
Else
Target = newVal
End If
If Len(newVal) = 0 Then Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.
Выпадающий список с поиском
Скачать пример выпадающего списка
При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.