FIND в VBA - полный гайд по поиску в VBA (Серия VBA 26)

Поделиться
HTML-код
  • Опубликовано: 17 авг 2019
  • Всем привет! В этом видео уроке я снял самый полный гайд по функции Find в VBA на русском языке (поэтому он вышел немного длинноватым). В любом случае, устраивайся поудобнее и начинай просмотр этого в видео, ведь в нём Ты:
    • научишься работать с этой функцией
    • узнаешь три особенности Find в VBA, которые Ты просто обязан знать, ведь иначе работа с этим важным инструментом может омрачиться непониманием её специфики
    • узнаешь каждый из девяти параметров этой функции, а именно: What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat
    • узнаешь особенность поиска по значениям, формулам и комментариям (xlValues, xlFormulas, xlComments)
    • научишься пользоваться командой FindNext
    • научишься находить все ячейки с желаемым искомым значением и манипулировать ими, сохраняя, например, в коллекцию
    Так что, приятного просмотра!
    Если тебе понравится это видео, также поставь лайк и подпишись на канал, чтобы не пропускать следующие видео на моём канале :)

Комментарии • 52

  • @user-uj4zl3wv3s
    @user-uj4zl3wv3s 4 года назад +15

    Мега-мега-мегаграмотное изложение материала и продуктивные уроки! Редкость на просторах интернета! Низкий Вам поклон за столь эффективное изложение материала по VBA! Вы педагог от Бога, продолжайте в том же духе! Низкий поклон за труды! Не поленюсь и напишу это коммент по каждым видео курса!!!

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад

      Здравствуйте, Андрей!
      Со своей стороны точно также не поленюсь и поблагодарю Вас за этот приятный комментарий под каждым видео точно так же :)
      С уважением и хорошего Вам дня,
      ХБ

  • @user-bm8yq2hh6h
    @user-bm8yq2hh6h 3 года назад +3

    Решил пересмотреть урок и понял, насколько поверхностно в первый раз смотрел: столько нужных моментов оказалось))) Недаром говорят: повторение - мать учения! Всем рекомендую спустя некоторое время возвращаться и повторять материал! Билял, молодчина! Спасибо огромное! Применяя решения этого урока, в программах можно вытворять любопытные вещи. Уже опробовал)))

  • @learningexcell440
    @learningexcell440 4 года назад +3

    Билял супер! Вы объясняете очень грамотно и без лишних разговорах молодец!

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад

      Здравствуйте!
      Большое спасибо за Ваш комментарий, рад стараться! 😊
      С уважением,
      Билял

  • @user-sc6wz7ni9v
    @user-sc6wz7ni9v 3 года назад +3

    Начинаю некоторые занятия пересматривать. И материал заходит осмысленнее. Билял спасибо! Твои подробные описания начинаю давать плоды. Видео в поисковиках попадают в выдачу при поиске). Это хорошо всем больше полезного контента)

  • @olegyes934
    @olegyes934 3 года назад +1

    Большое спасибо за отличные уроки! Доступное объяснение, хорошие примеры!

  • @user-xg4pd7en9d
    @user-xg4pd7en9d 2 года назад

    Билял, спасибо тебе большое, с тобой VBA становится понятным! я ещё пересматриваю предыдущие уроки и параллельно выполняю свои задачи с помощью этих уроков, что значительно усиливает навыки VBA

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 3 года назад +1

    Билял, благодарю! Отличный урок! Я всё повторил - всё получилось, всё понятно.

  • @Zugin1
    @Zugin1 Год назад

    Спасибо за твои уроки. Много полезной информации без "воды"

  • @SamSambl4
    @SamSambl4 4 года назад +2

    Спасибо за труд!

  • @maksimkisliak4782
    @maksimkisliak4782 3 года назад +3

    Коммент ради раскрутки канала! Пусть твой труд воссоздатся!
    Люди, ставьте комменты и лайки, благодарите парня за бесплатный крутой контент!

  • @user-rn4vk9jg5m
    @user-rn4vk9jg5m 3 года назад +1

    Реально круто

  • @ExcelExcel-bc1tc
    @ExcelExcel-bc1tc 3 года назад +1

    Спасибо за интересный урок. Планирую посмотреть все ваши видео, действительно практически лучший курс по VBA на ютьюбе (а может и не только). Сам попробовал снимать видео, и понял, как это сложно - разбираться еще и в видеомонтаже. У вас отлично получается.
    Делаю свою надстройку для аудита. На практике столкнулся, что метод Find почему-то отказывается искать второе значение в диапазоне.
    Дело оказалось в форматировании ячеек. Ячейку с нужным значением с нестандартным форматом он почему-то не находил. Не видел.
    Когда отформатировал весь диапазон в текстовой формат (rangeToSeach.NumberFormat = "@"), все получилось. Если будете переснимать это видео, можете сказать об этом.

  • @pavelkazak3112
    @pavelkazak3112 5 лет назад +7

    С возвращением! Отличный урок! Спасибо, за отзывчивость! Есть вопрос, на листе имеется именованная ячейка, при нажатии на которую на лист выводится как бы другой лист с текстом или графиками или значениями, который был до этого скрыт, при этом исходный лист также остаётся видимым и не закрывается.

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +3

      Здравствуйте, Павел!
      Большое спасибо, я тоже очень рад снова вернуться к возможности записывать видео и выкладывать их на канал. Правда, у меня сейчас стало опять немного меньше времени посреди недели, поэтому, вероятно, видео будут выходить иногда с не должной регулярностью. Но я постараюсь такие моменты держать на минимуме :)
      Кроме того, почти наверняка задержится выход следующего видео - я жду прихода нового микрофона :)
      Касательно Вашего вопроса - как я понял, Вы хотите, чтобы при нажатии на именованную ячейку происходило скрытие текущего рабочего листа, на котором и находится эта именованная ячейка (т.е. чтобы он стал спрятанным), и выбирался/показывался лист, который был «раскрыт». В этом случае я бы предложил следующий вариант (если я неправильно понял задачу, то обязательно напишите, рассмотрим с Вами другие варианты):
      Sub aSolution()
      'Предположим, на листе "Лист1" находится
      'запускающая макрос именованная ячейка,
      'а лист два - это изначально скрытый лист,
      'который должен быть "раскрыт"

      ThisWorkbook.Worksheets("Лист2").Visible = True 'Раскрываем второй лист
      ThisWorkbook.Worksheets("Лист1").Visible = False 'Прячем первый лист
      ThisWorkbook.Worksheets("Лист2").Range("A1").Activate 'Выбираем второй лист
      End Sub
      Протестируйте у себя этот макрос. Я его привязывал к кнопке на листе, всё сработало. Если что обращайтесь. И большое спасибо Вам еще раз за интерес к каналу! :)
      Хорошего Вам вечера, Павел! :)

    • @pavelkazak3112
      @pavelkazak3112 4 года назад +1

      @@BilyalKhassenov Здравствуйте ХБ! Недавно столкнулся с такой проблемой, как составление отчета с графиками и расчетами, и подробным описанием проделанной работы. Для визуализации своей работы, нодо было отобразить все формулы, участвующие в расчетах, такова прихоть заказчика. Для этого использовал "вставка формулы", немного поломав голову, разобрался, как работает этот инструмент. Отличная опция. Но к своему удивлению, не нашел ни одного урока в нете по этому инструменту Excel. Странно, но факт. Удачи.

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

      Здравствуйте, Павел!
      Большое спасибо за информацию, обязательно постараюсь снять видео на эту тему. Хорошего Вам дня! :)
      С уважением,
      ХБ

  • @user-br1fu1hd4n
    @user-br1fu1hd4n 5 лет назад +9

    Здравствуйте! Интересные уроки, и уровень подачи информации высокий!!! Благодарю! Обратила внимание, что подписчиков не много))) Возможно Вы знакомы с каналом easy excel? На этом канале есть супер проект из 32 уроков. Думаю идею уловили)) P.S. С момента выхода этого проекта, до его завершения (как я увидела) подписчиков увеличилось на приблизительно тыс.40.

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +6

      Здравствуйте, Эля!
      Большое спасибо за Ваш комментарий, положительную оценку и конечно же совет! :)
      Касательно дальнейшего развития канала - я как раз тоже думал, что можно поменять. Появились пару идей, которые я собираюсь реализовать в течение следующих недель (так, например, думаю помещать свою фотографию на заставках видео, чтобы видео лучше узнавались и т.д.).
      Тем не менее, слишком больших надежд на подобные поправки пока не возлагаю, так как думаю, что все дело измененных с недавних пор алгоритмах работы RUclips. Но, в любом случае, ничего страшного, пробьемся :)
      Хорошего Вам дня, Эля! :)

  • @user-iu7zo9gs7x
    @user-iu7zo9gs7x 2 года назад

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

  • @user-xe7pc8qn5m
    @user-xe7pc8qn5m 3 года назад

    Отличный контент! Вопрос : как с помощью xlValue исключить искомое значение из результатов поиска?

  • @shesliketherain335
    @shesliketherain335 Год назад

    Спасибо! Никак не могла разобраться, почему макрос не работает так, как надо.

  • @anndreem7533
    @anndreem7533 4 года назад +2

    Привет. Спасибо большое!! Присоединяюсь к предыдущим комментаторам: Очень крутой урок!!! Вопрос: можно ли find использовать как замену ВПР при большом объеме информации? Дело в том, что в конечной таблице, в которую должны подтягиваться данные из других книг, должны быть либо значения из других книг (записанные не формулой ВПР), либо формулы из различных значений другой книги (например, =500+200+100, где первое число продажи ТТ, второе - продажи Веб, третье - продажи упущенные)

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +2

      Здравствуйте, Ann!
      Большое спасибо за интересный вопрос! Я бы сказал, что использовать метод Find в качестве альтернативы ВПР вполне можно. При этом это была бы одна из множества возможных альтернатив, и, поскольку альтернатив достаточно много, следует просто уже по ситуации оценивать, какой подход является наиболее привлекательным с точки зрения простоты его технической реализации, скорости работы кода и так далее. И соответственно уже с оцененными различными альтернативными подходами следует принимать решение касательно того, какой подход будет выбран.
      Если же выбор падает на использование метода Find, то здесь уже так же открывается достаточно широкий выбор подходов реализации идеи в техническом плане, которые зависят от характеристик Вашего разрабатываемого файла.
      Простейший пример использования Find в качестве замены ВПР: в первом шаге можно использовать Find для нахождения требуемой ячейки, а затем уже при помощи Offset получать требуемые данные, отстоящие от найденной ячейки на определенное количество строк/столбцов (определение количества «Сдвигов» от найденной ячейки естественно можно также сделать динамичным).
      Если будут вопросы - всегда сразу задавайте, Ann. Буду рад помочь 😊
      Хороших Вам выходных! 😊
      С уважением,
      Билял

  • @user-xw9dr6ui9o
    @user-xw9dr6ui9o 3 года назад

    Здравствуйте. Подскажите как реализовать следующую задачку. Нужно в определённом столбце таблицы найти какое то значение, указываемое в combobox. А в listbox в несколько столбцов вывести их и значения соседних ячеек. Например с столбце А у нас номера, в столбце В названия, а в столбце С еще что нибудь. Номера будут повторяться в разных строках. Как сделать чтобы в первую колонку listbox вывелись все эти найденные одинаковые номера. Во вторую колонку, значения из столбца В, соответствкющие этим номерам, а в третью колонку, соответствующие значения из столбца С.

  • @kickone2693
    @kickone2693 2 года назад

    Спасибо за ваш труд. Не подскажите как найти дату?

  • @Anonim-sv4vr
    @Anonim-sv4vr 2 года назад

    Здравствуйте, Билял, не очень давно начала изучать макросы и сейчас добралась до Find. Вопрос такой: когда я ввожу в VBA эту функцию, она вроде бы выполняется (по крайней мере, ошибок не возникает), но у меня не выделяется искомая ячейка, нормально ли это?

  • @sbm5705
    @sbm5705 2 года назад

    Спасибо, как всегда отличный урок!
    Подскажите, если ячейка содержит значение 1500 и формат ее указан как числовой, с разделителем разрядности и двумя цифрами после запятой (т.е. мы видим 1 500,00), то найти 1500 не получается, я должен писать поиск "1 500", т.е. Set myCell = Range("A:B").Find("1 500", LookIn:=xlValues), но это неудобно
    Как от этого можно уйти?
    Искать надо именно значение, а не формулу, т.к. это м.б. ссылка на ячейку =А10, в которой уже число 1500

  • @user-sx3uu3nq5o
    @user-sx3uu3nq5o Год назад

    Добрый день, есть формула которая при переносе текста меняла шрифт текста.

  • @user-sj3wm8fg1p
    @user-sj3wm8fg1p 2 года назад

    Билял, расскажи про настройку поиска в скрытых и не скрытых ячейках - не все знают об этом.

  • @user-gh2ml3cf5o
    @user-gh2ml3cf5o 2 года назад

    Как проверить на соответствие одну ячейку ексель, содержащую текст, с другими ячейками ексель, также содержащими текст??? (проверяем на частичное совпадение)

  • @Serega_Zaicev
    @Serega_Zaicev 3 года назад

    до 19 урока всё чётко а после 19 урока такое ощущение сразу с 1 -го класса посадили в 5 - й смотриш на всё это и думаеш куда я попал и хватит уже всё в MsgBox ответы выводить, да это было уместно на первых уроках , но щас задачи усложняютса и ответы в отдельные столбцы выводите и не по 1 ответу в 1 строку а сразу по несколько в разные строки

  • @MatePanzer
    @MatePanzer 2 года назад

    Билял, привет! Столкнулся с проблемой применения метода FIND при поиске чисел с запятой. Следуя твоему примеру, в столбце вместо букв я расположил цифры, но поиск успешен только для целых чисел. Далее я выяснил, что условие поиска должно содержать в себе точку (1.5 вместо 1,5) однако возник вопрос на примере: если взять ComboBox, заполнить его значениями из столбца (1 1,5 2 2,5 ...), а затем методом FIND выполнять поиск по этому же столбцу значениями из ComboBox, то поиск также успешен только для целых чисел. По-видимому, нужно как-то заменить запятую в промежуточной переменной. Формат ячеек роли не играет. Как решить задачу?
    Спасибо за уроки!

  • @user-zx2rn1tb7n
    @user-zx2rn1tb7n Год назад

    Добрый день, не могли бы вы снять видео о написании макроса с таким условием: имеется таблица с 6 столбцами, в столбце В находятся названия элементов в текстовом виде, в столбце E числовые значения которые они принимают.
    Необходимо найти точное название элемента в столбце В ,, насколько я понимаю и адрес ячейки,, сместиться на столбец E в котором и будет числовое значение искомого элемента, сохранить значение этого элемента в глобальной переменной и записать его в ячейку А3 первого рабочего листа, и второго рабочего листа .

  • @Serega_Zaicev
    @Serega_Zaicev 3 года назад +1

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

    • @user-qn5by5iv7u
      @user-qn5by5iv7u 3 года назад

      "Лучше подскажите..." - как будто бы он вам что-то должен 😆

  • @azimjon_azizov
    @azimjon_azizov 11 месяцев назад

    Как в VBA использовать таджикские буквы (ғ, ӣ, қ, ӯ, ҳ, ҷ), чтобы искать их, например? Когда пишу эти буквы вместо них пишется вопросительный знак.

  • @jeidiviret1337
    @jeidiviret1337 2 года назад

    Вот вроде бы все осветил... хорошо... Однако сам же в начале ролика привел окно поиска Excel, сказал, что все параметры этого меню можно задать в функции Find VBA, а опцию "Искать:" окна поиска, принимающую значения "на листе" или "в книге" дипломатично опустил. Но лист может оказаться не один, и зачастую оказывается не один. И как быть? Куда впихнуть в функцию этот параметр?

  • @dmitriykotov3397
    @dmitriykotov3397 3 года назад +1

    Билял, подскажите, пожалуйста, в чем причина того, что Find отказывается искать ошибки на листе (#ДЕЛ/0!, #Н/Д)? Причем не важно формула ли это, формула сохраненная как значение или просто руками написать #ДЕЛ/0!, результат один - поиск не работает.
    Sub poisk()
    Dim rangeSearch As Range
    Dim rangeValue As Range
    Dim cellAddress As String
    Set rangeSearch = Range("a:z")
    Set rangeValue = rangeSearch.Find("#ДЕЛ/0!", , , xlWhole)
    cellAddress = rangeValue.Address
    MsgBox cellAddress
    End Sub

    • @BilyalKhassenov
      @BilyalKhassenov  3 года назад +3

      Здравствуйте, Дмитрий!
      Искать нужно название ошибки на английском - это первое. И второе - искать нужно лишь значения. Попробуйте вот этот код:
      Sub poisk()
      Dim rangeSearch As Range
      Dim rangeValue As Range
      Dim cellAddress As String
      Set rangeSearch = Range("a:z")
      Set rangeValue = rangeSearch.Find(What:="#DIV/0!", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
      cellAddress = rangeValue.Address
      MsgBox cellAddress
      End Sub
      С уважением,
      Билял

    • @dmitriykotov3397
      @dmitriykotov3397 3 года назад +1

      Работает, большое спасибо!

  • @user-qn5by5iv7u
    @user-qn5by5iv7u 3 года назад +1

    2021

  • @Bi-dj3iy
    @Bi-dj3iy Год назад

    Возвращайся, 😀

  • @sappy2510
    @sappy2510 3 года назад

    а можно искать таким образом не в ячейках а в массиве по значениям

    • @BilyalKhassenov
      @BilyalKhassenov  3 года назад

      С помощью Find - нет. Чтобы найти искомое значение в массиве, нужно использовать цикл по всем значениям в массиве и сравнивать содержимое.
      С уважением,
      Билял

    • @sappy2510
      @sappy2510 3 года назад +1

      @@BilyalKhassenov вот блин) халявы не бывает)

    • @BilyalKhassenov
      @BilyalKhassenov  3 года назад

      😅

  • @Serega_Zaicev
    @Serega_Zaicev 3 года назад

    а нельзя по человечески выводить ответы , к примеру мы искали в диапозоне "A1:C3" буквы "A" , нашли их и выводим их , например нашли 3 буквы "A" и пусть они выводятса поочерёдно в какойто столбик например в F1 = первая буква "A" ,,, F2 = вторая буква "A" и так далее , а то выводим по одной буковке в msgBox и чё я должен понять, я вапще теперь запутался с добавлением коллекции как я должен вывести в отдельный столбик найденные нами буквы