Вопрос № 172127: Здравствуйте. Сейчас провожу на работе инвентаризацию и возникла следующая проблема - по идее 200 сотрудников должны заполнить экселевский файл, в котором они вводят в ячейку только инвентарный номер основных средств и при помощи функции "ВПР&qu...
Вопрос № 172127:
Здравствуйте. Сейчас провожу на работе инвентаризацию и возникла следующая проблема - по идее 200 сотрудников должны заполнить экселевский файл, в котором они вводят в ячейку только инвентарный номер основных средств и при помощи функции "ВПР" в соседние ячейки автоматически подтягиваются наименование, цена и дата. Также я сделал список, где они выбирают свою фамилию и автоматически подтягивается их должность и подразделение. С эти проблем нет, все работает хорошо. Мне нужен Ваш совет в следующем
- когда я получу 200 абсолютно одинаковых по структуре экселевских файлов, то как мне из них сделать один большой, т.е, как "слить" 200 маленьких таблиц по 10-20 записей в одну общую? Прописывать руками 200 связей, честно говоря, не хочется. Если это поможет, то у меня есть утилита, которая переименует эти 200 файлов в номера по порядку, т.е. 1.xls, 2.xls ... 200.xls. Заранее благодарен за Ваши советы.
Отправлен: 13.09.2009, 08:10
Вопрос задал: Dlimon, Посетитель
Всего ответов: 2 Страница вопроса »
Отвечает Protos, Студент :
Здравствуйте, Dlimon. Используйте программу MergeExcel. Она на русском языке, но не бесплатна. В дополнение к этому посмотрите здесь.
Приложение:
Ответ отправил: Protos, Студент
Ответ отправлен: 13.09.2009, 11:13
Оценка ответа: 4 Комментарий к оценке: Программу я, конечно,покупать не буду но макросы в форуме, надеюсь, помогут.
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 254125
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Megaloman, Бакалавр :
Здравствуйте, Dlimon. Вот макрос, решающий Вашу проблему. Идея решения - готовим сводную таблицу из таблицы для заполнения данных, Она должна быть не защищена от записи. Она должна быть отформатирована как и таблицы с данными.
Таблицы с данными называются 1 2 3 и т д.
Макрос делаем в сводной таблице. Перед использованием в начале макроса надо сделать свои настройки (пути, границы таблиц) По тексту макросов я написал комментарии в тексте. Макрос последовательно открывает таблицы
с данными, определяет число заполненных строк, в сводной таблице делает ссылки на заполненные данные.
Далее вместо ссылок в сводной таблице сохраняем значения. В принципе, можно оставить и ссылки, но в большой таблице громадное количество ссылок приведёт к очень медленной работе.Да и копировать такую таблицу затруднительно.
Код:
DannPath = "D:\Proba" ' Путь со сливаемыми таблицами с именами 1 2 3 4 ... NTab ListSvod = "Данные" ' Имя листа в каждой таблице с данными NTab = 200 ' Число таблиц с данными. Имена таблицы совпадают с номером по порядку
NameSvod = "Свод.xls" ' Имя файла со сводом (без путей)(в нём запишем макрос) NameDann
= "Лист со сводом" ' Имя листа со сводом
BegRow = 4 ' С какой строки начинаются данные BegCol = "A" ' С какого столбца начинаются данные EndCol = "H" ' Каким столбцом кончаются данные
TestCol = "A" ' В каком столбце гарантированно непустое ЗАПОЛНЯЕМОЕ ПОЛЬЗОВАТЕЛЕМ поле при наличии данных
' Вместо ссылок сохраняем значения Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
Windows(TekName).Close End If
Next Range("A1").Select ActiveWorkbook.Save
Вот еще вариант макроса - он копирует данные из таблицы с данными и вставляет в сводную таблицу значения исходных клеток. Макрос работает, но мне не удалось избавиться от запроса на сохранение буфера обме
на при закрытии исходной таблицы. При большом кол-ве таблиц это неудобно. Буду благодарен, если кто-то подскажет, как этого избежать.
Код:
DannPath = "D:\Proba" ' Путь со сливаемыми таблицами с именами 1 2 3 4 ... NTab ListSvod = "Данные" ' Имя листа в каждой таблице с данными NTab = 200 ' Число таблиц с данными. Имена таблицы совпадают с номером
по порядку
NameSvod = "Свод.xls" ' Имя файла со сводом (без путей)(в нём запишем макрос) NameDann = "Лист со сводом" ' Имя листа со сводом
BegRow = 4 ' С какой строки начинаются данные TestCol = "A" ' В каком столбце гарантированно непустое ЗАПОЛНЯЕМОЕ ПОЛЬЗОВАТЕЛЕМ поле при наличии данных
Windows("Свод.xls").Activate Sheets("Лис
т со сводом").Select Rows(CStr(BegRow) + ":65535").ClearContents
nRow = BegRow
For i = 1 To NTab ' Последовательно открываем все имеющиеся таблицы
TekName = CStr(i) + ".xls" ' Имя таблицы, которую попытаемся открыть
On Error Resume Next Workbooks.Open Filename:=DannPath + "\" + TekName ' Открываем
If Err.Number = 0 Then ' Успешно
открыли Sheets(ListSvod).Select
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.