У меня 2500 файлов Excel. Мне нужно вывести все строки, которые содержат определенную строку в определенном столбце. Как я могу это сделать? Что если определенная строка не находится в фиксированном столбце, но может быть в любом столбце?
microsoft-excel
search
file-search
Bobert
источник
источник
Ответы:
Вот немного кода скелетона. Вы можете либо опираться на это, либо кто-то еще здесь может. Большие куски еще предстоит написать. Может быть, я сделаю больше, когда вернусь домой.
источник
Из ваших комментариев я предполагаю, что вы никогда не писали макрос VBA. Ваш первый макрос будет неспешным, но после этого каждый будет легче, пока вы не забудете, что когда-либо думали, что его сложно написать.
В приведенном ниже макросе предполагается, что все 2500 рабочих книг находятся в одной папке. Обычно это самый простой подход, но он может быть невозможен в вашем случае. Если это невозможно, выберите папку с большим количеством книг, чтобы опробовать этот макрос. Вам нужно будет добавить объяснение вашей ситуации к вашему вопросу, чтобы я мог объяснить, как этот макрос можно адаптировать для его решения.
Я пытался сделать вещи простыми, хотя это может показаться не таким. Есть лучшие, более быстрые способы сделать то же самое, но я думаю, что это правильный компромисс. Я включил много комментариев, объясняющих, что делает код. Справка редактора макросов объяснит синтаксис. Но спросите, если вы боретесь.
Создайте новую книгу в папке, которую вы выбрали для теста. Мой код ожидает лист с именем «Боберт», который мне удобен. Выберите имя, которое имеет смысл для вас, и измените код для соответствия; Расскажу как позже.
Выбрать
Tools
затемMacro
затемVisual Basic Editor
или нажмитеAlt
+F11
,Внизу слева у вас будет Project Explorer. Вверху справа у вас будет серая зона. Внизу справа у вас будет окно. Я могу поговорить о ближайшем окне позже.
Выбрать
Insert
затемModule
, «Module1» будет добавлен в проводник проекта, а серая область станет белой. Это область кода для Module1.Вы можете оставить имя модуля как «Module1» или изменить его. Нажмите F4. Откроется окно свойств. Единственным свойством для модуля является его имя. Нажмите «Модуль 1» в «(Имя) Module1», отступите «Module1» и введите имя по вашему выбору. Закройте окно свойств.
Скопируйте приведенный ниже код в область кода.
Этот макрос решает первую часть вашей проблемы: он находит все рабочие книги в папке и все рабочие таблицы в этих рабочих книгах. Он создает список этих листов в листе «Боберт». Если 2500 рабочих книг не могут быть собраны в одну папку, вам может понадобиться такой макрос, чтобы составить список рабочих книг и рабочих таблиц, которые нужно изучить, но этот макрос предназначен для обучения. Создайте строку заголовка:
Единственное утверждение, которое вам необходимо изменить немедленно:
Измените «Bobert» на имя, которое вы выбрали для рабочего листа, в котором будет создан список рабочих листов.
Поместите курсор на оператор:
и нажмите F9. Линия станет коричневой, потому что вы сделали ее точкой останова, которую я сейчас объясню.
Каждый раз, когда вы нажимаете F8, будет выполняться один оператор кода. Это позволяет вам шаг за шагом кода. Если навести курсор на имя переменной, отобразится ее значение. Вы можете переключиться на рабочий лист, чтобы проверить, что изменилось.
Если вы думаете, что понимаете блок кода, нажмите F5, и код будет работать до следующей точки останова. Я установил один, но вы можете установить столько, сколько хотите.
Надеюсь, это даст вам возможность подумать. Ответьте на мои вопросы, и я смогу дать вам следующий ответ.
источник
Dir
Функция является одной из самых запутанных функций в VBA. Звонок делает разные вещи в зависимости от того, где вы звоните и предыдущие звонки. За кем-то очень трудно следовать. Я опираюсь наFileSystemObject
много, потому что он имеет сильную поддержку типизации для папок / файловых объектов и есть много установленных методов / параметров в ваших советах по поиску.Preserve
на Redim и удаление вашего массива (еще одна странная концепция для новичка), и их легче искать / перебирать.FileSystemObject
функции и коллекции сложнее для понимания, чем старые функции, такие какDir
и массивы. Я считаю, что это потому, что трудно найти хорошие объясненияFileSystemObject
и коллекции. Если вы сможете дать такие объяснения, это даст Боберу возможность понять и выбрать из различных методов.