Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Распарсить XLS и получить интересующие данные во внешний файл (http://forum.oszone.net/showthread.php?t=276626)

bagfinder 28-01-2014 14:05 2297831

Распарсить XLS и получить интересующие данные во внешний файл
 
Есть таблица xls с 5000+ строк следующего вида:



Необходимо сделать интерфейс, чтобы пользователь мог ввести в поле интересующую его фамилию, нажать кнопку и получить файл (txt или же новый xls) с информацией об этом субъекте. Например, пользователь ввел "Герасимова" и получил на выходе файл с содержимым:



Это можно реализовать на VBA, например? Каким образом?

Iska 28-01-2014 14:22 2297847

Упакуйте Ваш файл в архив. Прикрепите архив к сообщению.

bagfinder 28-01-2014 14:38 2297857

Вложений: 1
Сделал

bagfinder 28-01-2014 17:46 2298008

Вложений: 1
Набросал форму, некоторые тезисы по поводу функционала:
1. Пользователь вводит фамилию в текстовое поле
2. Нажимает кнопку Поиск записей
3. В текстбокс падают строки, где присутствует введенная фамилия
4. При желании, пользователь нажимает на кнопку Запись в файл, происходит экспорт

Iska 29-01-2014 08:26 2298307

Вложений: 1
Примерно так: Файл 109628.

Диапазон преобразован в список. Добавлена форма для фильтрации по выбранной/введённой фамилии, для экспорта отфильтрованного списка в новую рабочую книгу (её сохранение делать не стал).

bagfinder 29-01-2014 09:28 2298324

Цитата:

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

Iska 29-01-2014 10:15 2298343

bagfinder, а почему Ваши пользователи не используют списки?

Расскажите, как Вы предлагаете определять потребный диапазон? У нас есть ровно четыре варианта — «ручками» и «Selection» + «.UsedRange»/«.CurrentRegion».

bagfinder 29-01-2014 10:45 2298360

Цитата:

а почему Ваши пользователи не используют списки?
Эти таблицы присылают уже в готовом виде, так что пользователь просто анализирует полученное.
Ну и уровень владения excel у пользователя нулевой, так что, чем проще и очевиднее интерфейс, тем лучше.

Цитата:

У нас есть ровно четыре варианта — «ручками» и «Selection» + «.UsedRange»/«.CurrentRegion».
А нельзя просто сравнить UserForm1.SurnameTextbox.Value с B2-B... и вывести строки со вхождением?
С VBA я не знаком, не знаю, что лучше.

Iska 29-01-2014 11:29 2298379

Цитата:

Цитата bagfinder
Эти таблицы присылают уже в готовом виде, так что пользователь просто анализирует полученное. »

Есть прямой смысл научить их пользоваться списками.

Цитата:

Цитата bagfinder
Ну и уровень владения excel у пользователя нулевой, так что, чем проще и очевиднее интерфейс, тем лучше. »

Горячую клавишу нажать смогут? Или как предполагается вызывать форму на исполнение?

Цитата:

Цитата bagfinder
А нельзя просто сравнить UserForm1.SurnameTextbox.Value с B2-B... и вывести строки со вхождением? »

Так проблема в том-то и состоит, чтобы определить:
  • «B» ли это (а не «C», «D» или «AH»);
  • с «2» ли это (а не с «3», «4» или «1»);
  • и главное — а докуда это самое «…»?

Ещё остаются вопросы с выбором конкретного рабочего листа, если их несколько.

Цитата:

Цитата bagfinder
С VBA я не знаком, не знаю, что лучше. »

Давайте я опишу, а Вы выберете.

«ручками» — предлагается указать адрес диапазона, с которым будем работать.
«Selection» — существующее выделение. Для простоты будем предполагать простое прямоугольное выделение на одном листе.
«.UsedRange» — использованный диапазон на рабочем листе. От крайней левой верхней использованной ячейки до крайней правой нижней использованной ячейки.
«.CurrentRegion» — заполненный диапазон, считающийся от текущего выделения. Проще всего его представить как прямоугольную область, ограниченную пустыми строками и столбцами по краям.

Типичным является использование следующего сценария — выделить любую ячейку внутри диапазона и вызвать форму. Та начинает работать, например, с Selection.CurrentRegion.

bagfinder 29-01-2014 11:40 2298387

Цитата:

«.UsedRange» — использованный диапазон на рабочем листе. От крайней левой верхней использованной ячейки до крайней правой нижней использованной ячейки.
Как мне видится, это подходящий вариант.

P.S. Рабочий лист один
P.P.S. Первая строка - заголовки (Дата/Время, Фамилия и т.п.), остальное - данные.

Iska 29-01-2014 11:53 2298394

Цитата:

Цитата bagfinder
P.S. Рабочий лист один »

В предложенном примере — три рабочих листа.

Ответьте на этот вопрос:
Цитата:

Цитата Iska
Горячую клавишу нажать смогут? Или как предполагается вызывать форму на исполнение? »


bagfinder 29-01-2014 11:58 2298397

Цитата:

В предложенном примере — три рабочих листа.
Насколько я понимаю, данные только на одном.

Цитата:

Горячую клавишу нажать смогут? Или как предполагается вызывать форму на исполнение?
Да, смогут.

Iska 29-01-2014 12:00 2298399

Цитата:

Цитата bagfinder
Насколько я понимаю, данные только на одном. »

Как его определить среди прочих?

bagfinder 29-01-2014 12:02 2298401

Цитата:

Как его определить среди прочих?
Возможно, по имени листа. Лист с данными во всех файлах имеет одинаковое имя.

Iska 29-01-2014 14:41 2298498

Вложений: 1
Цитата:

Цитата bagfinder
Возможно, по имени листа. Лист с данными во всех файлах имеет одинаковое имя. »

Лады.

Ну, вот как-то так: Файл 109638. Положите файл «Filter And Export.xls» в папку автозагрузки Excel (для Excel 2003 под Windows XP это будет по умолчанию папка «%UserProfile%\Application Data\Microsoft\Excel\XLSTART»). Горячая клавиша для вызова — «Ctrl-l» (раз у Вас всё равно списками не пользуются).


Время: 16:08.

Время: 16:08.
© OSzone.net 2001-