Excel – поиск слова в столбце A. Когда совпадение найдено в строке, сообщите слово, которое находится в столбце B, затем найдите столбец A для любых сообщенных слов
Я хочу знать, как искать строку в столбце A, сообщать соответствующие строки (строки), которые находятся в столбце B, а затем снова искать столбец A для этих строк и т. Д. Повторяйте до тех пор, пока не будет больше совпадений. найденный.
Я пытаюсь создать удобный для пользователя лист или макро-Input-Box, который будет искать лист Excel в 2300+ и генерировать отчет. Я хочу, чтобы пользователь мог выбрать «строку», которую будет искать (я сделаю это с выпадающим меню). Затем лист / программа будет:
- search Столбец A для всех совпадений с выбранной строкой;
- сообщите соответствующие строки (строки), которые (находятся) в столбце B (такая же строка, что и совпадение);
- выполните поиск столбца A снова для всех строк, найденных в столбце B;
- повторите шаги 2) и 3), пока не будет найдено больше совпадений.
В настоящее время в столбцах A и B. используется простой фильтр. Сначала пользователь выбирает строку, которую они хотят фильтровать в столбце A. Затем они должны вручную определить, присутствует ли какой-либо из результатов в столбце B в столбце A, и если да, добавьте их к критериям фильтрации столбца A. В некоторых случаях это может потребовать нескольких итераций этого процесса и может стать довольно трудоемким.
- Не удалось импортировать из файла Excel XLSX
- ADODB Recordset не может получить целое многозначное поле из Access
- Переменная объекта или с переменной блока, не установленной после первоначальной работы
- Как добавить новый лист в excel с помощью VBA?
- Процедура VBA возвращает результаты только до определенной даты
Моя цель – избавить пользователя от необходимости вручную выполнять эти итерации.
Вот упрощенная версия того, что я ищу (фактические имена более сложны).
Equipment Contents Box 1 Box 2 Box 1 Box 3 Box 1 Box 4 Box 1 Tool 1 Box 1 Tool 2 Box 1 Tool 3 Box 2 Box 5 Box 2 Tool 4 Box 2 Tool 5 Box 3 Box 6 Box 3 Tool 6 Box 3 Tool 7 Box 4 Tool 8 Box 5 Tool 9 Box 6 Tool 10
Например, «Вставка 2» содержит «Вставка 5», «Инструмент 4» и «Инструмент 5». «Вставка 5» содержит «Инструмент 9». Таким образом, если пользователь выбирает «Врезка 2», отчет будет генерировать отчет из четырех строк; «Вставка 5», «Инструмент 4», «Инструмент 5» и «Инструмент 9» (необязательно в этом порядке).
Я начал эту задачу, полагая, что я могу использовать простой индексный код в скрытом листе и затем сообщать о значительных значениях на листе пользователя. Вот код, который я использовал для поиска в первом столбце и получения результатов со второго (обратите внимание, что ссылки не соответствуют приведенному выше образцу):
=IF(ISERROR(INDEX('All Inclusive Tab'!D:F,SMALL(IF('All Inclusive Tab'!D:D=$A$2,ROW('All Inclusive Tab'!D:D)),ROW(1:1)),2)),"",INDEX('All Inclusive Tab'!D:F,SMALL(IF('All Inclusive Tab'!D:D=$A$2,ROW('All Inclusive Tab'!D:D)),ROW(1:1)),2))
Я ввел этот код в несколько ячеек на отдельном листе. Другие ячейки на листе содержат аналогичный код, который затем выполняет поиск значений, сообщаемых этим кодом. И т. Д. Этот метод работает при поиске нескольких совпадений. Однако я обнаружил, что он ограничен из-за сложности моего листа Excel (особенно учитывая большое количество позиций). Это также очень медленно, когда я начинаю создавать несколько «рабочих» ячеек. Я уверен, что должен быть лучший способ сделать это.
Мне сказали создать макрос и использовать цикл «для» или «в то время». Я не очень хорошо знаком с VBA и ищу любые предложения. Какие поисковые коды были бы полезны для этого приложения и как они были бы проанализированы? Я также играю с идеей сделать этот проект с использованием Microsoft Access, и мне интересно, облегчит ли это что-то более сложное или сложное.
EDIT: Вот два примера желаемого вывода. Если в раскрывающемся списке выбрана «Вставка 2», результат будет выглядеть следующим образом:
Equipment Contents Box 2 Box 5 Box 5 Tool 9 Box 2 Tool 4 Box 2 Tool 5
И если из раскрывающегося списка были выбраны «Box 3», результат будет выглядеть так:
Equipment Contents Box 3 Box 6 Box 6 Tool 10 Box 3 Tool 6 Box 3 Tool 7
- CSV-файл в Excel 2010 форматирует поля datetime во времени
- Экспорт данных таблицы доступа в Excel
- Excel / Access, как экспортировать содержимое запроса на ранее существующий лист без нарушения ссылок?
- SUM только разные значения при определенных критериях SQL
- Экспорт данных из Microsoft Access (VBA) с использованием набора записей без добавления к предыдущим документам
- Excel VBA to: ПРИЛОЖИТЬ только измененные записи из Excel в Access
- Запуск сценария VBA Excel в документе Excel из подпрограммы доступа
- необходимо экспортировать таблицу доступа в Excel с автоматической шириной столбца на 1 страницу
В этом примере я устанавливаю это так,
Когда код будет запущен, результаты будут такими.
Вот код.
Sub Button1_Click() Dim rws As Long, rng As Range, c As Range, Frng As Range, Frws As Long Range("K:Z").ClearContents Application.ScreenUpdating = 0 Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("K1"), Unique:=True rws = Cells(Rows.Count, "K").End(xlUp).Row Set rng = Range("K3:K" & rws) For Each c In rng.Cells Columns("A:A").AutoFilter Field:=1, Criteria1:=c Frws = Cells(Rows.Count, "A").End(xlUp).Row Set Frng = Range("B3:B" & Frws).SpecialCells(xlCellTypeVisible) Frng.Copy c.Offset(0, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Next c ActiveSheet.AutoFilterMode = 0 Application.CutCopyMode = 0 End Sub