Поиск в excel в отдельный лист

Нужна аналогичная программа (надстройка, макрос) для Excel?

Оформите заказ, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

  • Простые макросы
  • Надстройки Excel
  • Создание отчётов
  • Поиск в Excel
  • Панель инструментов

Скриншот результатов поиска с выводом на отдельный лист

Надстройка SearchExcel предназначена для поиска заданного текста во всех столбцах текущего листа Excel, с выводом результатов поиска на отдельный лист.

При запуске надстройка формирует панель инструментов, с которой осуществляется запуск всех макросов:

Назначение кнопок надстройки:

 — поле для ввода искомого текста. Нажатие клавиши Enter запускает поиск.

 — удаление листа с результатами поиска. (выполняется автоматически при повторном поиске)

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

При запуске поиска (вводе числа в текстовое поле, и нажатии Enter) макрос создаёт в текущем файле дополнительный лист (с названием «Результаты поиска»),
и копирует на этот лист все строки, в которых содержится заданный текст.

Выполняется поиск по частичному совпадению текста (т.е., при поиске текста 1234 будут найдены ячейки, содержащие числа 12345, 5612348 и т.д.)

На листе с результатами поиска устанавливается ширина столбцов, совпадающая с шириной столбцов исходного листа.

Бонус: функция окраски ячеек со значениями больше введённого.

При нажатии на «красную лампочку» появляется диалоговое окно для ввода числа:

После ввода числа всем ячейкам текущего столбца (того, в котором установлен курсор) назначается правило условного форматирования:

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

Если при вводе числа была нажата кнопка «Отмена» (или клавиша ESC), то выполняется обратное действие:
удаление всех правил условного форматирования для ячеек текущего столбца

(кнопка с белой лампочкой выполняет аналогичное действие)

  • 47047 просмотров

Поиск в программе Microsoft Excel

В документах Microsoft Excel, которые состоят из большого количества полей, часто требуется найти определенные данные, наименование строки, и т.д. Очень неудобно, когда приходится просматривать огромное количество строк, чтобы найти нужное слово или выражение. Сэкономить время и нервы поможет встроенный поиск Microsoft Excel. Давайте разберемся, как он работает, и как им пользоваться.

Поисковая функция в Excel

Поисковая функция в программе Microsoft Excel предлагает возможность найти нужные текстовые или числовые значения через окно «Найти и заменить». Кроме того, в приложении имеется возможность расширенного поиска данных.

Способ 1: простой поиск

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

  1. Находясь во вкладке «Главная», кликаем по кнопке «Найти и выделить», которая расположена на ленте в блоке инструментов «Редактирование». В появившемся меню выбираем пункт «Найти…». Вместо этих действий можно просто набрать на клавиатуре сочетание клавиш Ctrl+F.

После того, как вы перешли по соответствующим пунктам на ленте, или нажали комбинацию «горячих клавиш», откроется окно «Найти и заменить» во вкладке «Найти». Она нам и нужна. В поле «Найти» вводим слово, символы, или выражения, по которым собираемся производить поиск. Жмем на кнопку «Найти далее», или на кнопку «Найти всё».

При нажатии на кнопку «Найти далее» мы перемещаемся к первой же ячейке, где содержатся введенные группы символов. Сама ячейка становится активной.

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

Поисковые символы не обязательно должны быть самостоятельными элементами. Так, если в качестве запроса будет задано выражение «прав», то в выдаче будут представлены все ячейки, которые содержат данный последовательный набор символов даже внутри слова. Например, релевантным запросу в этом случае будет считаться слово «Направо». Если вы зададите в поисковике цифру «1», то в ответ попадут ячейки, которые содержат, например, число «516».

Для того, чтобы перейти к следующему результату, опять нажмите кнопку «Найти далее».

Так можно продолжать до тех, пор, пока отображение результатов не начнется по новому кругу.

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

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

      Выделяем область ячеек, в которой хотим произвести поиск.

  • Набираем на клавиатуре комбинацию клавиш Ctrl+F, после чего запуститься знакомое нам уже окно «Найти и заменить». Дальнейшие действия точно такие же, что и при предыдущем способе. Единственное отличие будет состоять в том, что поиск выполняется только в указанном интервале ячеек.
  • Способ 3: Расширенный поиск

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

    К тому же, в выдачу может попасть не только содержимое конкретной ячейки, но и адрес элемента, на который она ссылается. Например, в ячейке E2 содержится формула, которая представляет собой сумму ячеек A4 и C3. Эта сумма равна 10, и именно это число отображается в ячейке E2. Но, если мы зададим в поиске цифру «4», то среди результатов выдачи будет все та же ячейка E2. Как такое могло получиться? Просто в ячейке E2 в качестве формулы содержится адрес на ячейку A4, который как раз включает в себя искомую цифру 4.

    Но, как отсечь такие, и другие заведомо неприемлемые результаты выдачи поиска? Именно для этих целей существует расширенный поиск Excel.

      После открытия окна «Найти и заменить» любым вышеописанным способом, жмем на кнопку «Параметры».

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

    По умолчанию, функции «Учитывать регистр» и «Ячейки целиком» отключены, но, если мы поставим галочки около соответствующих пунктов, то в таком случае, при формировании результата будет учитываться введенный регистр, и точное совпадение. Если вы введете слово с маленькой буквы, то в поисковую выдачу, ячейки содержащие написание этого слова с большой буквы, как это было бы по умолчанию, уже не попадут. Кроме того, если включена функция «Ячейки целиком», то в выдачу будут добавляться только элементы, содержащие точное наименование. Например, если вы зададите поисковый запрос «Николаев», то ячейки, содержащие текст «Николаев А. Д.», в выдачу уже добавлены не будут.

    По умолчанию, поиск производится только на активном листе Excel. Но, если параметр «Искать» вы переведете в позицию «В книге», то поиск будет производиться по всем листам открытого файла.

    В параметре «Просматривать» можно изменить направление поиска. По умолчанию, как уже говорилось выше, поиск ведется по порядку построчно. Переставив переключатель в позицию «По столбцам», можно задать порядок формирования результатов выдачи, начиная с первого столбца.

    В графе «Область поиска» определяется, среди каких конкретно элементов производится поиск. По умолчанию, это формулы, то есть те данные, которые при клике по ячейке отображаются в строке формул. Это может быть слово, число или ссылка на ячейку. При этом, программа, выполняя поиск, видит только ссылку, а не результат. Об этом эффекте велась речь выше. Для того, чтобы производить поиск именно по результатам, по тем данным, которые отображаются в ячейке, а не в строке формул, нужно переставить переключатель из позиции «Формулы» в позицию «Значения». Кроме того, существует возможность поиска по примечаниям. В этом случае, переключатель переставляем в позицию «Примечания».

    Ещё более точно поиск можно задать, нажав на кнопку «Формат».

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

    Если вы хотите использовать формат какой-то конкретной ячейки, то в нижней части окна нажмите на кнопку «Использовать формат этой ячейки…».

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

    После того, как формат поиска настроен, жмем на кнопку «OK».

    Бывают случаи, когда нужно произвести поиск не по конкретному словосочетанию, а найти ячейки, в которых находятся поисковые слова в любом порядке, даже, если их разделяют другие слова и символы. Тогда данные слова нужно выделить с обеих сторон знаком «*». Теперь в поисковой выдаче будут отображены все ячейки, в которых находятся данные слова в любом порядке.

  • Как только настройки поиска установлены, следует нажать на кнопку «Найти всё» или «Найти далее», чтобы перейти к поисковой выдаче.
  • Как видим, программа Excel представляет собой довольно простой, но вместе с тем очень функциональный набор инструментов поиска. Для того, чтобы произвести простейший писк, достаточно вызвать поисковое окно, ввести в него запрос, и нажать на кнопку. Но, в то же время, существует возможность настройки индивидуального поиска с большим количеством различных параметров и дополнительных настроек.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    ВПР с поиском по нескольким листам

    ВПР по всем листам (43,0 KiB, 12 619 скачиваний)

    Если необходимо найти какое-либо значение в большой таблице очень часто применяется функция ВПР. Но ВПР работает только с одной таблицей и нет никакой возможности средствами самой функции просмотреть искомое значение на нескольких листах. Если поиск необходимо осуществить только по двум листам, то можно схитрить:
    =ВПР( A1 ;ЕСЛИ(ЕНД(ВПР( A1 ;Лист2!A1:B10;2;0));Лист3!A1:B10;Лист2!A1:B10);2;0)

    А когда листов больше? Можно плодить ЕСЛИ. Но это во-первых совсем не наглядно и во-вторых очень непрактично, т.к. при добавлении или удалении листов придется править всю мега-формулу. Да и при работе с количеством листов более 10 есть большой шанс, что длина формулы выйдет за пределы допустимой.

    Есть небольшой прием, который поможет искать значение в указанных листах. Для начала необходимо создать на листе список листов книги, в которых искать значение. В приложенном к статье примере они записаны в диапазоне $E$2:$E$5 .
    =ВПР( A2 ;ДВССЫЛ(«‘»&ИНДЕКС( $E$2:$E$5 ;ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ(«‘»& $E$2:$E$5 &»‘!A1:A50″); A2 )>0;0))&»‘!A:B»);2;0)

    Формула вводится в ячейку как формула массива — т.е. сочетанием клавиш Ctrl+Shift+Enter. Это очень важное условие. Если формулу не вводить в ячейку как формулу массива, то необходимого результата не получить.
    Попробую кратенько описать принцип работы данной формулы.

    Перед чтением дальше советую скачать пример:

    ВПР по всем листам (43,0 KiB, 12 619 скачиваний)

    ДВССЫЛ нам нужна для преобразования текстового представления ссылок на листы в действительные. Подробно не буду останавливаться на принципе работы ДВССЫЛ, просто приведу этапы вычислений:
    СЧЁТЕСЛИ(ДВССЫЛ(«‘»& $E$2:$E$5 &»‘!A1:A50»); A2 )

    В результате вычисления данного блока у нас получается массив из количества повторений искомого значения на каждом из указанных листов: СЧЁТЕСЛИ(<1;0;0;0>;A2) . Поэтому следующий блок
    ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ(«‘»& $E$2:$E$5 &»‘!A1:A50»); A2 )>;0;0)
    работает именно с этим:
    ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(<1;0;0;0>; A2 )>0;0)
    Читать подробнее про СЧЁТЕСЛИ

    в результате чего мы получаем позицию имени листа в массиве имен листов $E$2:$E$5 , с помощью ИНДЕКС получаем имя листа и подставляем это имя уже к ДВССЫЛ, а она в ВПР:
    =ВПР( A2 ;ДВССЫЛ(«‘»&ИНДЕКС(<«Астраханьоблгаз»:»Липецкоблгаз»:»Оренбургоблгаз»:»Ростовоблгаз»>;1)&»‘!A:B»);2;0) =>
    =ВПР( A2 ;ДВССЫЛ(«‘Лист2’!A:B»);2;0) =>
    =ВПР( A2 ;’Лист2′!A:B;2;0)

    Что нам и требовалось. Теперь если в книгу будут добавлены еще листы, то необходимо будет всего лишь дописать их к диапазону $E$2:$E$5 и при необходимости этот диапазон расширить. Так же можно задать диапазон $E$2:$E$5 как динамический и тогда необходимость в правке формулы отпадет вовсе.

    Используемые в формуле величины:
    A2 — ссылка на ячейку с искомым значением. Т.е. указывается то значение, которое требуется найти на листах.

    $E$2:$E$5 — диапазон с именами листов, в которых требуется осуществлять поиск указанного значения ( A1 ).

    Диапазон «‘!A1:A50» — это диапазон, в котором СЧЁТЕСЛИ ищет совпадения. Поэтому указывается только один столбец данных. При необходимости следует расширить или изменить. Можно указать так же «‘!A:A» , но при этом следует учитывать, что указание целого столбца может привести к значительному увеличению времени выполнения функции. Поэтому имеет смысл просто задать диапазон с запасом, например «‘!A1:A10000» .

    «‘!A:B» — диапазон для аргумента ВПР — Таблица. В первом столбце этого диапазона на каждом из указанных листов ищется указанное значение ( A2 ). При нахождении возвращается значение из указанного столбца. Читать подробнее про ВПР>>

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

    ВПР по всем листам (43,0 KiB, 12 619 скачиваний)

    Так же можно искать по нескольким листам разных книг , а не только по нескольким листам одной книги. Для этого необходимо будет в списке листов вместе с именами листов добавить имена книг в квадратных скобках: [Книга1.xlsb]Май
    [Книга1.xlsb]Июнь
    [Книга2.xlsb]Май
    [Книга2.xlsb]Июнь
    Перечисленные книги обязательно должны быть открыты

    Решил добавить простенькую функцию пользователя(UDF) для тех, кому проще «общаться» с VBA, чем с формулами. Функция ищет указанное значение во всех листах книги, в которой записана(даже в скрытых):

    Function VLookUpAllSheets(vCriteria As Variant, rTable As Range, lColNum As Long, Optional iPart As Integer = 1) As Variant Dim rFndRng As Range If iPart <> 1 Then iPart = 2 For i = 1 To Worksheets.Count If Sheets(i).Name <> Application.Caller.Parent.Name Then With Sheets(i) Set rFndRng = .Range(rTable.Address).Resize(, 1).Find(vCriteria, , xlValues, iPart) If Not rFndRng Is Nothing Then VLookUpAllSheets = rFndRng.Offset(, lColNum — 1).Value Exit For End If End With End If Next i End Function

    Функция попроще, чем ВПР — последний аргумент(интервальный_просмотр) выполняет несколько иные, чем в ВПР функции. Хотя полагаю немногие его используют в классическом варианте.
    rTable — указывается таблица для поиска значений(как в стандартной ВПР)
    vCriteria — указывается ссылка на ячейку или текстовое значение для поиска
    lColNum — указывается номер столбца в таблице rTable, значение из которого необходимо вернуть — может быть ссылкой на столбец — СТОЛБЕЦ().
    iPart — указывается метод просмотра. Если не указан, либо указана цифра 1, то поиск осуществляется по полному совпадению с ячейкой. Но в таком варианте допускается применение подстановочных символов * и ?. Если указано значение, отличное от 1, то совпадение будет отбираться по части вхождения. Если в vCriteria указать «при», то совпадением будет считаться и слово «прибыль»(первый буквы совпадают) и «неприятный»(в середине встречается «при»). Но в этом случае знаки * и ? будут восприниматься «как есть». Может пригодиться, если в искомом тексте присутствуют символы звездочки и вопросительного знака и надо найти совпадения, учитывая эти символы.

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

    Надстройка для поиска на всех листах книги Excel

    Надстройка SearchText предназначена для поиска заданного текста в книге Excel, с выводом результатов поиска на отдельный лист.

    При запуске надстройка формирует панель инструментов, с которой осуществляется запуск всех макросов:

    В Excel 2007 и 2010 панель инструментов можно найти на вкладке «Надстройки»:

    Надстройка SearchText является расширенной версией надстройки для поиска на текущем листе.

    Назначение кнопок надстройки:

    — поле для ввода искомого текста. Нажатие клавиши Enter запускает поиск.

    — удаление листа с результатами поиска. (выполняется автоматически при повторном поиске)

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

    или — переключатель режимов поиска
    (щелкните на этой кнопке для переключения режима поиска)

    При запуске поиска (вводе числа в текстовое поле, и нажатии Enter) макрос создаёт в текущем файле дополнительный лист (с названием «Результаты поиска»),
    и копирует на этот лист все строки, в которых содержится заданный текст.

    Выполняется поиск по частичному совпадению текста (т.е., при поиске текста 1234 будут найдены ячейки, содержащие числа 12345, 5612348 и т.д.)

    На листе с результатами поиска устанавливается ширина столбцов, совпадающая с шириной столбцов исходного листа, если поиск выполняется по одному листу,
    или на лист результатов добавляется дополнительный столбец, в котором для каждой найденной строки указывается, на каком из листов она была найдена:

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

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

    Как в excel сделать поиск по всем листам

    Ингвар, доброго времени.

    В качестве не очень изящного, но всё-таки решения могу предложить следующую формулу, которую можно протянуть по всем ячейкам Вашего примера. Вставлять в B3 на Листе1.

    На первый взгляд выглядит довольно объёмно и страшно, но если разобраться — довольно проста.

    Простейшая функция для поиска — ВПР. С её помощью можно найти данные по одной таблице. Что, я уверен, Вы уже с лёгкостью делаете. Если ВПР будет искать в таблице, где НЕТ того, что мы ищем (например, если искать «единицу» на «Листе3» Вашего примера), формула выдаёт ошибку Н/Д. И это свойство можно использовать.

    Функция ЕСЛИОШИБКА проверяет то, что мы вводим. И если наша функция внутри ЕСЛИОШИБКИ выдает, например, Н/Д, то ЕСЛИОШИБКА выдаст нам второе значение, записанное через точку с запятой. И моя формула построена следующим образом:

    = ЕСЛИОШИБКА (*искать в первой таблице* ; *если не нашли в первой таблице, ищем во второй* )

    При этом внутрь условного куска *если не нашли в первой таблице, ищем во второй* можно вложить вторую ЕСЛИОШИБКА для просмотра ещё одной таблицы. Что я и сделал. Получилось:

    = ЕСЛИОШИБКА (*искать в первой таблице* ; ЕСЛИОШИБКА ( *искать во второй таблице* ; *искать в третьей таблице) )

    При этом таких вложений из ЕСЛИОШИБКА можно сделать не ограниченное количество.

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

    Советы и лайфхаки по работе с Excel

    Многие сталкивались с файлами Ексель, в которых создано огромное количество листов. Чтобы найти нужный лист нужно прокрутить все созданные в книге листы.

    Но есть более простой способ быстро открыть нужный лист.

    Щелкните правой кнопкой мыши на кнопки прокрутки листов, которые находятся слева от названия листов и выберите нужный лист:

    Как снять пароль в Excel? Три рабочих способа снятия пароля.

    Способ 1. (Используем программу) Ищем в поисковике и загружаем программу

    Как собрать несколько книг Excel в одну?

    Например, мы имеем много рабочих книг Excel, и мы хотим

    Что такое макрос и куда его вставлять в Excel?

    Нам в работе иногда не хватает стандартных возможностей Эксель и приходится напрягать

    Как добавить абзац в ячейке Excel?

    Достаточно часто при заполнении ячейки текстом, возникает необходимость ввести текст

    Как посчитать количество уникальных значений в колонке Excel?

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

    Отсортировать уникальные значения в Excel

    Предположим, что у нас есть такая таблица с перечнем соглашений,

    Как сделать и добавить выпадающий список в Excel?

    В Excel есть одна интересная особенность, а именно возможность вводить

    Как быстро перейти в нужный лист книги Excel?

    Многие сталкивались с файлами Ексель, в которых создано огромное количество

    Задать вопрос

    Acvoloe

    @Acvoloe

    excel

    • Excel

    Всем привет!
    Как можно в excel вывести список результатов поиска в отдельный лист ?


    • Вопрос задан

      более трёх лет назад

    • 463 просмотра


    Комментировать

    Подписаться

    1



    Простой

    Комментировать


    Решения вопроса 1

    res2001

    @res2001

    Developer, ex-admin

    Используйте автофильтр, а потом копирование/вставка по фильтру.

    Ответ написан

    более трёх лет назад


    Комментировать


    Комментировать

    Пригласить эксперта


    Ответы на вопрос 0


    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    Войти через центр авторизации


    Похожие вопросы

    • javascript

      • JavaScript

      • +3 ещё




      Сложный

      Как в Excel для Интернет генерировать документы Word по шаблону?


      • 1 подписчик
      • вчера


      • 56 просмотров

      0

      ответов

    • excel

      • Excel




      Простой

      Как реализовать формирование документа?


      • 1 подписчик
      • 14 апр.


      • 18 просмотров

      1

      ответ

    • excel

      • Excel

      • +1 ещё




      Простой

      Почему в libre office calc работает =ГИПЕРССЫЛКА но не работает =HYPERLINK?


      • 1 подписчик
      • 14 апр.


      • 24 просмотра

      1

      ответ

    • excel

      • Excel

      • +2 ещё




      Простой

      Как в макросе Word исправить удаление форматирования текста при его выполнении?


      • 1 подписчик
      • 13 апр.


      • 25 просмотров

      0

      ответов

    • excel

      • Excel




      Простой

      Как удалить текст справа до запятой excel?


      • 1 подписчик
      • 13 апр.


      • 30 просмотров

      1

      ответ

    • c#

      • C#

      • +2 ещё




      Простой

      Как можно копировать excel файл при помощи c# в winforms?


      • 1 подписчик
      • 12 апр.


      • 69 просмотров

      2

      ответа

    • excel

      • Excel

      • +1 ещё




      Простой

      Какую роль выполняет команда Call в языке VBA?


      • 1 подписчик
      • 12 апр.


      • 28 просмотров

      2

      ответа

    • регулярные-выражения

      • Регулярные выражения

      • +2 ещё




      Простой

      Какое регулярное выражение использовать, что бы достать из текста все цифры?


      • 1 подписчик
      • 10 апр.


      • 80 просмотров

      4

      ответа

    • c#

      • C#

      • +2 ещё




      Средний

      Запускаю программу и хочу добавить в ячейку A1 Excel значение из textBox1, но программа выводит ошибку доступа. Как можно исправить эту ошибку?


      • 1 подписчик
      • 09 апр.


      • 58 просмотров

      1

      ответ

    • excel

      • Excel




      Простой

      Как сделать правильно выборку?


      • 1 подписчик
      • 09 апр.


      • 20 просмотров

      1

      ответ


    • Показать ещё
      Загружается…

    Вакансии с Хабр Карьеры

    BI аналитик

    Лоция

    Москва

    от 100 000 до 120 000 ₽

    Контент менеджер

    ULHC

    от 16 000 до 45 000 ₽

    Специалист по управлению геолого-промысловыми данными (Data Scientist)

    Тюменский нефтяной научный центр

    Тюмень

    от 80 000 до 150 000 ₽

    Ещё вакансии

    Заказы с Хабр Фриланса

    Ищу готовый Crypto Wallet

    16 апр. 2023, в 16:39

    80000 руб./за проект

    Переписать скрипт с Python на Java с дополнениями

    16 апр. 2023, в 14:44

    4500 руб./за проект

    Перерисовать изображение в векторе

    16 апр. 2023, в 13:46

    1000 руб./за проект

    Ещё заказы

    Минуточку внимания

    Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями

    Зарегистрироваться

    Войдите на сайт

    Чтобы задать вопрос и получить на него квалифицированный ответ.

    Войти через центр авторизации


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

    Пусть Исходный список значений (например, перечень инструментов) находится в диапазоне

    A10:A19

    (см.

    Файл примера

    ).

    Задача

    Выведем в отдельный диапазон значения, которые удовлетворяют критерию. Рассмотрим различные варианты поиска.

    А. Найти значения, которые содержат критерий

    Для удобства создадим

    именованный диапазон

    Список

    .

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

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

    содержится

    текст-критерий (например, слово

    дрель

    ). Критерий вводится в ячейку

    С6

    .

    Для создания списка, содержащего найденные значения, воспользуемся

    формулой массива

    :

    =ИНДЕКС(Список; НАИМЕНЬШИЙ( ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($C$6;Список);0)>0;СТРОКА(Список)-СТРОКА($A$9);30); СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

    Алгоритм работы формулы следующий (для просмотра промежуточных шагов работы формулы воспользуйтесь

    клавишей

    F9

    ):

    • Функция

      ПОИСК()

      , перебирая элементы исходного списка, определяет, содержится ли в нем значение-критерий. Если значение не содержится, то возвращается ошибка #ЗНАЧ! В противном случае возвращается числовое значение, соответствующее номеру начальной позиции вхождения критерия в значение из списка (здесь нам не важен номер позиции, важно, что это число);
    • Функция

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

      используется для подавления ошибки #ЗНАЧ! заменяя ее на число 0;
    • Функция

      ЕСЛИ()

      заменяет числовые значения, возвращенные функцией

      ПОИСК()

      , на номер позиции значения в списке. Если значение =0 (соответствует ошибке #ЗНАЧ!), то возвращается число 30. В принципе, вместо 30 можно указать любое число, которое больше номера последней заполненной позиции Исходного списка (это нужно для правильной сортировки функцией

      НАИМЕНЬШИЙ()

      );
    • Функция

      НАИМЕНЬШИЙ()

      сортирует массив номеров строк по возрастанию;
    • Функция

      ДВССЫЛ()

      возвращает

      массив последовательных чисел

      ;

    • Функция

      ИНДЕКС()

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

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

    формулу массива

    нужно распространять на диапазон той же размерности, что и исходный список. Вышеуказанная

    формула массива будет возвращать несколько значений

    , поэтому перед вводом формулы нужно выделить сразу весь диапазон, т.е. ячейки

    С10:С19

    , ввести формулу в

    Строке формул

    и нажать

    CRTL+SHIFT+ENTER

    .

    Для скрытия ошибок #ССЫЛКА!, возвращаемой формулой массива, к диапазону

    С10:С19

    применено правило

    Условного форматирования

    .

    Б. Найти значения, которые совпадают с критерием (точное совпадение)

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

    учета РЕгиСТра

    ). Критерий вводится в ячейку

    E

    6

    .

    Для создания списка, содержащего найденные значения, воспользуемся

    формулой массива

    :

    =ИНДЕКС(Список; НАИМЕНЬШИЙ( ЕСЛИ($E$6=Список;СТРОКА(Список)-СТРОКА($A$9);30); СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

    B. Найти значения, которые начинаются с критерия

    В этом случае будут выведены все значения, которые начинаются или совпадают с критерием. Критерий вводится в ячейку

    G

    6

    .

    Для создания списка, содержащего найденные значения, воспользуемся

    формулой массива

    : =

    ИНДЕКС(Список;НАИМЕНЬШИЙ( ЕСЛИ(ЕСЛИОШИБКА(ПОИСК($G$6;Список);0)=1;СТРОКА(Список)-СТРОКА($A$9);30); СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))

    Г. Найти значения, которые заканчиваются на критерий

    В этом случае будут выведены все значения, которые заканчиваются или совпадают с критерием. Критерий вводится в ячейку

    I

    6

    .

    Для создания списка, содержащего найденные значения, воспользуемся

    формулой массива

    :

    =ИНДЕКС(Список;НАИМЕНЬШИЙ( ЕСЛИ($I$6=ПРАВСИМВ(Список;ДЛСТР($I$6));СТРОКА(Список)-СТРОКА($A$9);30); СТРОКА(ДВССЫЛ(«A1:A»&ЧСТРОК(Список)))))


    СОВЕТ:

    О поиске текстовых значений с использованием

    подстановочных знаков

    читайте в статье

    Поиск текстовых значений в списках. Часть2. Подстановочные знаки

    . В статье

    Выделение ячеек c ТЕКСТом с применением Условного форматирования

    приведено решение аналогичной задачи с использованием

    Условного форматирования

    .

    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    1

    Поиск данных в листах и копирование их в отдельные листы

    23.01.2013, 17:57. Показов 7610. Ответов 14


    Студворк — интернет-сервис помощи студентам

    Есть файл который обновляется каждый день. В нём есть колонка U.
    Нужен макрос, который бы искал по данной колонке определённые слова из листа 0, и вытаскивал из всех листов все строки которые содержат данное слово и создавал новые листы с уже скопированными данными. Т.е. отдельный лист со словом морков, перец, груш, яблок и т.д. В колонке U может быть как яблоки так и яблоко, груши, груша, поэтому копировать те строки в которых есть сочетание яблок, груш…



    0



    undefined7

    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    24.01.2013, 10:58

     [ТС]

    2

    На форуме нашёл такой код, он частично делает то что нужно, т.е. ищет в определённом столбце нужное слово, и копирует на новый лист.

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Option Explicit
    Sub bb()
    Dim i&, j&, c As Range
    Worksheets.Add before:=Sheets(1)
    For i = 2 To Worksheets.Count
        For Each c In Worksheets(i).UsedRange.Columns(22).Cells
    '1 - "определённый столбец"
            If c = "перец" Then
                j = j + 1
                c.EntireRow.Copy Cells(j, 1)
            End If
        Next
    Next

    Что нужно в нём изменить чтобы он брал данные с определённого листа (Лист0) и определённого массива $A$1:$A$100 и для каждой ячейки создавал новый файл?



    0



    5468 / 1148 / 50

    Регистрация: 15.09.2012

    Сообщений: 3,514

    25.01.2013, 07:34

    3

    undefined7, на основе книги из сообщения #1 приведите пример, что должен сделать код. Напишите примерно в таком виде:

    1. код двигается по листу «Лист1» по столбцу «U»;
    2. берёт слово «перец»;
    3. пишите, что дельше делает код.



    1



    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    25.01.2013, 10:23

     [ТС]

    4

    Цитата
    Сообщение от Скрипт
    Посмотреть сообщение

    undefined7, на основе книги из сообщения #1 приведите пример, что должен сделать код. Напишите примерно в таком виде:

    1. код двигается по листу «Лист1» по столбцу «U»;
    2. берёт слово «перец»;
    3. пишите, что дельше делает код.

    Дальше он копирует полностью строку в которой находиться это слово на новый лист, идёт дальше, находит ещё раз это слово, опять копирует, и так до конца.



    0



    Скрипт

    5468 / 1148 / 50

    Регистрация: 15.09.2012

    Сообщений: 3,514

    25.01.2013, 11:36

    5

    undefined7, код написан для книги из сообщения #1. Если вы повторно запустите макрос, то будет ошибка, если не удалите листы, сформированные макросом, т.к. нельзя чтобы в книге были листы с одинаковыми именами. Имя листу даётся в коде в пункте 4.

    Кликните здесь для просмотра всего текста

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    
    Sub Procedure_1()
        
        'В константе указываете порядковый номер последнего
            'листа, который должен просматриваться макросом.
        'Это связано с тем, что в ходе работа коды в книгу
            'будут добавляться листы.
        Const mySheetCount As Long = 4
     
        Dim shSheet_1 As Excel.Worksheet
        Dim shLast As Excel.Worksheet
        Dim rngSearch As Excel.Range
        Dim rngFind As Excel.Range, myAddress As String
        Dim myLastRow_1 As Long, myLastRow_2 As Long
        Dim iSheet_1 As Long, jSheet As Long
        
        '1. На время работы кода для ускорения работы кода отключаем:
        'Обновление монитора.
        Application.ScreenUpdating = False
        'Пересчёт формул.
        Application.Calculation = xlCalculationManual
        'События.
        Application.EnableEvents = False
        
        '2. Даём листу "Лист0" имя "shSheet_1".
        'Через это имя будем обращаться к этому листу.
        Set shSheet_1 = Worksheets("Лист0")
        
        'Двигаемся по листу "Лист0" по первому столбцу
            'до первой пустой ячейки.
        'Начиаем двигаться с первой строки.
        iSheet_1 = 1
        Do While IsEmpty(shSheet_1.Cells(iSheet_1, "A")) = False
        
            '3. Чтобы код был проще, сразу создаём лист для текущей ячейки,
                'независимо от того, встретится текст из текущей ячейки на
                'просматриваемых листах или нет.
            'After:=Worksheets(Worksheets.Count) - это последний лист.
            'Одновременно, при создании листа, даём имя "shLast" листу.
                'Через это имя будем обращаться к листу.
            Set shLast = Worksheets.Add(After:=Worksheets(Worksheets.Count))
            
            '4. Даём имя листу в соответствии с данными из ячейки.
            'Только в данном случае нужно учитывать:
                '1) нет ли уже листа с таким именем;
                '2) содержит ли имя допустимые символы;
                '3) длина имени.
            'Я этого ничего не буду учитывать.
            shLast.Name = shSheet_1.Cells(iSheet_1, "A").Value
        
            '5. Подготавливаем номер строки, куда будут вставляться данные на новом листе.
            myLastRow_2 = 1
        
            'В цикле с "jSheet" проходимся по листам, которые надо обработать.
            For jSheet = 2 To mySheetCount Step 1
            
                'Буду использовать команду "Find" для поиска.
                '6. Задаю диапазон поиска, чтобы код работал быстрее и лишнее
                    'не просматривал.
                '6.1. Определяю последнюю строку с данными на текущем листе
                    'в столбце "U".
                myLastRow_1 = Worksheets(jSheet).Columns("U").Find(What:="?", _
                    LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
                    SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row
                '6.2. Даю фрагменту листа, где нужно искать, имя "rngSearch".
                'Здесь вместо "U1" можно указать строку, с которой нужно искать.
                Set rngSearch = Worksheets(jSheet).Range("U1:U" & myLastRow_1)
                
                '7. Осуществляем поиск.
                'After:=rngSearch.Cells(rngSearch.Rows.Count, 1) - здесь указываем,
                    'что поиск начинаем с последней ячейки. Это связано с тем, что поиск
                    'начинается после указанной ячейки, чтобы данные брались в том порядке,
                    'в котором они находятся на листе.
                'LookAt:=xlPart - поиск по частичному совпадению, например "груш".
                Set rngFind = rngSearch.Find(What:=CStr(shSheet_1.Cells(iSheet_1, "A").Value), _
                    After:=rngSearch.Cells(rngSearch.Rows.Count, 1), LookIn:=xlValues, _
                    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False)
                    
                'Если слово не будет найдено, то в переменной "rngFind"
                'будет содержаться слово "Nothing".
                If rngFind Is Nothing Then
                
                    'Переходим к следующему листу.
                    GoTo metka
                
                End If
                
                'Если был результат поиска, то найденной ячейке
                    'даётся имя "rngFind". Через это имя можно обращаться к
                    'найденной ячейке.
                '8. Запоминаем адрес ячейки, чтобы потом остановить поиск,
                    'дойдя до этой же ячейки.
                myAddress = rngFind.Address
                
                'Ведём поиск, пока не вернёмся к первой найденной ячейке.
                Do
                
                    '9. Копируем строку на последний лист
                    rngFind.EntireRow.Copy Destination:=shLast.Range("A" & myLastRow_2)
                    
                    '10. Подготавливаем номер строки на последнем листе
                        'для следующих данных.
                    myLastRow_2 = myLastRow_2 + 1
                    
                    '11. Ищем дальше в том же диапазоне.
                    Set rngFind = rngSearch.FindNext(rngFind)
                    
                Loop While rngFind.Address <> myAddress
                
    metka:
            
            Next jSheet
        
            '11. Переход к следующей строке.
            iSheet_1 = iSheet_1 + 1
            
        Loop
     
        '12. Включаем то, что отключали в начале работы кода.
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Application.EnableEvents = False
     
    End Sub

    Примечания

    В коде использована команда «Find». Она имеет следующие характеристики:

    1. ищет текст не больше 255 символов;
    2. ищет быстрее, чем просмотр каждой ячейки;
    3. если есть объединённые ячейки, то может на найти то, что ищет;
    4. команда «Find» связана с окном «Найти и заменить». Поэтому в коде нужно указывать все параметры этой команды, чтобы на работу кода не повлияли параметры из окна «Найти и заменить». Я не указываю только иногда параметр «After»;
    5. если код будет медленно работать, то можно попробовать использовать VBA-массивы или объект «Dictionary» — данные из листов помещать в них и уже работать не с самими листами, а с VBA-массивами или объектом «Dictionary».



    1



    undefined7

    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    25.01.2013, 15:58

     [ТС]

    6

    огромное спасибо за код, есть ещё пару вопросов:
    1. что нужно прописать в данный код, чтобы он в каждом создаваемом листе вставлял ещё:
    для ячейки A1, на создаваемом листе копировал бы формулы с листа0 диапазона B1:P1, в создаваемом листе в B1:P1
    для ячейки A2, на создаваемом листе копировал бы формулы с листа0 диапазона B2:P2, в создаваемом листе в B1:P1
    для ячейки A3, на создаваемом листе копировал бы формулы с листа0 диапазона B3:P3, в создаваемом листе в B1:P1
    и т.д.

    2. что нужно прописать в код, чтобы если не находило слово из листа0 диапазон A1:A25 добавлял бы в листе с названием «другие».
    В инете нашёл такого рода код последний снизу, частично он выполняет те функции которые мне необходимы.

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    
    Option Explicit
     
    Sub Procedure_1()
        
        'В константе указываете порядковый номер последнего
            'листа, который должен просматриваться макросом.
        'Это связано с тем, что в ходе работа коды в книгу
            'будут добавляться листы.
        Const mySheetCount As Long = 2
     
        Dim shSheet_1 As Excel.Worksheet
        Dim shLast As Excel.Worksheet
        Dim rngSearch As Excel.Range
        Dim rngFind As Excel.Range, myAddress As String
        Dim myLastRow_1 As Long, myLastRow_2 As Long
        Dim iSheet_1 As Long, jSheet As Long
        
        '1. На время работы кода для ускорения работы кода отключаем:
        'Обновление монитора.
        Application.ScreenUpdating = False
        'События.
        Application.EnableEvents = False
        
        '2. Даём листу "Лист0" имя "shSheet_1".
        'Через это имя будем обращаться к этому листу.
        Set shSheet_1 = Worksheets("Лист0")
        
        'Двигаемся по листу "Лист0" по первому столбцу
            'до первой пустой ячейки.
        'Начиаем двигаться с первой строки.
        iSheet_1 = 1
        Do While IsEmpty(shSheet_1.Cells(iSheet_1, "A")) = False
        
        '3. Чтобы код был проще, сразу создаём лист для текущей ячейки,
        'независимо от того, встретится текст из текущей ячейки на
        'просматриваемых листах или нет.
        'After:=Worksheets(Worksheets.Count) - это последний лист.
        'Одновременно, при создании листа, даём имя "shLast" листу.
        'Через это имя будем обращаться к листу.
            Set shLast = Worksheets.Add(After:=Worksheets(Worksheets.Count))
            
        '4. Даём имя листу в соответствии с данными из ячейки.
        'Только в данном случае нужно учитывать:
        '1) нет ли уже листа с таким именем;
        '2) содержит ли имя допустимые символы;
        '3) длина имени.
        'Я этого ничего не буду учитывать.
            shLast.Name = shSheet_1.Cells(iSheet_1, "A").Value
        
        '5. Подготавливаем номер строки, куда будут вставляться данные на новом листе.
            myLastRow_2 = 1
        
        'В цикле с "jSheet" проходимся по листам, которые надо обработать.
            For jSheet = 2 To mySheetCount Step 1
            
        'Буду использовать команду "Find" для поиска.
        '6. Задаю диапазон поиска, чтобы код работал быстрее и лишнее
        'не просматривал.
        '6.1. Определяю последнюю строку с данными на текущем листе
        'в столбце "A".
                myLastRow_1 = Worksheets(jSheet).Columns("A").Find(What:="?", _
                    LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
                    SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row
        '6.2. Даю фрагменту листа, где нужно искать, имя "rngSearch".
        'Здесь вместо "A1" можно указать строку, с которой нужно искать.
                Set rngSearch = Worksheets(jSheet).Range("A1:A" & myLastRow_1)
                
        '7. Осуществляем поиск.
        'After:=rngSearch.Cells(rngSearch.Rows.Count, 1) - здесь указываем,
        'что поиск начинаем с последней ячейки. Это связано с тем, что поиск
        'начинается после указанной ячейки, чтобы данные брались в том порядке,
        'в котором они находятся на листе.
        'LookAt:=xlPart - поиск по частичному совпадению, например "груш".
                Set rngFind = rngSearch.Find(What:=CStr(shSheet_1.Cells(iSheet_1, "A").Value), _
                    After:=rngSearch.Cells(rngSearch.Rows.Count, 1), LookIn:=xlValues, _
                    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False)
                    
        'Если слово не будет найдено, то в переменной "rngFind"
        'будет содержаться слово "Nothing".
                If rngFind Is Nothing Then
                
        'Переходим к следующему листу.
                    GoTo metka
                
                End If
                
        'Если был результат поиска, то найденной ячейке
        'даётся имя "rngFind". Через это имя можно обращаться к
        'найденной ячейке.
        '8. Запоминаем адрес ячейки, чтобы потом остановить поиск,
        'дойдя до этой же ячейки.
                myAddress = rngFind.Address
                
        'Ведём поиск, пока не вернёмся к первой найденной ячейке.
                Do
                
        '9. Копируем строку на последний лист
                    rngFind.EntireRow.Copy Destination:=shLast.Range("A" & myLastRow_2)
                    
        '10. Подготавливаем номер строки на последнем листе
        'для следующих данных.
                    myLastRow_2 = myLastRow_2 + 1
                    
        '11. Ищем дальше в том же диапазоне.
                    Set rngFind = rngSearch.FindNext(rngFind)
                    
                Loop While rngFind.Address <> myAddress
                
    metka:
            
            Next jSheet
        
        '12. Переход к следующей строке.
            iSheet_1 = iSheet_1 + 1
            
        Loop
     
        '13. Включаем то, что отключали в начале работы кода.
        Application.ScreenUpdating = False
        Application.EnableEvents = False
     
    End Sub
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    Option Explicit
    Sub разноскаданных()
    Dim i As Double
    Dim iLastRow1 As Double
    Dim K As Double, wsSh As Worksheet
    Dim li As Long 'зачистка ячеек в листах (кроме начального)
    For li = 2 To Sheets.Count
    Sheets(li).UsedRange.Value = Empty
    Next li
     
    iLastRow1 = Sheets("main").Cells(Rows.Count, 2).End(xlUp).Row 'находим последнюю строку листа main
    With Sheets("main")
        On Error Resume Next
        For i = 0 To iLastRow1 'перебираем весь столбец по условию до последней строки
        Set wsSh = Sheets(Trim(.Cells(i + 3, 4).Value))
            If Not wsSh Is Nothing Then
                wsSh.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 15).Value = .Cells(i + 3, 1).Resize(, 15).Value
            Else
                Sheets("інші").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 15).Value = .Cells(i + 3, 1).Resize(, 15).Value
            End If
            Set wsSh = Nothing
        Next i
    End With
    End Sub



    0



    5468 / 1148 / 50

    Регистрация: 15.09.2012

    Сообщений: 3,514

    25.01.2013, 16:06

    7

    undefined7, по первому и второму вопросу.

    Для примера, добавьте в книгу из сообщения #1 два листа и поясните, что нужно.



    1



    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    26.01.2013, 14:47

     [ТС]

    8

    Цитата
    Сообщение от Скрипт
    Посмотреть сообщение

    undefined7, по первому и второму вопросу.

    Для примера, добавьте в книгу из сообщения #1 два листа и поясните, что нужно.

    добавил файл
    1. что нужно прописать в данный код, чтобы он в каждом создаваемом листе вставлял ещё:
    для ячейки A1, на создаваемом листе копировал бы формулы с листа0 диапазона B1:P1, в создаваемом листе в B1:P1
    для ячейки A2, на создаваемом листе копировал бы формулы с листа0 диапазона B2:P2, в создаваемом листе в B1:P1
    для ячейки A3, на создаваемом листе копировал бы формулы с листа0 диапазона B3:P3, в создаваемом листе в B1:P1
    и т.д.

    2. что нужно прописать в код, чтобы если не находило слово из листа0 диапазон A1:A25 добавлял бы в листе с названием «другие».
    В инете нашёл такого рода код последний снизу, частично он выполняет те функции которые мне необходимы.

    Вложения

    Тип файла: rar 1.rar (432.3 Кб, 26 просмотров)



    0



    5468 / 1148 / 50

    Регистрация: 15.09.2012

    Сообщений: 3,514

    26.01.2013, 14:51

    9

    undefined7, добавьте в книгу новые листы, как будто эти листы сделал макрос. Чтобы посмотреть, что на новых листах должно быть. Добавьте два листа.



    1



    undefined7

    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    26.01.2013, 18:20

     [ТС]

    10

    добавил файл.
    Ещё возник вопрос, почему-то после пересчёта книги не включается обратно автоматический пересчёт формул.
    Вначале мы его отключаем:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    
        '1. На время работы кода для ускорения работы кода отключаем:
        'Обновление монитора.
        Application.ScreenUpdating = False
        'Пересчёт формул.
        Application.Calculation = xlCalculationManual
        'События.
        Application.EnableEvents = False

    потом его включаем:

    Visual Basic
    1
    2
    3
    4
    
        '13. Включаем то, что отключали в начале работы кода.
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Application.EnableEvents = False

    Вложения

    Тип файла: rar 1.rar (686.3 Кб, 25 просмотров)



    0



    Скрипт

    5468 / 1148 / 50

    Регистрация: 15.09.2012

    Сообщений: 3,514

    26.01.2013, 18:32

    11

    Пункт 1

    Цитата
    Сообщение от undefined7
    Посмотреть сообщение

    1. что нужно прописать в данный код, чтобы он в каждом создаваемом листе вставлял ещё:
    для ячейки A1, на создаваемом листе копировал бы формулы с листа0 диапазона B1:P1, в создаваемом листе в B1:P1

    а где в книге из сообщения #10 это?

    Пункт 2

    Ошибка в коде из сообщения #5. Вот так надо:

    Visual Basic
    1
    2
    3
    4
    
        '12. Включаем то, что отключали в начале работы кода.
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True



    1



    undefined7

    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    26.01.2013, 20:19

     [ТС]

    12

    Цитата
    Сообщение от Скрипт
    Посмотреть сообщение

    Пункт 1

    а где в книге из сообщения #10 это?

    это находиться на листе0, в ячейке A находиться название которое нужно создавать отдельный лист, а далее уже идёт формула — которую нужно прописать в создаваемом листе

    Цитата
    Сообщение от Скрипт
    Посмотреть сообщение

    Пункт 2

    Ошибка в коде из сообщения #5. Вот так надо:

    Visual Basic
    1
    2
    3
    4
    
        '12. Включаем то, что отключали в начале работы кода.
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True

    сам нашёл уже, но не смог отредактировать сообщение



    0



    5468 / 1148 / 50

    Регистрация: 15.09.2012

    Сообщений: 3,514

    26.01.2013, 21:14

    13

    undefined7, вы пишите в своих сообщениях, что формулы нужно брать из диапазона столбцов B и P, а у вас формулы на листе Лист0 начинаются в столбце C, а заканчиваются в столбце O. Как это понять?



    1



    259 / 7 / 1

    Регистрация: 22.01.2013

    Сообщений: 47

    26.01.2013, 21:21

     [ТС]

    14

    Цитата
    Сообщение от Скрипт
    Посмотреть сообщение

    undefined7, вы пишите в своих сообщениях, что формулы нужно брать из диапазона столбцов B и P, а у вас формулы на листе Лист0 начинаются в столбце C, а заканчиваются в столбце O. Как это понять?

    да, вы правы, начиная с C, и тоже в C подаставлять нужно. до O



    0



    Люба1

    28.01.2013, 12:39

    15

    Помогите пожалуйста разобраться с кодом:
    Задача:
    дано 2 листа в икселе, а каждом из них заполнены 1 и 2 столбец, при чем заполнено все это таким образом Лист1(wer.ru, аня), лист2(аня, 23) соответственно столбцам, надо чтобы по нажатию кнопки значения всех строк 1 столбца 1 листа копировались в 1 столбец 3 листа, а значения 2столбца 2 листа копировались в 2столбец 3 листа, и при этом выполнялось условие значение ячеек (лист1, столбец 2) = значению ячеек(лист2, 1стоббец), в общем если аня из первого листа = аня из второго, то wer.ru в 1 столбец и 23 во второй столбец в 3 лист копировать, и так по всем ячейкам.
    Sub sortirovka()
    Dim i As Integer
    Dim a As Single
    Dim b As Single
    a = Worksheets(«2»).Cells(i, 1).Value
    For i = 1 To Worksheets.Count
    If Worksheets(«1»).Cells(i, 2).Value = a Then
    Worksheets(«2»).Cells(i, 2).Value.Copy Worksheets(«3»).Cells(i, 2) ‘.PasteSpecial’
    End If
    Next i

    End Sub

    Like this post? Please share to your friends:
  • Поиск английских букв в русском тексте excel
  • Поиск адреса ячейки по содержимому в excel
  • Поиск адреса ячейки по значению excel
  • Поиск аббревиатур в word
  • Поиск word любое слово