Excel найти значение в другой книге

  • Советы по Excel
  • Функции Excel
  • Формулы Excel
  • Excel Диаграммы
  • Советы по словам
  • Советы по Outlook

Как искать / находить значения в другой книге?

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

  • Данные Vlookup и возвращаемые значения из другой книги в Excel
  • Данные Vlookup и возвращаемые значения из другой закрытой книги с VBA

Данные Vlookup и возвращаемые значения из другой книги в Excel

Например, вы создаете таблицу «Покупка фруктов» в Excel, и теперь вам нужно просмотреть фрукты из другой книги и вернуть соответствующие цены, как показано на скриншотах ниже. Здесь я расскажу вам, как решить эту проблему с помощью функции VLOOKKUP в Excel.

1. Откройте обе книги, из которых вы будете просматривать значения и возвращать значения.

2. Выберите пустую ячейку, в которую вы вернете цену, введите формулу = ВПР (B2; [Price.xlsx] Sheet1! $ A $ 1: $ B $ 24,2; FALSE) в него, а затем перетащите его маркер заполнения, чтобы применить эту формулу к диапазону по мере необходимости.

Заметки:
(1) В приведенной выше формуле B2 — это плод, который вы будете искать в другой книге, Price.xlsx указывает имя файла книги, из которой вы будете искать, Sheet1 означает имя листа, из которого вы будете искать, и A $ 1 : $ B $ 24 — это диапазон, из которого вы будете искать. Вы можете изменить их по своему усмотрению.
(2) После закрытия книги, из которой вы искали, формула автоматически обновится до = ВПР (B2; ‘W: test [Price.xlsx] Sheet1’! $ A $ 1: $ B $ 24,2, FALSE), W: test — это путь сохранения книги, из которой вы искали.

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


Данные Vlookup и возвращаемые значения из другой закрытой книги с VBA

Может возникнуть путаница при настройке пути сохранения, имени файла и рабочего листа в функции VLOOKUP. Этот метод позволит легко решить эту проблему с помощью VBA.

1. нажмите другой + F11 клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.

2. Нажмите Вставить > Модули, а затем вставьте ниже код VBA в открывающееся окно модуля.

VBA: данные Vlookup и возвращаемые значения из другой закрытой книги

Private Function GetColumn(Num As Integer) As String
If Num <= 26 Then
GetColumn = Chr(Num + 64)
Else
GetColumn = Chr((Num - 1)  26 + 64) & Chr((Num - 1) Mod 26 + 65)
End If
End Function
Sub FindValue()
Dim xAddress As String
Dim xString As String
Dim xFileName As Variant
Dim xUserRange As Range
Dim xRg As Range
Dim xFCell As Range
Dim xSourceSh As Worksheet
Dim xSourceWb As Workbook
On Error Resume Next
xAddress = Application.ActiveWindow.RangeSelection.Address
Set xUserRange = Application.InputBox("Lookup values :", "Kutools for Excel", xAddress, Type:=8)
If Err <> 0 Then Exit Sub
Set xUserRange = Application.Intersect(xUserRange, Application.ActiveSheet.UsedRange)
xFileName = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx", 1, "Select a Workbook")
If xFileName = False Then Exit Sub
Application.ScreenUpdating = False
Set xSourceWb = Workbooks.Open(xFileName)
Set xSourceSh = xSourceWb.Worksheets.Item(1)
xString = "='" & xSourceWb.Path & Application.PathSeparator & _
"[" & xSourceWb.Name & "]" & xSourceSh.Name & "'!$"
For Each xRg In xUserRange
Set xFCell = xSourceSh.Cells.Find(xRg.Value, , xlValues, xlWhole, , , False)
If Not (xFCell Is Nothing) Then
xRg.Offset(0, 2).Formula = xString & GetColumn(xFCell.Column + 1) & "$" & xFCell.Row
End If
Next
xSourceWb.Close False
Application.ScreenUpdating = True
End Sub

Внимание: Этот VBA будет возвращать значения в столбце, который находится на 2 столбца позади выбранного столбца. Например, я выбираю столбец B при применении этого VBA, значения возвращаются в столбце D. Если вам нужно изменить столбец назначения, узнайте код xRg.Offset (0, 2) .Formula = xString & GetColumn (xFCell.Column + 1) & «$» & xFCell.Row и заменить 2 на другой номер по мере необходимости.

3. нажмите F5 ключ или щелкните Run кнопку для запуска этого VBA.

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

5. Теперь выберите книгу, в которой вы будете искать значения в открывшемся диалоговом окне «Выбор книги», и нажмите кнопку Откройте кнопку.

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


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (1)


Оценок пока нет. Оцените первым!

Подписывайтесь на Нас

Copyright © 2009 —

www.extendoffice.ком. | Все права защищены. Питаться от ExtendOffice, | Карта сайта

Microsoft и логотип Office являются товарными знаками или зарегистрированными товарными знаками Microsoft Corporation в США и / или других странах.

Защищено Sectigo SSL

Хитрости »

15 Май 2011              512015 просмотров


Как найти значение в другой таблице или сила ВПР

  • Задача и её решение при помощи ВПР
  • Описание аргументов ВПР
  • Что важно всегда помнить при работе с ВПР
  • Как избежать ошибки #Н/Д(#N/A) в ВПР?
  • Как при помощи ВПР искать значение по строке, а не столбцу?
  • Решение при помощи ПОИСКПОЗ
  • Работа с критериями длиннее 255 символов
Задача и её решение при помощи ВПР

 
Если в двух словах, то ВПР позволяет сравнить данные двух таблиц на основании значений из одного столбца.
Чтобы чуть лучше понять принцип работы ВПР лучше начать с некоего практического примера. Возьмем две таблицы:
Таблицы

рис.1

На картинке выше для удобства они показаны рядом, но на самом деле могут быть расположены на разных листах и даже в разных книгах. Таблицы по сути одинаковые, но фамилии в них расположены в разном порядке, и к тому же в одной заполнены все столбцы, а во второй столбцы ФИО и Отдел. И из первой таблицы необходимо подставить во вторую дату для каждой фамилии. Для трех записей это не проблема и руками сделать — все очевидно. Но в жизни это таблицы на тысячи записей и поиск с подстановкой данных вручную может занять не один час. Вот где ВПР(VLOOKUP) будет весьма кстати. Все, что необходимо — записать в ячейку

C2

второй таблицы(туда, куда необходимо подставить даты из первой таблицы) такую формулу:

=ВПР($A2;Лист1!$A$1:$C$4;3;0)
=VLOOKUP($A2,Лист1!$A$1:$C$4,3,0)

Записать формулу можно либо непосредственно в ячейку, либо воспользовавшись диспетчером функций, выбрав в категории Ссылки и массивы(References & Arrays) функцию ВПР(VLOOKUP) и по отдельности указав нужные критерии. Теперь копируем(

Ctrl

+

C

) ячейку с формулой(С2), выделяем все ячейки столбца

С

до конца данных и вставляем(

Ctrl

+

V

).

Теперь разберем поподробнее саму функцию, её аргументы и некоторые особенности.
ВПР ищет заданное нами значение(аргумент искомое_значение) в первом столбце указанного диапазона(аргумент таблица). Поиск значения всегда происходит сверху вниз(собственно, поэтому функция и называется ВПР: Вертикальный ПРосмотр). Как только функция находит заданное значение — поиск прекращается, ВПР берет строку с найденным значением и смотрит на аргумент номер_столбца. Именно из этого столбца берётся значение, которое мы и видим как итог работы функции. Т.е. в нашем конкретном случае, для ячейки С2 второй таблицы, функция берет фамилию «Петров С.А.»(ячейка $A2 второй таблицы) и ищет её в первом столбце указанной таблицы(Лист1!$A$1:$C$4), т.е. в столбце А. Как только находит(это ячейка А3)

ВПР может вернуть только одно значений — первое, подходящее под критерий. Если искомое значение не найдено(отсутствует в таблице), то результатом функции будет ошибка #Н/Д(#N/A). Не надо этого бояться — это даже полезно. Вы точно будете знать, каких записей нет и таким образом можете сравнивать две таблицы друг с другом. Иногда получается так, что Вы видите: данные есть в обеих таблицах, но ВПР выдает #Н/Д. Значит данные в Ваших таблицах не идентичны. В какой-то из них есть лишние неприметные пробелы(обычно перед значением или после), либо знаки кириллицы перемешаны со знаками латиницы. Так же #Н/Д будет, если критерии числа и в искомой таблице они записаны как текст(как правило в левом верхнем углу такой ячейки появляется зеленый треугольничек), а в итоговой — как числа. Или наоборот.


Описание аргументов ВПР

  • Искомое_значение($A2) — это то значение из одной таблицы, которые мы ищем в другой таблице. Т.е. для первой записи второй таблицы это будет Петров С.А.. Здесь можно указать либо непосредственно текст критерия(в этом случае он должен быть в кавычках — =ВПР(«Петров С.А»;Лист1!$A$1:$C$4;3;0), либо ссылку на ячейку, с данным текстом(как в примере функции). Есть небольшой нюанс: так же можно применять символы подстановки: «*» и «?». Это очень удобно, если необходимо найти значения лишь по части строки. Например, можно не вводить полностью «Петров С.А», а ввести лишь фамилию и знак звездочки — «Петров*». Тогда будет выведена любая запись, которая начинается на «Петров». Если же надо найти запись, в которой в любом месте строки встречается фамилия «Петров», то можно указать так: «*петров*». Если хотите найти фамилию Петров и неважно какие инициалы будут у имени-отчества(если ФИО записаны в виде Иванов И.И.), то здесь в самый раз такой вид: «Иванов ?.?.».
    Часто необходимо для каждой строки указать свое значение(в столбце А Фамилии и надо их все найти). В таком случае всегда указываются ссылки на ячейки столбца А. Например, в ячейке A2 записано: Иванов. Так же известно, что Иванов есть в другой таблице, но после фамилии могут быть записаны и имя и отчество(или еще что-то). Но нам нужно найти только строку, которая начинается на фамилию. Тогда необходимо записать следующим образом: A2&»*». Эта запись будет равнозначна «Иванов*». В A2 записано Иванов, амперсанд(&) используется для объединения в одну строку двух текстовых значений. Звездочка в кавычках (как и положено быть тексту внутри формулы). Таким образом и получаем:
    A2&»*» =>
    «Иванов»&»*» =>
    «Иванов*»
    А полная формула в итоге будет выглядеть так: =ВПР(A2&»*»;Лист1!$A$1:$C$4;3;0)
    Очень удобно, если значений для поиска много.
    Если надо определить есть ли хоть где-то слово в строке, то звездочки ставим с обеих сторон: «*»&A1&»*»
  • Таблица(Лист1!$A$1:$C$4) — указывается диапазон ячеек, в первом столбце которых будет просматриваться аргумент Искомое_значение. Диапазон должен содержать данные от первой ячейки с данными до самой последней. Это не обязательно должен быть указанный в примере диапазон. Если строк 100, то Лист1!$A$2:$C$100. Диапазон в аргументе таблица всегда должен быть «закреплен», т.е. содержать знаки доллара($) перед названием столбцов и перед номерами строк(Лист1!$A$1:$C$4).
  • Номер_столбца(3) — указывается номер столбца в аргументе Таблица, значения из которого нам необходимо записать в итоговую ячейку в качестве результата. В примере это Дата принятия — т.е. столбец №3. Если бы нужен был отдел, то необходимо было бы указать номер столбца 2, а если бы нам понадобилось просто сравнить есть ли фамилии одной таблицы в другой, то можно было бы указать и 1. Номер столбца всегда указывается числом и не должен быть больше числа столбцов в аргументе Таблица.

    если аргумент Таблица имеет слишком большое кол-во столбцов и необходимо вернуть результат из последнего столбца, то совсем необязательно высчитывать их количество. Можно использовать формулу, которая подсчитывает количество столбцов в указанном диапазоне:  =ВПР($A2;Лист1!$A$1:$C$4;ЧИСЛСТОЛБ(Лист1!$A$1:$C$4);0). К слову в данном случае Лист1! тоже можно убрать, т.к. функция ЧИСЛОСТОЛБ просто подсчитывает количество столбцов в переданном ей диапазоне и неважно на каком он листе: =ВПР($A2;Лист1!$A$1:$C$4;ЧИСЛСТОЛБ($A$1:$C$4);0).

  • Интервальный_просмотр(0) — очень интересный аргумент. Может быть равен либо ИСТИНА либо ЛОЖЬ. Так же допускается указать 1 или 0. 1 = ИСТИНА, 0 = ЛОЖЬ. Если в ВПР указать данный параметр равный 0 или ЛОЖЬ, то будет происходить поиск точного соответствия заданному Искомому_значению. Это не имеет никакого отношения к знакам подстановки(«*» и «?»). Если же использовать 1 или ИСТИНА, то…Совсем в двух словах не объяснить. Если вкратце — ВПР будет искать наиболее похожее значение, подходящее под Искомомое_значение. Иногда очень полезно. Правда, если использовать данный параметр, то необходимо, чтобы список в аргументе Таблица был отсортирован по возрастанию. Обращаю внимание на то, что сортировка необходима только в том случае, если аргумент Интервальный_просмотр равен ИСТИНА или 1. Если же 0 или ЛОЖЬ — сортировка не нужна. Этот аргумент необходимо использовать осторожно — не стоит указывать 1 или ИСТИНА, если нужно найти точное соответствие и уж тем более не стоит использовать, если не понимаете принцип его работы.
    Подробнее про работу ВПР с интервальным просмотром, равным 1 или ИСТИНА можно ознакомиться в статье ВПР и интервальный просмотр(range_lookup)

При работе с ВПР всегда важно помнить три вещи:
  • Таблица всегда должна начинаться с того столбца, в котором ищем Искомое_значение. Т.е. ВПР не умеет искать значение во втором столбце таблицы, а значение возвращать из первого. В лучшем случае ничего найдено не будет и получим ошибку #Н/Д(#N/A), а в худшем результат будет совсем не тот, который должен быть
  • аргумент Таблица должен быть «закреплен», т.е. содержать знаки доллара($) перед названием столбцов и перед номерами строк(Лист1!$A$1:$C$4). Это и есть закрепление(если точнее, то это называется абсолютной ссылкой на диапазон). Как это делается. Выделяете текст ссылки и жмете клавишу F4 до тех пор, пока не увидите, что и перед обозначением имени столбца и перед номером строки не появились доллары. Если этого не сделать, то при копировании формулы из одной ячейки в остальные аргумент Таблица будет «съезжать» и результат может быть совсем не таким, какой ожидался(в лучшем случае получите ошибку #Н/Д(#N/A)
  • номер_столбца не должен превышать общее кол-во столбцов в аргументе таблица, а сама Таблица соответственно должна содержать столбцы от первого(в котором ищем) до последнего(из которого необходимо возвращать значения). В примере указана Лист1!$A$1:$C$4 — всего 3 столбца(A, B, C). Значит не получится вернуть значение из столбца D(4), т.к. в таблице только три столбца. Т.е. если мы запишем формулу так: =ВПР($A2;Лист1!$A$1:$C$4;4;0) — мы получим ошибку #ССЫЛКА!(#REF!).
    Если аргументом Таблица указан диапазон $B$1:$C$4 и необходимо вернуть данные из столбца С, то правильно будет указать номер столбца 2. Т.к. аргумент Таблица($B$1:$C$4) содержит только два столбца — В и С. Если же попытаться указать номер столбца 3(каким по счету он является на листе), то получим ошибку #ССЫЛКА!(#REF!), т.к. третьего столбца в указанном диапазоне просто нет.

Многие наверняка заметили, что на картинке у меня попутаны отделы для ФИО(в обеих таблицах ФИО относятся к разным отделам). Это не ошибка записи. В прилагаемом к статье примере показано, как можно одной формулой подставить и отделы и даты, не меняя вручную аргумент Номер_столбца: =ВПР($A2;Лист1!$A$1:$C$4;СТОЛБЕЦ();0). Такой подход сработает, если в обеих таблицах одинаковый порядок столбцов.


Как избежать ошибки #Н/Д(#N/A) в ВПР?

 
Еще частая проблема — многие не хотят видеть #Н/Д результатом, если совпадение не найдено. Это можно обойти при помощи специальных функций.
Для пользователей Excel 2003 и старше:

=ЕСЛИ(ЕНД(ВПР($A2;Лист1!$A$1:$C$4;3;0));»»;ВПР($A2;Лист1!$A$1:$C$4;3;0))
=IF(ISNA(VLOOKUP($A2,Лист1!$A$1:$C$4,3,0)),»»,VLOOKUP($A2,Лист1!$A$1:$C$4,3,0))

Теперь если ВПР не найдет совпадения, то ячейка будет пустой.
А пользователям версий Excel 2007 и выше будет удобнее использовать функцию

ЕСЛИОШИБКА(IFERROR)

:

=ЕСЛИОШИБКА(ВПР($A2;Лист1!$A$1:$C$4;3;0);»»)
=IFERROR(VLOOKUP($A2,Лист1!$A$1:$C$4,3,0);»»)

Подробнее про различие между использованием ЕСЛИ(ЕНД и ЕСЛИОШИБКА я разбирал в статье: Как в ячейке с формулой вместо ошибки показать 0
Но я бы не рекомендовал использовать

ЕСЛИОШИБКА(IFERROR)

, не убедившись, что ошибки появляются только для реально отсутствующих значений. Иногда ВПР может вернуть #Н/Д и в других ситуациях:

  • искомое значение состоит более чем из 255 символов(решение этой проблемы приведено ниже в этой статье: Работа с критериями длиннее 255 символов)
  • искомое значение является числом с большим кол-вом знаков после запятой. Excel не может правильно воспринимать такие числа и в итоге ВПР может вернуть ошибку. Правильным решением здесь будет округлить искомое значение хотя бы до 4-х или 5-ти знаков после запятой(конечно, если это допустимо):
    =ВПР(ОКРУГЛ($A2;5);Лист1!$A$1:$C$4;3;0)
    =VLOOKUP(ROUND($A2,2),Лист1!$A$1:$C$4,3,0)
  • искомое значение содержит специальные или непечатаемые символы.
    В этом случае придется либо избавиться от непечатаемых символов в искомом аргументе:
    =ВПР(ПЕЧСИМВ($A2);Лист1!$A$1:$C$4;3;0)
    =VLOOKUP(CLEAN($A2),Лист1!$A$1:$C$4,3,0)
    либо добавить перед всеми специальными символами(такими как звездочка или вопр.знак) знак тильды(~), чтобы сделать эти знаки просто знаками, а не знаками специального значения(так же работа со специальными(служебными) символами описывалась в статье: Как заменить/удалить/найти звездочку). Добавить символ перед знаком той же тильды можно при помощи функции ПОДСТАВИТЬ(SUBSTITUTE):
    =ВПР(ПОДСТАВИТЬ($A2;»~»;»~~»);Лист1!$A$1:$C$4;3;0)
    =VLOOKUP(SUBSTITUTE(A2,»~»,»~~»),Лист1!$A$1:$C$4,3,0)
    Если необходимо добавить тильду сразу перед несколькими знаками, то делает это обычно так(на примере подстановки одновременно для тильды и звездочки):
    =ВПР(ПОДСТАВИТЬ(ПОДСТАВИТЬ($A2;»~»;»~~»);»*»;»~*»);Лист1!$A$1:$C$4;3;0)
    =VLOOKUP(SUBSTITUTE(SUBSTITUTE(A2,»~»,»~~»),»*»,»~*»),Лист1!$A$1:$C$4,3,0)

Как при помощи ВПР искать значение по строке, а не столбцу?

 
На самом деле ответ будет коротким — ВПР всегда ищет сверху вниз. Слева направо она не умеет. Но зато слева направо умеет искать её сестра ГПР(HLookup) — Горизонтальный

ПР

осмотр.
ГПР ищет заданное значение(аргумент

искомое_значение

) в первой строке указанного диапазона(аргумент

таблица

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

#Н/Д(#N/A)

.
Если надо найти значение «Иванов» в строке 2 и вернуть значение из строки 5 в таблице

A2:H10

, то формула будет выглядеть так:

=ГПР(«Иванов»;$A$2:$H$10;5;0)
=HLOOKUP(«Иванов»,$A$2:$H$10,5,0)

Все правила и синтаксис функции точно такие же, как у ВПР:
-в искомом значении можно применять символы астерикса(*) и вопр.знака(?) — «Иванов*»;
-таблица должна быть закреплена —

$A$2:$H$10

;
-интервальный просмотр работает по тому же принципу(0 или ЛОЖЬ точный просмотр слева-направо, 1 или ИСТИНА — интервальный).


Решение при помощи ПОИСКПОЗ

 
Общий принцип работы

ПОИСКПОЗ(MATCH)

очень похож на ВПР — функция ищет заданное значение в массиве (в столбце или строке) и возвращает его позицию(порядковый номер в заданном массиве). Т.е. ищет

Искомое_значение

в аргументе

Просматриваемый_массив

и в качестве результата выдает номер позиции найденного значения в

Просматриваемом_массиве

. Именно номер позиции, а не само значение. Если бы мы хотели применить её для таблицы выше, то она была бы такой:

=ПОИСКПОЗ($A2;Лист1!$A$1:$A$4;0)
=MATCH($A2,Лист1!$A$1:$A$4,0)

  • Искомое_значение($A2) — непосредственно значение или ссылка на ячейку с искомым значением. Если опираться на пример выше — то это ФИО. Здесь все ровно так же, как и с ВПР. Так же допустимы символы подстановки * и ? и ровно в таком же исполнении.
  • Просматриваемый_массив(Лист1!$A$1:$A$4) — указывается ссылка на столбец, в котором необходимо найти искомое значение. В отличии от той же ВПР, где указывается целая таблица, это должен быть именно один столбец, в котором мы собираемся искать Искомое_значение. Если попытаться указать более одного столбца, то функция вернет ошибку.Справедливости ради надо отметить, что можно указать либо столбец, либо строку
  • Тип_сопоставления(0) — то же самое, что и Интервальный_просмотр в ВПР. С теми же особенностями. Отличается разве что возможностью поиска наименьшего от искомого или наибольшего.

С основным разобрались. Но ведь нам надо вернуть не номер позиции, а само значение. Значит ПОИСКПОЗ в чистом виде нам не подходит. По крайней мере одна, сама по себе. Но если её использовать вместе с функцией ИНДЕКС(INDEX)(которая возвращает из указанного диапазона значение на пересечении заданных строки и столбца) — то это то, что нам нужно и даже больше.
=ИНДЕКС(Лист1!$A$1:$C$4;ПОИСКПОЗ($A2;Лист1!$A$1:$A$4;0);2)
Такая формула результатом вернет то же, что и ВПР.

Аргументы функции ИНДЕКС
Массив(Лист1!$A$2:$C$4). В качестве этого аргумента мы указываем диапазон, из которого хотим получить значения. Может быть как один столбец, так и несколько. В случае, если столбец один, то последний аргумент функции указывать не обязательно или он всегда будет равен 1(столбец-то всего один). К слову — данный аргумент может совершенно не совпадать с тем, который мы указываем в аргументе Просматриваемый_массив функции ПОИСКПОЗ.

Далее идут Номер_строки и Номер_столбца. Именно в качестве Номера_строки мы и подставляем ПОИСКПОЗ, которая возвращает нам номер позиции в массиве. На этом все и строится. ИНДЕКС возвращает значение из Массива, которое находится в указанной строке(Номер_строки) Массива и указанном столбце(Номер_столбца), если столбцов более одного. Важно знать, что в данной связке кол-во строк в аргументе Массив функции ИНДЕКС и кол-во строк в аргументе Просматриваемый_массив функции ПОИСКПОЗ должно совпадать. И начинаться с одной и той же строки. Это в обычных случаях, если не преследуются иные цели.
Так же как и в случае с ВПР, ИНДЕКС в случае не нахождения искомого значения возвращает #Н/Д. И обойти подобные ошибки можно так же:
Для всех версий Excel(включая 2003 и раньше):
=ЕСЛИ(ЕНД(ПОИСКПОЗ($A2;Лист1!$A$1:$A$4;0));»»;ИНДЕКС(Лист1!$A$1:$C$4;ПОИСКПОЗ($A2;Лист1!$A$2:$A$4;0);2))
Для версий 2007 и выше:
=ЕСЛИОШИБКА(ИНДЕКС(Лист1!$A$1:$C$4;ПОИСКПОЗ($A2;Лист1!$A$1:$A$4;0);2);»»)


Работа с критериями длиннее 255 символов

 
Есть у ИНДЕКС-ПОИСКПОЗ и еще одно преимущество перед ВПР. Дело в том, что ВПР не может искать значения, длина строки которых содержит более 255 символов. Это случается редко, но случается. Можно, конечно, обмануть ВПР и урезать критерий:

=ВПР(ПСТР($A2;1;255);ПСТР(Лист1!$A$1:$C$4;1;255);3;0)

но это формула массива. Да и к тому же далеко не всегда такая формула вернет нужный результат. Если первые 255 символов идентичны первым 255 символам в таблице, а дальше знаки различаются — формула этого уже не увидит. Да и возвращает формула исключительно текстовые значения, что в случаях, когда возвращаться должны числа, не очень удобно.

Поэтому лучше использовать такую хитрую формулу:
=ИНДЕКС(Лист1!$A$1:$C$4;СУММПРОИЗВ(ПОИСКПОЗ(ИСТИНА;Лист1!$A$1:$A$4=$A2;0));2)
Здесь я в формулах использовал одинаковые диапазоны для удобочитаемости, но в примере для скачивания они различаются от указанных здесь.
Сама формула построена на возможности функции СУММПРОИЗВ преобразовывать в массивные вычисления некоторых функций внутри неё. В данном случае ПОИСКПОЗ ищет позицию строки, в которой критерий равен значению в строке. Подстановочные символы здесь применить уже не получится.


Ну и все же я рекомендовал бы Вам прочитать подробнее про данные функции в справке.

В прилагаемом к статье примере Вы найдете примеры использования всех описанных случаев и пример того, почему ИНДЕКС и ПОИСКПОЗ порой предпочтительнее ВПР.

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

  Tips_All_VLookUp.xls (26,0 KiB, 17 435 скачиваний)

Так же см.:
ВПР и интервальный просмотр(range_lookup)
ВПР по двум и более критериям
ВПР с возвратом всех значений
ВПР с поиском по нескольким листам
ВПР_МН
ВПР_ВСЕ_КНИГИ
Как заменить/удалить/найти звездочку?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Как искать / находить значения в другой книге?

На чтение 4 мин. Просмотров 138 Опубликовано 21.05.2021

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

  • Данные Vlookup и возвращаемые значения из другой книги в Excel
  • Данные Vlookup и возвращаемые значения из другой закрытой книги с VBA

Содержание

  1. Легко vlookup для значения с другого листа без точного запоминания формулы
  2. Данные Vlookup и возвращаемые значения из другой книги в Excel
  3. Данные Vlookup и возвращаемые значения из другой закрытой книги с VBA

Легко vlookup для значения с другого листа без точного запоминания формулы

Kutools for Excel Формула Искать значение в списке может помочь вам легко найти значение из выбора на активном листе или другие листы быстро. 30-дневная бесплатная пробная версия полнофункциональной версии!

Вкладка Office Включите редактирование и просмотр с вкладками в Office и сделайте вашу работу намного проще …

Подробнее … Скачать бесплатно …

Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%.

  • Повторное использование чего угодно: добавляйте наиболее часто используемые или сложные формулы, диаграммы и все остальное в избранное и быстро используйте их в будущее.
  • Более 20 текстовых функций: извлечение числа из текстовой строки; Извлечь или удалить часть текстов; Преобразование чисел и валют в английские слова.
  • Инструменты слияния: несколько книг и листов в одну; Объединить несколько ячеек/строк/столбцов без потери данных; Объедините повторяющиеся строки и суммируйте.
  • Инструменты разделения: разделение данных на несколько листов в зависимости от значения; Из одной книги в несколько файлов Excel, PDF или CSV; Один столбец в несколько столбцов.
  • Вставить пропуск скрытых/отфильтрованных строк; Подсчет и сумма по цвету фона; Массовая отправка персонализированных писем нескольким получателям.
  • Суперфильтр: создавайте расширенные схемы фильтров и применяйте их к любым листам; Сортировать по неделе, дню, частоте и т. Д. Фильтр жирным шрифтом, формулами, комментарием …
  • Более 300 мощных функций; Работает с Office 2007-2019 и 365; Поддерживает все языки; Простое развертывание на вашем предприятии или в организации.

Подробнее … Бесплатная загрузка …

->


Данные Vlookup и возвращаемые значения из другой книги в Excel

Например, вы создаете таблицу «Покупка фруктов» в Excel, и теперь вам нужно просмотреть фрукты из другой книги и вернуть соответствующие цены, как показано на скриншотах ниже. Здесь я расскажу вам, как решить эту проблему с помощью функции VLOOKKUP в Excel.

1. Откройте обе книги, из которых вы будете получать значения vlookup, и вернуть значения в.

2. Выберите пустую ячейку, в которую будет возвращена цена, введите в нее формулу = ВПР (B2, [Price.xlsx] Sheet1! $ A $ 1: $ B $ 24,2, FALSE), а затем перетащите ее маркер заполнения, чтобы применить эту формулу к диапазон, какой вам нужен.

Примечания :
(1) В приведенной выше формуле B2 – это результат, который вы будете искать в другой книге, Price.xlsx указывает имя файла книги, которую вы будет искать, Sheet1 означает имя листа, с которого вы будете искать, а A $ 1: $ B $ 24 – это диапазон, из которого вы будете искать. Вы можете изменить их по своему усмотрению.
(2) После закрытия книги, из которой вы выполняли поиск, формула автоматически обновится до = VLOOKUP (B2, ‘W: test [Price.xlsx] Sheet1’! $ A $ 1: $ B $ 24,2, FALSE), W: test – это путь сохранения книги, из которой вы искали.

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

Формула слишком сложна для запоминания? Сохраните формулу как запись Auto Text для повторного использования одним щелчком мыши в будущем!
Подробнее… Бесплатная пробная версия

Данные Vlookup и возвращаемые значения из другой закрытой книги с VBA

Это может быть мусор запутался, чтобы настроить путь сохранения, имя файла и рабочий лист в функции ВПР. Этот метод представит VBA, чтобы легко решить эту проблему.

1. Нажмите клавиши Alt + F11 , чтобы открыть окно Microsoft Visual Basic для приложений.

2. Щелкните Insert > Module , а затем вставьте ниже код VBA в открывающееся окно модуля.

VBA: данные Vlookup и возвращаемые значения из другой закрытой книги

Примечание : этот VBA возвращает значения в столбце, который находится на 2 столбца позади выбранного столбца. Например, я выбираю столбец B при применении этого VBA, значения будут возвращаться в столбце D. Если вам нужно изменить столбец назначения, узнайте код xRg.Offset (0, 2) .Formula = xString & GetColumn (xFCell.Column + 1) & “$” & xFCell.Row и замените 2 на другой номер по мере необходимости.

3. Нажмите клавишу F5 или кнопку Выполнить , чтобы запустить этот VBA.

4. В открывшемся диалоговом окне укажите диапазон данных, который вы будете искать, и нажмите кнопку OK .

5. Теперь выберите книгу, в которой вы будете искать значения в открывшемся диалоговом окне «Выбор книги», и нажмите кнопку Открыть .

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


Поиск в другой книге

Venique

Дата: Четверг, 06.11.2014, 14:57 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
20% ±


Excel 2003

Приветствую! Помогите реализовать такой макрос…

Есть Книга №1, в ней лист с данными. В диапазоне A1:A5000 занесены числовые значения. Рядом с каждой ячейкой расположена кнопка. При нажатии на неё должен начаться поиск этого же значения в отдельной книге «Книга №2» на листе «Лист №1» в диапазоне ячеек B1:B5000. Как только будет совпадение (а оно будет лишь один раз, так как во второй книге значения уникальны), фокус должен встать на эту ячейку в этой книге.

Если проще — в первой книге я завожу инцидент с номером устройства, по клике на кнопку у меня открывается вторая книга и фокус встает на ячейку с этим же номером, где есть полное описание устройства. Для наглядности прикладываю файл.

К сообщению приложен файл:

7379798.xls
(18.5 Kb)

Сообщение отредактировал VeniqueЧетверг, 06.11.2014, 15:01

 

Ответить

Rioran

Дата: Четверг, 06.11.2014, 16:36 |
Сообщение № 2

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

Venique, здравствуйте.

Для реализации макроса рекомендую сделать только одну кнопку. Её поместить на верхнюю строку. Строку закрепить (через меню «Вид»). Сама кнопка будет работать с выделенной ячейкой. Это избавляет от потрясающей перспективы клонировать кнопку 5 тысяч раз.

Для открытия книги изучите метод Workbooks.Open, для поиска значения — Range( … ).Find. Для «постановки фокуса» достаточно Cells( … ).Select. Где троеточия — ваши специфичные данные.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

 

Ответить

Alex_ST

Дата: Четверг, 06.11.2014, 22:34 |
Сообщение № 3

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Да вообще зачем кнопки?[vba]

Код

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Not Intersect(Target, [A1:A5000]) Is Nothing Then
         Cancel = True
         ‘…..
     End If
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Rioran

Дата: Пятница, 07.11.2014, 09:12 |
Сообщение № 4

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

Worksheet_BeforeDoubleClick

Кстати да, вешать макрос на двойной клик тут будет оптимальнее =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

 

Ответить

Venique

Дата: Среда, 12.11.2014, 17:34 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
20% ±


Excel 2003

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

[vba]

Код

Sub CrossSearch()

‘задаём переменные
Dim GCell As Range
Dim Txt$
Dim wBook As Workbook

‘что ищем
Txt = ActiveCell.Value

‘продолжаем выполнять макрос, иначе без открытой книги он прервётся
On Error Resume Next

‘описываем книгу
Set wBook = Workbooks(«Book2.xls»)
Application.ScreenUpdating = False ‘немного ускорим процесс
      If wBook Is Nothing Then ‘если она не открыта, то открываем её
          Workbooks.Open Filename:= _
          «\***Book2.xls»
          Set GCell = Sheets(«Лист1»).Range(«B2:B1000»).Find(What:=Txt, LookIn:=xlValues, LookAt:=xlWhole) ‘производим поиск полного совпадения
          If GCell Is Nothing Then
              MsgBox «ID » & Txt & » не найден.», vbOKOnly + vbCritical, «Поиск в Book2»
              Application.ScreenUpdating = True
              Workbooks(«Book1.xls»).Activate
          Else
              Workbooks(«Book2.xls»).Activate ‘выводим на передний план
              Application.ScreenUpdating = True
              ActiveSheet.Range(GCell, GCell.Offset(0, 3)).Select ‘а затем выделяем найденный результат
          End If
      Else ‘если она открыта
          Set GCell = wBook.Sheets(«Лист1»).Range(«B2:B1000»).Find(What:=Txt, LookIn:=xlValues, LookAt:=xlWhole) ‘производим поиск полного совпадения
          If GCell Is Nothing Then
              MsgBox «ID » & Txt & » не найден.», vbOKOnly + vbCritical, «Поиск в Book2»
              Application.ScreenUpdating = True
          Else
              Workbooks(«Book2.xls»).Activate ‘выводим на передний план
              Application.ScreenUpdating = True
              ActiveSheet.Range(GCell, GCell.Offset(0, 3)).Select ‘а затем выделяем найденный результат
          End If
      End If

Exit Sub
End Sub

[/vba]

Макрос ищет выделенное в текущий момент значение ячейки из книги Book1 в книге Book2, в диапазоне B1:B1000. Если совпадение есть — делает фокус на Book2 и подсвечивает ячейку с искомым значением +3 ячейки вправо (у меня там сопроводительная информация лежит). Если совпадения нет — выдаёт ошибку. Если книга не открыта — сначала открывает, а потом уже ищет. Окошко с ошибкой сделал покрасивше, путь можно прописывать вплоть до файла на удалённом сервере. Все кейсы отработал, вроде накладок не возникает, так что можно пользоваться :) Вешать макрос на отдельную кнопку.

Сообщение отредактировал VeniqueСреда, 12.11.2014, 17:36

 

Ответить

RoViX

Дата: Среда, 18.01.2017, 11:11 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Venique, тут напрашивается маленькая оптимизация.
У Вас основные операции дублируются, нехорошо это. Если потребуется изменить алгоритм действий, то править придется в двух местах.
Лучше сделать так:
[vba]

Код

Sub CrossSearch()
    ‘задаём переменные
    Dim GCell As Range
    Dim Txt$
    Dim wBook As Workbook

    ‘что ищем
    Txt = ActiveCell.Value

    ‘продолжаем выполнять макрос, иначе без открытой книги он прервётся
    On Error Resume Next

    ‘описываем книгу
    sBookName = «Book2.xls»
    sBookPath = «\***»
    Set wBook = Workbooks(sBookName)
    Application.ScreenUpdating = False ‘немного ускорим процесс

    If wBook Is Nothing Then ‘если она не открыта, то открываем её
        Workbooks.Open Filename:= sBookPath & sBookName
    End If

    Set GCell = wBook.Sheets(«Лист1»).Range(«B2:B1000»).Find(What:=Txt, LookIn:=xlValues, LookAt:=xlWhole) ‘производим поиск полного совпадения
    If GCell Is Nothing Then
        MsgBox «ID » & Txt & » не найден.», vbOKOnly + vbCritical, «Поиск в Book2»
        Application.ScreenUpdating = True
    Else
        Workbooks(«Book2.xls»).Activate ‘выводим на передний план
        Application.ScreenUpdating = True
        ActiveSheet.Range(GCell, GCell.Offset(0, 3)).Select ‘а затем выделяем найденный результат
    End If

End Sub

[/vba]

Exit Sub перед End Sub тоже лишнее.

 

Ответить

Alex_ST

Дата: Среда, 18.01.2017, 11:42 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

RoViX, а Вас не смущает, что пост с критикуемым Вами макросом Venique выложил больше двух лет назад, 12.11.2014, а судя по профилю, после 15.12.2014 здесь не появлялся? :D



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

Здравствуйте. Подскажите пожалуйста как найти и скопировать определённые значения в одной книге и вставить их в другую книгу с помощью макроса.
Есть книга Журналы, в ней по кнопке находим нужную книгу и лист, по значениям из ячейки. В найденой книге и листе нужно по дате в A:А скопировать значения в книгу Журналы лист Есводка, но не весь диапазон а выборочно. Спасибо

 

если вы освоили поиск и копирование с одной книги (с листа на лист) поиск и копирование с другой технически ничем не отличается за исключением одного предварительного действия — открыть или убедиться что другая книга открыта

Изменено: Ігор Гончаренко15.03.2022 11:44:05

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

, В этом и затруднения с повторным открытием книги, или перехода от одной к другой  

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

#4

16.03.2022 05:58:32

Подскажите в чем ошибка, не могу повторно обратится к открытой книге, на 19 строке ошибка

Код
Sub прим1()


 Dim myWSh As Worksheet
 Set myWSh = Workbooks("Журналы пример.xlsm").Worksheets("Есводка")
 Workbooks.Open (Range("E81") & Range("E82")): Worksheets("Учет газа").Select
 DDD = Date - 1
 Dim d As Long
        d = Application.WorksheetFunction.Match(CLng(DateValue(DDD)), Range("A6:A36"), 0)
         With Range("A6:A36")
   Range(.Cells(d).Address).Activate
   ActiveCell.Offset(rowOffset:=0, columnOffset:=9).Copy
   Workbooks("Журналы пример.xlsm").Worksheets("Есводка").Activate
    Range("B84").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     End With
 
 Workbooks(Range("E82")).Worksheets("Учет газа").Select


        d = Application.WorksheetFunction.Match(CLng(DateValue(DDD)), Range("A6:A36"), 0)
         With Range("A6:A36")
   Range(.Cells(d).Address).Activate
    ActiveCell.Offset(rowOffset:=0, columnOffset:=6).Copy
     Workbooks("Журналы пример.xlsm").Worksheets("Есводка").Activate
    Range("B85").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
      End With

Изменено: Ivan.tomsk16.03.2022 05:59:55

 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#5

16.03.2022 09:21:56

Код
Sub прим1()
 
 Dim myActiveSheet As Worksheet
 Set myActiveSheet = ActiveSheet
 
 Dim myWSh As Worksheet0
 Set myWSh = Workbooks("Журналы пример.xlsm").Worksheets("Есводка")
 Workbooks.Open (Range("E81") & Range("E82")): Worksheets("Учет газа").Select
 DDD = Date - 1
 Dim d As Long
        d = Application.WorksheetFunction.Match(CLng(DateValue(DDD)), Range("A6:A36"), 0)
         With Range("A6:A36")
   Range(.Cells(d).Address).Activate
   ActiveCell.Offset(rowOffset:=0, columnOffset:=9).Copy
   Workbooks("Журналы пример.xlsm").Worksheets("Есводка").Activate
    Range("B84").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     End With
  
 Workbooks(myActiveSheet.Range("E82")).Worksheets("Учет газа").Select
 
 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

#6

16.03.2022 12:04:45

Код
Sub прим1()
  
 Dim myActiveSheet As Worksheet
 Set myActiveSheet = ActiveSheet
 
 Dim myWSh As Worksheet0

 Set myWSh = Workbooks("Журналы пример.xlsm").Worksheets("Есводка")
 Workbooks.Open (Range("E81") & Range("E82")): Worksheets("Учет газа").Select
 DDD = Date - 1
 Dim d As Long
        d = Application.WorksheetFunction.Match(CLng(DateValue(DDD)), Range("A6:A36"), 0)
         With Range("A6:A36")
   Range(.Cells(d).Address).Activate
   ActiveCell.Offset(rowOffset:=0, columnOffset:=9).Copy
   Workbooks("Журналы пример.xlsm").Worksheets("Есводка").Activate
    Range("B84").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     End With
   
 Workbooks(myActiveSheet.Range("E82")).Worksheets("Учет газа").Select


        d = Application.WorksheetFunction.Match(CLng(DateValue(DDD)), Range("A6:A36"), 0)
         With Range("A6:A36")
   Range(.Cells(d).Address).Activate
    ActiveCell.Offset(rowOffset:=0, columnOffset:=6).Copy
     Workbooks("Журналы пример.xlsm").Worksheets("Есводка").Activate
    Range("B85").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
      End With
    
 End Sub

Что-то совсем перестало работать

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

#7

16.03.2022 13:36:02

МатросНаЗебре, По прежнему упирается в эту строку

Код
 Workbooks(myActiveSheet.Range("E82")).Worksheets("Учет газа").Select

и никак не могу понять логику этой строки  Открыть книгу= активный лист. имя Книги. имя листа. Выбрать
Совсем запутался

 

Jack Famous

Пользователь

Сообщений: 10846
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#8

16.03.2022 13:47:31

Цитата
Ivan.tomsk: Workbooks(myActiveSheet.Range(«E82»)).Worksheets(«Учет газа»).Select — никак не могу понять логику этой строки

Книга(такая-то).Лист(такой-то).Выделить
такая-то = myActiveSheet.Range(«E82») — в качестве имени книги взять значение из ячейки E82 на листе myActiveSheet (ваша переменная)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#9

16.03.2022 13:50:05

А так? Вместо

Код
Workbooks(myActiveSheet.Range("E82")).Worksheets("Учет газа").Select

написать

Код
Workbooks(myActiveSheet.Range("E82")).Activate
Worksheets("Учет газа").Select
 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

, спасибо. наверное напутано что-то с переменными раз не получается повторно скопировать значения.

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

МатросНаЗебре

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

Изменено: Ivan.tomsk16.03.2022 14:04:37

 

МатросНаЗебре

Пользователь

Сообщений: 5507
Регистрация: 05.02.2014

#12

16.03.2022 14:04:20

Так можно избежать двойного упоминания диапазона.

Код
Sub прим1()
  Dim sPath As String
  Dim sName As String
    With ActiveSheet
        sPath = Range("E81").Value
        sName = Range("E82").Value
    End With
 
 Dim myWSh As Worksheet
 Set myWSh = Workbooks("Журналы пример.xlsm").Worksheets("Есводка")
 Workbooks.Open (sPath & sName): Worksheets("Учет газа").Select
 DDD = Date - 1
 Dim d As Long
        d = Application.WorksheetFunction.Match(CLng(DateValue(DDD)), Range("A6:A36"), 0)
         With Range("A6:A36")
   Range(.Cells(d).Address).Activate
   ActiveCell.Offset(rowOffset:=0, columnOffset:=9).Copy
   Workbooks("Журналы пример.xlsm").Worksheets("Есводка").Activate
    Range("B84").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
     End With

Workbooks(sName).Activate
Worksheets("Учет газа").Select

На какой строке возникает ошибка 13?
На активации книги или выборе листа?

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

МатросНаЗебре, на активации книги

 

Среди открытых книг нет книги с именем, указанным в ячейке «E82».

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

МатросНаЗебре, Спасибо большое! заработало!!!

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

#16

16.03.2022 14:28:24

Цитата
написал:
Среди открытых книг нет книги с именем, указанным в ячейке «E82».

Я ее открывал в начале, копировал значение и вставлял в исходную книгу, а при повторном обращении возникала ошибка, которую Вы победили! Еще раз спасибо

 

Было забавно убрать ошибку, не открывая файл )

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#18

16.03.2022 14:48:11

см. сообщение №2

Цитата
Ігор Гончаренко написал:
открыть или убедиться что другая книга открыта

не обязательно участвовать в корриде, бывает забавно понаблюдать со стороны

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ivan.tomsk

Пользователь

Сообщений: 11
Регистрация: 19.01.2016

#19

16.03.2022 14:57:41

Ігор Гончаренко

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

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