Поиск рисунков в Excel: от простого к продвинутому

Почему поиск изображений в Excel вызывает сложности

Работая с Excel, многие пользователи сталкиваются с парадоксальной ситуацией: в таблице есть десятки вставленных рисунков, фигур или SmartArt, но найти конкретный элемент среди них оказывается сложнее, чем отыскать иголку в стоге сена. В отличие от текста, который можно искать через Ctrl+F, графические объекты не индексируются стандартным поиском. Это создаёт проблемы при редактировании больших файлов, где изображения разбросаны по разным листам или даже скрыты за другими объектами.

Дополнительную путаницу вносят вложенные объекты — например, картинки внутри ячеек (через функцию ВСТАВИТЬ → Объект) или графики, привязанные к диапазонам данных. Такие элементы часто игнорируются при ручном поиске, хотя могут занимать критически важное место в структуре документа. К счастью, в Excel 2016–2023 и Microsoft 365 есть скрытые инструменты, а для сложных случаев подойдут макросы на VBA.

В этой статье мы разберём все возможные способы поиска рисунков — от базовых (через панель выбора объектов) до продвинутых (скрипты для поиска по метаданным). Особое внимание уделим типичным «ловушкам»: например, почему Найти и выделить не работает для фигур или как найти изображение, которое «провалилось» под слой диаграммы.

Способ 1: Панель выбора объектов — быстрый обзор

Самый простой метод, который работает во всех версиях Excel начиная с 2010 — это панель Выбор и видимость. Она отображает все объекты на текущем листе, включая скрытые или перекрытые другими элементами. Чтобы её открыть:

  1. Перейдите на вкладку Главная.
  2. В группе Редактирование нажмите Найти и выделитьВыбор объектов (или используйте горячие клавиши Alt+H → FD → O).

В открывшемся окне вы увидите список всех объектов с их типами: Рисунок, Фигура, Надпись и т. д. Кликните по названию — и Excel автоматически выделит искомый элемент на листе, даже если он скрыт под другими слоями.

Минус метода: панель не ищет по именам файлов или метаданным (например, дате добавления). Она просто перечисляет объекты в порядке их создания. Если вам нужно найти конкретный рисунок среди сотен, этот способ малоэффективен.

Способ 2: Поиск по имени объекта (если оно задано)

Мало кто знает, но в Excel можно присваивать имена графическим объектам — точно так же, как именованным диапазонам. Если вы (или автор файла) заранее назвали рисунок, найти его можно через диспетчер имён:

  • 🔹 Откройте вкладку ФормулыДиспетчер имён.
  • 🔹 В списке найдите имена, начинающиеся с Picture, Chart или Shape.
  • 🔹 Дважды кликните по имени — Excel переместит вас к объекту.

Если имен нет, их можно добавить вручную. Для этого:

  1. Выделите рисунок.
  2. В строке формул (слева от панели fx) введите имя, например Логотип_компании.
  3. Нажмите Enter.

Этот метод идеален для больших файлов с множеством повторяющихся изображений (например, логотипов или иконок). Однако он требует предварительной подготовки — если имена не заданы, поиск не сработает.

📊 Как часто вы именуете объекты в Excel?
Всегда
Только для важных элементов
Никогда не делал этого
Не знал, что это возможно

Способ 3: Фильтрация по типу объекта (VBA-скрипт)

Для продвинутых пользователей, которым нужно найти все рисунки определенного типа (например, только .png или только фигуры), подойдёт макрос на VBA. Он обходит все листы книги и выделяет объекты по заданным критериям.

Вот скрипт для поиска всех вставленных рисунков (не фигур!):

Sub FindAllPictures()

Dim ws As Worksheet

Dim shp As Shape

For Each ws In ActiveWorkbook.Worksheets

For Each shp In ws.Shapes

If shp.Type = msoPicture Then

shp.Select

MsgBox "Рисунок найден на листе: " & ws.Name & vbCrLf & _

"Тип: " & shp.Name & vbCrLf & _

"Размер: " & shp.Width & "x" & shp.Height, vbInformation

End If

Next shp

Next ws

End Sub

Чтобы запустить его:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Запустите макрос клавишей F5.

Скрипт последовательно выделит каждый рисунок и покажет его параметры. Для поиска фигур замените msoPicture на msoAutoShape, а для диаграмм — на msoChart.

Как модифицировать скрипт для поиска по имени файла?

Добавьте строку If InStr(1, shp.Name, "искомое_слово", vbTextCompare) > 0 Then перед shp.Select. Это позволит искать рисунки, в названии которых есть указанный текст (регистр не важен).

Способ 4: Поиск скрытых или перекрытых изображений

Одна из самых распространённых проблем — когда рисунок есть на листе, но его не видно из-за:

  • 🖼️ Перекрытия другими объектами (например, диаграммой или фигурой).
  • 👁️ Скрытия через свойство Visible = FalseVBA).
  • 📄 Размещения на другом листе (особенно если листы скрыты).

Чтобы найти такие объекты:

  1. Используйте панель Выбор объектов (см. Способ 1).
  2. Если объект не выделяется, проверьте видимость листа: правый клик по ярлычку листа → Показать.
  3. Для объектов с Visible = False запустите этот макрос:
    Sub ShowHiddenShapes()
    

    Dim shp As Shape

    For Each shp In ActiveSheet.Shapes

    If shp.Visible = msoFalse Then

    shp.Visible = msoTrue

    shp.Select

    End If

    Next shp

    End Sub

Проверьте все листы книги (включая скрытые)|Используйте панель "Выбор объектов"|Запустите макрос для показа скрытых фигур|Проверьте слои (перекрытия) вручную-->

Обратите внимание: некоторые объекты могут быть привязаны к ячейкам и перемещаться вместе с ними. Если ячейка пустая или скрыта (через фильтр), рисунок тоже станет невидимым. В этом случае поможет отмена фильтра (Данные → Фильтр → Очистить).

Способ 5: Поиск по метаданным (размер, дата добавления)

Если вам нужно найти рисунки по дате создания, размеру или формату (например, только .jpg), стандартные инструменты Excel не помогут. Здесь потребуется комбинация VBA и Windows Script Host.

Следующий скрипт извлекает метаданные из вставленных рисунков и выводит их в новом листе:

Sub ExtractPictureMetadata()

Dim ws As Worksheet, newWs As Worksheet

Dim shp As Shape, i As Integer

Set newWs = Worksheets.Add

newWs.Name = "Мetaданные_рисунков"

newWs.Cells(1, 1).Value = "Лист"

newWs.Cells(1, 2).Value = "Имя объекта"

newWs.Cells(1, 3).Value = "Тип"

newWs.Cells(1, 4).Value = "Ширина"

newWs.Cells(1, 5).Value = "Высота"

i = 2

For Each ws In ActiveWorkbook.Worksheets

For Each shp In ws.Shapes

If shp.Type = msoPicture Then

newWs.Cells(i, 1).Value = ws.Name

newWs.Cells(i, 2).Value = shp.Name

newWs.Cells(i, 3).Value = "Рисунок"

newWs.Cells(i, 4).Value = shp.Width

newWs.Cells(i, 5).Value = shp.Height

i = i + 1

End If

Next shp

Next ws

newWs.Columns.AutoFit

End Sub

После запуска скрипта вы получите таблицу со всеми рисунками книги, отсортированными по листам. Чтобы добавить дату создания, потребуется расширенный код с использованием FileSystemObject (доступен по запросу в комментариях).

Способ 6: Поиск рисунков в защищённых файлах

Если книга защищена паролем или правами на редактирование, большинство методов поиска перестают работать. В этом случае:

  • 🔒 Снимите защиту листа (Рецензирование → Снять защиту листа).
  • 📁 Сохраните файл как .xlsm (с поддержкой макросов) и используйте VBA-скрипты из предыдущих способов.
  • 🖥️ Для файлов с ограничением на редактирование (например, отправленных по почте) попробуйте открыть их в Excel Online — там иногда доступны инструменты поиска, заблокированные в десктопной версии.

Если снять защиту невозможно, остаётся единственный вариант — поиск по визуальным признакам:

  1. Прокручивайте лист с шагом в 1 экран (PgDn/PgUp).
  2. Используйте масштаб 40–60% (View → Масштаб), чтобы увидеть больше области.
  3. Включите Линейку (Вид → Линейка) — она поможет ориентироваться по координатам.

Таблица: Сравнение методов поиска рисунков в Excel

Метод Поддерживаемые объекты Требуемые навыки Ограничения
Панель выбора объектов Рисунки, фигуры, диаграммы Базовые Не ищет по имени/метаданным
Диспетчер имён Только именованные объекты Базовые Требует предварительного именования
VBA (поиск по типу) Рисунки, фигуры, диаграммы Средние Не работает в Excel Online
VBA (метаданные) Только рисунки Продвинутые Не показывает дату создания
Поиск в PDF Все визуальные объекты Базовые Требует экспорта файла

Выбор метода зависит от задачи. Для разового поиска подойдёт панель выбора, а для аудита большого файла — VBA-скрипты. Если вам нужно найти все логотипы в книге или удалить дубликаты, комбинируйте несколько подходов.

FAQ: Частые вопросы о поиске рисунков в Excel

Можно ли искать рисунки по содержимому (например, найти все изображения с логотипом компании)?

Нет, Excel не поддерживает поиск по визуальному содержимому изображений. Однако вы можете:

  • Использовать Power Query для извлечения метаданных (если рисунки связаны с ячейками).
  • Экспортировать рисунки в папку (через VBA) и искать дубликаты с помощью сторонних утилит (например, Duplicate Cleaner).
Почему панель "Выбор объектов" не показывает некоторые рисунки?

Вероятные причины:

  • Рисунок вставлен как фон листа (Разметка страницы → Фон).
  • Объект находится на скрытом листе.
  • Рисунок является частью SmartArt или группы фигур (разгруппируйте его).
Как найти рисунок, который "привязан" к ячейке и исчез после фильтрации?

Отмените фильтр (Данные → Фильтр → Очистить) или проверьте настройки привязки:

  1. Выделите ячейку, к которой привязан рисунок.
  2. Нажмите Главная → Найти и выделить → Перейти (F5).
  3. В поле "Ссылка" введите адрес ячейки (например, A1) и нажмите Enter.

Если рисунок не появился, он мог быть удалён вместе с данными при применении фильтра.

Можно ли автоматически переименовать все рисунки в книге по шаблону?

Да, с помощью этого макроса (замените "Префикс_" на нужное название):

Sub RenameAllPictures()

Dim ws As Worksheet, shp As Shape, i As Integer

i = 1

For Each ws In ActiveWorkbook.Worksheets

For Each shp In ws.Shapes

If shp.Type = msoPicture Then

shp.Name = "Префикс_" & i

i = i + 1

End If

Next shp

Next ws

MsgBox "Переименовано " & (i - 1) & " рисунков.", vbInformation

End Sub

Как извлечь все рисунки из Excel в отдельную папку?

Используйте этот скрипт (создаст папку ExportedPictures на рабочем столе):

Sub ExportAllPictures()

Dim ws As Worksheet, shp As Shape

Dim exportPath As String

exportPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\ExportedPictures\"

If Dir(exportPath, vbDirectory) = "" Then MkDir exportPath

For Each ws In ActiveWorkbook.Worksheets

For Each shp In ws.Shapes

If shp.Type = msoPicture Then

shp.Copy

With ChartObjects.Add(0, 0, shp.Width, shp.Height).Chart

.Paste

.Export exportPath & shp.Name & ".png"

.Parent.Delete

End With

End If

Next shp

Next ws

MsgBox "Экспорт завершён!", vbInformation

End Sub

Скрипт сохраняет рисунки в формате .png с оригинальными именами.