Добрый день. Впервые мне понадобилось решить задачу, связанную с работой в MS Excel. С ним я не знаком. И честно говоря не знаю, реализуема ли эта задача именно средствами MS Excel. Я не ищу готового решения, я ищу самое простое решение моей задачи. Попробую её сформулировать:
Итак имеется список "товаров". Список ВСЕГДА фиксированный. Имеются "фирмы" заказывающие определенные товары из этого списка в определенном количестве. Каждая фирма отправляет по почте "заявку" в виде документа MS Exel.
В документе два столбца "Товар" и "Кол-во" и фиксированное кол-во строк (перечень товаров). Т.е. "фирма" напротив нужного товара расставляет кол-во и все.
Мне бы хотелось, чтобы в моей таблице автоматически формировался список "Товаров" который заказала каждая "фирма". Т.е. Столбецов с кол-вом было ровно столько, сколько прислали "заявок".
Теперь собственно суть задачи. Каждый день список "фирм" разный. Сегодня эти две... завтра этих пять... послезавтра других три.
А список МОЙ должен формироваться очень ПРОСТО. Я, как ничего не понимающий в этом деле человек, представляю себе это следующим образом: Я открываю свой список товаров, и нажимаю правой кнопкой мыши на столбце (пустом), выбираю пункт "Добавить столбец" и указываю файл с "заявкой" (документ). И все. А Excel автоматически в данном столбце ставит название "фирмы" в заголовок столбца и расставляет кол-во заказанных товаров по строкам. Дальше я тыкаю в следующий пустой столбец - "Добавить столбец" - Выбираю файл и, вуаля, автоматически в моем документе уже три столбца - "Товар", "Фирма1", "Фирма2". Потом, по окончании работы, я удаляю столбцы фирм и на следующий день легко и просто добавляю новые.
Есть вариант реализации у меня - Ctrl-C + Ctrl-V. Т.е открыл книгу "Фирма1", скопировал столбец - вставил в свою таблицу, закрыл книгу. Открыл книгу "Фирма2" - скопировал столбец, закрыл книгу. Этот вариант плох тем, что открывать и копировать приходиться ОЧЕНЬ много, и каждый столбец нужно именовать. Имея, скажем, по 40 разношерстных заявок, это превращается в многочасовые посиделки.
Самое главное, что я хочу спросить. Возможно ли реализовать именно такую схему работы средствами Excel? Нужно ли для этого средства программирования? В какую сторону "копать" решение? Я ни разу не работал ни со сводными таблицами ни со списками в этой программе? Какой из инструментов вы посоветуете использовать? С чего начать изучение этого вопроса?
Добрый день. Впервые мне понадобилось решить задачу, связанную с работой в MS Excel. С ним я не знаком. И честно говоря не знаю, реализуема ли эта задача именно средствами MS Excel. Я не ищу готового решения, я ищу самое простое решение моей задачи. Попробую её сформулировать:
Итак имеется список "товаров". Список ВСЕГДА фиксированный. Имеются "фирмы" заказывающие определенные товары из этого списка в определенном количестве. Каждая фирма отправляет по почте "заявку" в виде документа MS Exel.
В документе два столбца "Товар" и "Кол-во" и фиксированное кол-во строк (перечень товаров). Т.е. "фирма" напротив нужного товара расставляет кол-во и все.
Мне бы хотелось, чтобы в моей таблице автоматически формировался список "Товаров" который заказала каждая "фирма". Т.е. Столбецов с кол-вом было ровно столько, сколько прислали "заявок".
Теперь собственно суть задачи. Каждый день список "фирм" разный. Сегодня эти две... завтра этих пять... послезавтра других три.
А список МОЙ должен формироваться очень ПРОСТО. Я, как ничего не понимающий в этом деле человек, представляю себе это следующим образом: Я открываю свой список товаров, и нажимаю правой кнопкой мыши на столбце (пустом), выбираю пункт "Добавить столбец" и указываю файл с "заявкой" (документ). И все. А Excel автоматически в данном столбце ставит название "фирмы" в заголовок столбца и расставляет кол-во заказанных товаров по строкам. Дальше я тыкаю в следующий пустой столбец - "Добавить столбец" - Выбираю файл и, вуаля, автоматически в моем документе уже три столбца - "Товар", "Фирма1", "Фирма2". Потом, по окончании работы, я удаляю столбцы фирм и на следующий день легко и просто добавляю новые.
Есть вариант реализации у меня - Ctrl-C + Ctrl-V. Т.е открыл книгу "Фирма1", скопировал столбец - вставил в свою таблицу, закрыл книгу. Открыл книгу "Фирма2" - скопировал столбец, закрыл книгу. Этот вариант плох тем, что открывать и копировать приходиться ОЧЕНЬ много, и каждый столбец нужно именовать. Имея, скажем, по 40 разношерстных заявок, это превращается в многочасовые посиделки.
Самое главное, что я хочу спросить. Возможно ли реализовать именно такую схему работы средствами Excel? Нужно ли для этого средства программирования? В какую сторону "копать" решение? Я ни разу не работал ни со сводными таблицами ни со списками в этой программе? Какой из инструментов вы посоветуете использовать? С чего начать изучение этого вопроса?Гость
Частичное, но очень эффективное решение задачи я нашел на одном ресурсе (если администрация не против дал бы ссылку). Это макрос, который позволяет все листы из большого кол-ва книг объеденить в один лист.
Выглядит так:
[vba]
Code
Sub CombineWorkbooks() Dim FilesToOpen Dim x As Integer On Error GoTo ErrHandler Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _ MultiSelect:=True, Title:="Files to Merge") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" GoTo ExitHandler End If x = 1 While x <= UBound(FilesToOpen) Workbooks.Open Filename:=FilesToOpen(x) Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) x = x + 1 Wend ExitHandler: Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
[/vba]
Очень удобно отбираются "заявки" в пять секунд. Но каждая из них попадает на отдельный лист. Остается только сделать так, чтоб с каждого листа графа "Кол-во" записывалась в мою табличку и именовалась автоматически. Пытаюсь что-нибудь найти. Перечитал массу "китайский грамот". Как плохо быть нубом. Ниче не понимаю....
Частичное, но очень эффективное решение задачи я нашел на одном ресурсе (если администрация не против дал бы ссылку). Это макрос, который позволяет все листы из большого кол-ва книг объеденить в один лист.
Выглядит так:
[vba]
Code
Sub CombineWorkbooks() Dim FilesToOpen Dim x As Integer On Error GoTo ErrHandler Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _ MultiSelect:=True, Title:="Files to Merge") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" GoTo ExitHandler End If x = 1 While x <= UBound(FilesToOpen) Workbooks.Open Filename:=FilesToOpen(x) Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) x = x + 1 Wend ExitHandler: Application.ScreenUpdating = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
[/vba]
Очень удобно отбираются "заявки" в пять секунд. Но каждая из них попадает на отдельный лист. Остается только сделать так, чтоб с каждого листа графа "Кол-во" записывалась в мою табличку и именовалась автоматически. Пытаюсь что-нибудь найти. Перечитал массу "китайский грамот". Как плохо быть нубом. Ниче не понимаю....Гость
Простите, в строке "Это макрос, который позволяет все листы из большого кол-ва книг объеденить в один лист." - ошибка. Следует читать, как "Это макрос, который позволяет все листы из большого кол-ва книг объеденить в одну книгу."
Простите, в строке "Это макрос, который позволяет все листы из большого кол-ва книг объеденить в один лист." - ошибка. Следует читать, как "Это макрос, который позволяет все листы из большого кол-ва книг объеденить в одну книгу."Гость
Option Explicit Public timecreate As Variant Public distance As String Public kolfile As Integer
Sub Getfiles() Dim fName As String, NewName As String, msg As Integer kolfile = 0 'distance = "\\ts\DATA\Exchange\gaz\" distance = "e:\zakaz\" fName = Dir(distance & "*.*") Do While fName <> "" timecreate = FileDateTime(distance & fName) Workbooks.Open distance & fName data fName Workbooks(fName).Close True NewName = Replace(Replace(timecreate, ".", ""), ":", "") & fName Name distance & fName As distance & "/reports/" & NewName kolfile = kolfile + 1 fName = Dir Loop msg = MsgBox("Обработано файлов: " & kolfile, 0, "Обработка завершена") End Sub
Sub data(file_ As String) Dim col As Integer, schet As Integer With Workbooks("full.xlsm").Sheets(1) col = .Cells(1, Columns.Count).End(xlToLeft).Column schet = .Cells(Rows.Count, 1).End(xlUp).Row .Range("a2:a" & schet).Offset(, col).Value = Workbooks(file_).Sheets(1).Range("b3:b" & schet + 1).Value .Range("a1").Offset(, col).Value = Workbooks(file_).Sheets(1).Range("a1").Value End With End Sub
[/vba] Процедура Getfiles() открывает поочередно файлы заявок выполняет процедуру считывания информации data(file_ As String) после обработки переносит файл в папку reports добавляя приставку к имени файла. В приложенном архиве папка zakaz в ней должны находится файлы заявок, а так же папки reports, куда будут складываться обработанные файлы, и папка full где находится основной файл full.xlsm путь к папке zakaz находится в переменной distance
Недавно реализовывал нечто подобное! [vba]
Code
Option Explicit Public timecreate As Variant Public distance As String Public kolfile As Integer
Sub Getfiles() Dim fName As String, NewName As String, msg As Integer kolfile = 0 'distance = "\\ts\DATA\Exchange\gaz\" distance = "e:\zakaz\" fName = Dir(distance & "*.*") Do While fName <> "" timecreate = FileDateTime(distance & fName) Workbooks.Open distance & fName data fName Workbooks(fName).Close True NewName = Replace(Replace(timecreate, ".", ""), ":", "") & fName Name distance & fName As distance & "/reports/" & NewName kolfile = kolfile + 1 fName = Dir Loop msg = MsgBox("Обработано файлов: " & kolfile, 0, "Обработка завершена") End Sub
Sub data(file_ As String) Dim col As Integer, schet As Integer With Workbooks("full.xlsm").Sheets(1) col = .Cells(1, Columns.Count).End(xlToLeft).Column schet = .Cells(Rows.Count, 1).End(xlUp).Row .Range("a2:a" & schet).Offset(, col).Value = Workbooks(file_).Sheets(1).Range("b3:b" & schet + 1).Value .Range("a1").Offset(, col).Value = Workbooks(file_).Sheets(1).Range("a1").Value End With End Sub
[/vba] Процедура Getfiles() открывает поочередно файлы заявок выполняет процедуру считывания информации data(file_ As String) после обработки переносит файл в папку reports добавляя приставку к имени файла. В приложенном архиве папка zakaz в ней должны находится файлы заявок, а так же папки reports, куда будут складываться обработанные файлы, и папка full где находится основной файл full.xlsm путь к папке zakaz находится в переменной distanceJhonson
Пустое плюс твёрдое всегда пустое. Гость, вы столько всего написали, но файл не приложили, если не прикрепите, тема скорее всего заглохнет. Кто за вас будет заполнять ваши формы? Приложите ваш файл и в нём всё опишите. Тут грамотные и тактичные люди, обязательно помогут.
Пустое плюс твёрдое всегда пустое. Гость, вы столько всего написали, но файл не приложили, если не прикрепите, тема скорее всего заглохнет. Кто за вас будет заполнять ваши формы? Приложите ваш файл и в нём всё опишите. Тут грамотные и тактичные люди, обязательно помогут.Pulse