jonny0
Пользователь
Сообщений: 90
Регистрация: 28.07.2015
Ну все, поломал мозги окончательно. Не работает у меня ничего. Уже повторил полностью пример от Павлова, но НИЧЕГО не получается! Картинки не меняются. Да и вообще я по этим формулам не могу догнать как будут меняться картинки — таблицу проиндексировали, с выбором связали, соответсвие картинке назначили, НО с каких делов картинка будет вставляться в нужное место я не допонимаю.
Кузьмич, ваш пример проще, чем у Павлова, но из за того ещё больше ничего не ясно. Почему на листе 1 у вас картинки вставляются туда, куда вставляются?
Изменено: jonny0 — 09.11.2015 10:09:37
Во многих случаях может потребоваться динамическая вставка изображения в ячейку в зависимости от значения ячейки. Например, вы хотите, чтобы соответствующие изображения динамически изменялись с различными значениями, которые вы вводите в указанной ячейке. Эта статья покажет вам, как этого добиться.
Вставка и изменение изображения динамически на основе значений, которые вы вводите в ячейку
Динамическое изменение изображения на основе значений ячеек с помощью замечательного инструмента
Вставка и изменение изображения динамически на основе значений, которые вы вводите в ячейку
Как показано на скриншоте ниже, вы хотите отображать соответствующие изображения динамически на основе значения, введенного вами в ячейку G2. При вводе банана в ячейку G2 изображение банана будет отображаться в ячейке H2. При вводе «Ананас» в ячейку G2 изображение в ячейке H2 превратится в соответствующее изображение ананаса.
1. Создайте на листе два столбца, первый диапазон столбцов. A2: A4 содержит название картинки, а второй диапазон столбца B2: B4 содержит соответствующие изображения. См. Показанный снимок экрана.
2. Нажмите Формулы > Менеджер имен.
3. в Менеджер имен диалогового окна, нажмите Новинки кнопка. Затем Редактировать имя всплывает диалоговое окно, введите Продукт в Имя и фамилия поле введите формулу ниже в поле Относится к поле, а затем щелкните OK кнопка. Смотрите скриншот:
=INDIRECT(ADDRESS(2-1+MATCH(Sheet2!$G$2, Sheet2!$A$2:$A$4, 0), 2))
Заметки:
1). В формуле первое число 2 — номер строки вашего первого продукта. В этом случае мое первое название продукта находится в строке 2.
2). Лист2! $ G $ 2 это ячейка, на основе которой вы хотите, чтобы соответствующее изображение изменялось динамически.
3). Sheet2! $ A $ 2: $ A $ 4 это ваш список названий продуктов на текущем листе.
4). Последний номер 2 — это номер столбца, в котором находятся ваши изображения.
Вы можете изменить их по своему усмотрению в приведенной выше формуле.
4. Закрой Менеджер имен диалоговое окно.
5. Выберите изображение в столбце «Изображения» и нажмите Ctrl + C ключи одновременно, чтобы скопировать его. Затем вставьте его в новое место на текущем листе. Здесь я копирую изображение яблока и помещаю его в ячейку H2.
6. Введите название фрукта, например Apple, в ячейку G2, щелкните, чтобы выбрать вставленное изображение, и введите формулу. = Продукт в Панель формул, затем нажмите Enter ключ. Смотрите скриншот:
Отныне при смене имени фрукта в ячейке G2 картинки в ячейке H2 будут динамически превращаться в соответствующие.
Вы можете быстро выбрать название фрукта, создав раскрывающийся список, содержащий все названия фруктов в ячейке G2, как показано на скриншоте ниже.
Легко вставляйте изображения в связанные ячейки на основе значений ячеек с помощью замечательного инструмента
Многим новичкам в Excel этот метод непрост. Здесь рекомендую Раскрывающийся список изображений особенность Kutools for Excel. С помощью этой функции вы можете легко создать динамический раскрывающийся список с полностью совпадающими значениями и изображениями.
Пожалуйста, сделайте следующее, чтобы применить функцию раскрывающегося списка изображений Kutools for Excel для создания раскрывающегося списка динамических изображений в Excel.
1. Во-первых, вам нужно создать два столбца, отдельно содержащие значения и соответствующие изображения, как показано на скриншоте ниже.
2. Нажмите Кутулс > Импорт Экспорт > Сопоставить Импорт изображений.
3. в Раскрывающийся список изображений диалоговое окно необходимо настроить следующим образом.
3.1) Если вы создали столбцы значений и изображений на шаге 1 выше, проигнорируйте этот шаг;
3.2) В Step2 раздел, выберите два столбца, которые вы создали;
3.3) В Step3 В разделе выберите диапазон для вывода раскрывающегося списка динамического изображения.
Примечание: In Step3 раздел, нужно выбрать две колонки для размещения результатов. Один столбец предназначен для значений, а другой — для соответствующих изображений.
3.4) Нажмите ОК.
4. Затем Kutools for Excel всплывает диалоговое окно, напоминающее вам о том, что в процессе будут созданы некоторые промежуточные данные, щелкните Да для продолжения.
Затем создается динамический раскрывающийся список изображений. Изображение будет динамически меняться в зависимости от элемента, который вы выбрали в раскрывающемся списке.
Нажмите, чтобы узнать больше об этой функции …
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Статьи по теме:
- Как создать динамическую гиперссылку на другой лист в Excel?
- Как динамически извлечь список уникальных значений из диапазона столбцов в Excel?
- Как создать динамический ежемесячный календарь в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Вставка в ячейку формулу (картинку) по условию |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Хитрости »
6 Февраль 2020 22740 просмотров
Вставить картинку в лист — по списку или выбору из ячейки
Сама по себе задача вставки картинки на листе не сложная и ответ лежит на поверхности: это доступно прямо из меню: Вставка(Insert) -группа Иллюстрации(Illustrations) —Рисунок(Picture):
Кодом VBA вставить тоже не сложно, даже макрорекордер записывает это действие:
Sub InsertPicture() ActiveSheet.Pictures.Insert("G:ДокументыИзображенияExcel_vba_ru.png"). _ Select End Sub
Но что делать, если вставить надо картинку из заранее известной папки, но с изменяющимся именем? А если при этом еще надо не просто вставить — а подогнать размер картинки под размер ячейки? Например, в ячейке А2 название товара(соответствует названию картинки), а в В2 должно быть изображение. Здесь уже посложнее. Но тоже вполне реализуемо при помощи VBA
'--------------------------------------------------------------------------------------- ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' https://www.excel-vba.ru ' info@excel-vba.ru ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' Purpose: вставка в ячейку картинки с подгонкой под размеры ячейки '--------------------------------------------------------------------------------------- Sub InsertPicToCell() 'путь к папке с картинками Const sPicsPath As String = "G:ДокументыИзображения" Dim sPicName As String, sPFName As String, sSpName As String Dim oShp As Shape Dim zoom As Double 'в этой ячейке выпадающий список с именами картинок sPicName = Range("A2").Value 'если имя картинки не задано If sPicName = "" Then Exit Sub End If 'проверяем наличие картинки в папке sPFName = sPicsPath & sPicName If Dir(sPFName, 16) = "" Then Exit Sub End If 'в эту ячейку вставляем картинку With Range("B2") On Error Resume Next 'задаем картинке уникальный адрес, 'привязанный к адресу ячейки sSpName = "_" & .Address(0, 0) & "_autopaste" 'если картинка уже есть - удаляем её Set oShp = ActiveSheet.Shapes(sSpName) If Not oShp Is Nothing Then oShp.Delete End If 'вставляем выбранную картинку Set oShp = ActiveSheet.Shapes.AddPicture(sPFName, False, True, .Left + 1, .Top + 1, -1, -1) 'определяем размеры картинки в зависимости от размера ячейки zoom = Application.Min(.Width / oShp.Width, .Height / oShp.Height) oShp.Height = oShp.Height * zoom - 2 'переименовываем вставленную картинку(чтобы потом можно было заменить) oShp.Name = sSpName End With End Sub
Чтобы использовать код необходимо создать в книге стандартный модуль(переходим в редактор VBA(Alt+F11) —Insert —Module) и вставить в него приведенный выше код. Чтобы картинка вставилась в ячейку, надо записать имя картинки в ячейку A2, нажать сочетание клавиш Alt+F8 и выбрать макрос InsertPicToCell. Не очень удобно, правда?
Значит теперь попробуем сделать так, чтобы при каждом изменении в А2 картинка менялась сама, без необходимости запускать каждый раз код вручную. Для этого придется использовать возможность Excel отслеживать такие события, как изменения ячейки(чтобы лучше понять где это лучше сразу прочитать статью Что такое модуль? Какие бывают модули? и особое внимание уделить описанию про модули листов). Теперь чуть переделываем код:
Private Sub Worksheet_Change(ByVal Target As Range) '--------------------------------------------------------------------------------------- ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' https://www.excel-vba.ru ' info@excel-vba.ru ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' Purpose: вставка в ячейку картинки с подгонкой под размеры ячейки '--------------------------------------------------------------------------------------- 'путь к папке с картинками Const sPicsPath As String = "G:ДокументыИзображения" Dim sPicName As String, sPFName As String, sSpName As String Dim oShp As Shape Dim zoom As Double 'т.к. список с именами картинок у нас в ячейке А2, 'то определяем, что значение изменилось именно в ней ' если в ячейке А2 имена картинок, а список товара в другой ячейке ' то надо заменить А2 на ту, которая изменяется списком или руками If Intersect(Target, Range("A2")) Is Nothing Then 'изменения не в А2 - ничего не делаем, завершаем код Exit Sub End If 'в этой ячейке выпадающий список с именами картинок sPicName = Range("A2").Value 'если имя картинки не задано If sPicName = "" Then Exit Sub End If 'проверяем наличие картинки в папке sPFName = sPicsPath & sPicName If Dir(sPFName, 16) = "" Then Exit Sub End If 'в эту ячейку вставляем картинку With Range("B2") On Error Resume Next 'задаем картинке уникальный адрес, 'привязанный к адресу ячейки sSpName = "_" & .Address(0, 0) & "_autopaste" 'если картинка уже есть - удаляем её Set oShp = ActiveSheet.Shapes(sSpName) If Not oShp Is Nothing Then oShp.Delete End If 'вставляем выбранную картинку Set oShp = ActiveSheet.Shapes.AddPicture(sPFName, False, True, .Left + 1, .Top + 1, -1, -1) 'определяем размеры картинки в зависимости от размера ячейки zoom = Application.Min(.Width / oShp.Width, .Height / oShp.Height) oShp.Height = oShp.Height * zoom - 2 'переименовываем вставленную картинку(чтобы потом можно было заменить) oShp.Name = sSpName End With End Sub
Теперь переходим на лист, где в А2 будет изменяться название картинки -правая кнопка мыши на этом листе —Посмотреть код(View Code). Вставляем код выше. Все, теперь при любом изменении в А2 картинка будет изменяться(если указанный файл будет найден в нужной папке).
Если картинки расположены не в «G:ДокументыИзображения», а в той же папке, что и сама книга с кодом, достаточно эту строку
Const sPicsPath As String = «G:ДокументыИзображения»
заменить такими
Dim sPicsPath As String
sPicsPath = ThisWorkbook.Path & «»
тогда папка с книгой будет определяться автоматически.
Но я понимаю, что куда правильнее в ячейке А2 при помощи выпадающего списка выбирать наименование товара, а в В2 при помощи функции ВПР(VLOOKUP) подтягивать из справочника название картинки и уже по этому названию вставлять картинку. Но подстроить код под это уже не сложно. Приводить его здесь не буду, т.к. можно будет запутаться с описанием списка, функций, где и что. Тем более что сам код практически не отличается. К тому же именно в этой реализации код есть в приложенном к статье файле.
Скачать файл:
Вставить картинку в ячейку (366,9 KiB, 2 392 скачиваний)
И еще часто встречающаяся задача по вставке картинок — это вставка картинок массово. Т.е. вставить картинки на основании значений, записанных в столбце. В данном случае это столбец В. А вставлять картинки будем в столбец С, подгоняя размеры картинок под размер каждой ячейки и проверяя, не вставляли ли мы эту картинку туда ранее
Впрочем, основная часть кода была приведена выше — здесь мы лишь добавим цикл по ячейкам. Так же в этом коде мы используем диалог выбора папки, в котором просматривать картинки:
'--------------------------------------------------------------------------------------- ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' https://www.excel-vba.ru ' info@excel-vba.ru ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' Purpose: вставка в ячейку картинки с подгонкой под размеры ячейки '--------------------------------------------------------------------------------------- Option Explicit Sub InsertPictureByVal() Dim sPicsPath As String Dim sPicName As String, sPFName As String, sSpName As String Dim llastr As Long, lr As Long Dim oShp As Shape Dim zoom As Double 'выбираем путь к папке с картинками With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выбрать папку с картинками" 'заголовок окна диалога .ButtonName = "Выбрать папку" .Filters.Clear 'очищаем установленные ранее типы файлов .InitialFileName = ThisWorkbook.Path 'назначаем первую папку отображения .InitialView = msoFileDialogViewLargeIcons 'вид диалогового окна If .Show = 0 Then Exit Sub 'показываем диалог sPicsPath = .SelectedItems(1) 'считываем путь к папке End With ' если путь надо указать статичный - вместо диалога прописываем одну строку ' sPicsPath = "C:images" 'проверяем, есть ли слеш после пути к папке 'если нет - добавляем, иначе путь к картинке будет неверный If Right(sPicsPath, 1) <> Application.PathSeparator Then sPicsPath = sPicsPath & Application.PathSeparator End If 'определяем последнюю ячейку по столбцу с именами картинок llastr = Cells(Rows.Count, 2).End(xlUp).Row 'если кроме шапки в столбце с именами картинок ничего нет If llastr < 2 Then Exit Sub End If 'цикл по столбцу с именами картинок For lr = 2 To llastr sPicName = Cells(lr, 2).Value 'проверяем наличие картинки в папке sPFName = sPicsPath & sPicName If Dir(sPFName, 16) <> "" And sPicName <> "" Then 'в эту ячейку вставляем картинку With Cells(lr, 3) 'задаем картинке уникальный адрес, 'привязанный к адресу ячейки sSpName = "_" & .Address(0, 0) & "_autopaste" 'если картинка уже есть - удаляем её Set oShp = Nothing On Error Resume Next Set oShp = ActiveSheet.Shapes(sSpName) If Not oShp Is Nothing Then oShp.Delete End If On Error GoTo 0 'вставляем выбранную картинку Set oShp = ActiveSheet.Shapes.AddPicture(sPFName, False, True, .Left + 1, .Top + 1, -1, -1) 'определяем размеры картинки в зависимости от размера ячейки zoom = Application.Min(.Width / oShp.Width, .Height / oShp.Height) oShp.Height = oShp.Height * zoom - 2 'переименовываем вставленную картинку(чтобы потом можно было заменить) oShp.Name = sSpName End With End If Next End Sub
Прикладываю пример в формате ZIP-архива, т.к. вместе с самим файлом с кодом я приложил папку images, которая содержит картинки, используемые для вставки в файле. Папка images и сам файл с кодом должны быть распакованы в одну папку.
Скачать файл:
Вставить картинку в ячейку (366,9 KiB, 2 392 скачиваний)
Обратная задача — сохранение картинок из листа — уже разбиралась мной в этой статье: Как сохранить картинки из листа Excel в картинки JPG
Так же см.:
Как сохранить картинки из листа Excel в картинки JPG
При вставке из VBA картинки на лист ошибка «Метод paste из класса worksheet завершен неверно»
Как скопировать картинку из примечания?
Копирование картинки из примечания
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Вставка картинок по условию
Автор NooBasTiK, 16.04.2017, 15:25
« назад — далее »
День добрый. Необходимо вставлять картинки по условию. Почитал что выдал интернет не нашел свой вариант, а сообразить самому не получилось. Пример прикладываю. Т.е. где стоит знак «X» выше должна вставляться определенная картинка.
Это я читал, не то. Мне надо что бы при постановке знака, в определенную строку (укладка, сварка и пр.) выставлялась картинка определенная данному типу (сварке, укладке и пр.) в одну линию, т.к. линейный объект.Как я понял тут без vba не обойтись возможно и ошибаюсь.
Если я правильно понимаю, Вы пытаетесь «нарисовать» линию, состоящую из участков разного типа. Выбор типа участка (и их количества) остается за пользователем.
Тогда почему бы не последовать методике, описанной на Планете, и не сделать некоторое количество выпадающих_списков (выбор пользователем типа участка) и соответствующее количества ячеек, в которые будут выводиться «выбранные» картинки?
Да, рисуется линия исходя из того в каком месте стоит крестик. Мой файл будет состоять примерно из 4 тыс столбцов и делать как в примере чекнешся. И более удобно пользователю протягивать крестик что бы появлялись картинки.
Предлагаю подумать о псевдографике
Цитироватьфайл будет состоять примерно из 4 тыс столбцов и делать как в примере чекнешся
Быстрее файл с ума сойдет от такого количества рисунков
Зачем? Подход к решению проблемы нерациональный.
Вы одновременно сможете увидеть 10 (ну, пускай 20), столбцов. Все остальное — лишняя нагрузка на файл. Не его нужно жалеть — себя: тормоза при открытии, «задумчивость» при работе, «поломка» от непосильной ноши. Оно Вам надо?
Вариант: при выборе определеного диапазона (20-100 столбцов) в мини-таблицу подставлются данные из исходной таблицы, к ней (к мини-) подставляются нужные рисунки.
Выбор можно реализовать с помощью выпадающих списков, полосой прокрутки на листе, макросом…
Попутно: лист удобнее просматривать по вертикали.
Картинки простенькие сделанные фигурами excel. И как в итоге распечатать всю таблицу?
Разместите 4000 фигур и посмотрите размер файла.
Печатать можно таким же образом, постранично.
Но хозяин — барин… Наше дело посоветовать, Ваше — отказаться )
Может базу данных замутить?
Рядом с файлом разместить картинки (или несколько объектов Excel на листе в укромном месте).
Таблицу — в массив. Проверяем в цикле каждый столбец. Нашли знак, определили, в какой строке (какую картинку копировать), вставили рисунок над таблицей. Привязка — по положению ячейки на листе (.Left и .Top)…
Где-то так. Писать код некогда.
Я так примерно и представлял. Библиотека картиночек которые соответствуют определённой ситуации. Но как в VBA это делать я не знаю
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
Вставка картинок по условию