Страницы: 1
RSS
Поиск занчения в файле и запись в ячейку.
 
Есть вот такая папка с файлами:
Скрытый текст

Задача получения значения для каждого контрагента посредством анализа файлов и автозаполнения ячеек.
Пример на одном из контрагентов:
Есть Шишов А.В. файл Общие расчёты, ячейка I5 Декабрь 2018 не заполнена.
Скрытый текст

Макрос, скрипт или что то ещё сканирует папку с файлами
Скрытый текст

Находит файл Оплаты за декабрь 18 в нём находи Шишкова и сумму по начислению
Скрытый текст

Далее это значение копирует Шишов А.В. файл Общие расчёты, ячейка I5 Декабрь 2018

P.S.: Возможно переименовать названия файлов и сделаю единую стилизацию чтобы транспортировка данных была успешной.
Изменено: encomos - 18.04.2019 11:53:31
 
Предлагаю название теме - Поход в Третьяковку.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Предлагаю название теме - Поход в Третьяковку.
В целом можно и так назвать, но нужно что бы работало =)
В связи с чем такие ассоциации?  
 
Предлагаю уточнить - Поход в Третьяковку для просмотра желтого квадрата.
 
encomos, вам намекают, что с картинками работать невозможно, надо выкладывать файлы примеров.
С ходу бросается в глаза, что в одной таблице - Шишов, а в другой - Шишов Александр Вадимович. И что-то мне подсказывает, что на идентичные названия одной сущности нет даже намека. Поверьте, при таком подходе будет очень сложно работать.
Изменено: Valo - 17.04.2019 23:54:36
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Цитата
encomos написал: В связи с чем такие ассоциации?  
В связи с тем, что правила форума игнорируете. Пример - это набросок в файле Excel, а не картинки. Замените файлы в первом сообщении
 
Спасибо. В первом сообщении архив в нём 4 файла: Общий файл и файлы с начислениями по месяцам.
Изменено: encomos - 18.04.2019 11:52:20
 
encomos, по примеру составил макрос, может не самый оптимальный, но с задачей справляется.
Однако надо понимать, что с реальными файлами ситуация может пойти не так радостно, в первую очередь из разнородной организации данных в файлах и различных наименований одного и того же объекта.
Поэтому, в любом случае придется самостоятельно во всем этом деле разбираться и доводить до ума.
Код
Sub Отчет()

    Dim ПоследняяСтрокаОбщий As Long
    Dim ПоследняяСтрокаОтчет As Long
    Dim ПоследнийСтолбец As Long
    Dim СтрокаОбщий As Long
    Dim СтрокаОтчет As Long
    Dim Столбец As Long
    
    Dim ПутьКФайлу As String
    Dim НазваниеФайла As String
    
    Dim ОбщийФайл As Worksheet
    Dim Отчет As Worksheet
    
    Set ОбщийФайл = ThisWorkbook.Worksheets(1)
    ПутьКФайлу = ThisWorkbook.Path & "\"
    
    ПоследнийСтолбец = ОбщийФайл.Cells.SpecialCells(xlLastCell).Column
    ПоследняяСтрокаОбщий = ОбщийФайл.Cells.SpecialCells(xlLastCell).Row
    
    For Столбец = 3 To ПоследнийСтолбец
        'Название файла формируюется из месяца и года в заголовках начиная с третьего столбца. Все названия отчетных файло должны быть вид "ммгггг"
        'Все отчетные файлы находятся в той же папке, что и общий файл
        НазваниеФайла = Format(DatePart("m", Cells(1, Столбец)), "00") & DatePart("yyyy", Cells(1, Столбец))
        НазваниеФайла = ПутьКФайлу & НазваниеФайла
        If Dir(НазваниеФайла & "*") <> "" Then
            НазваниеФайла = Dir(НазваниеФайла & "*")
            Set Отчет = Workbooks.Open(ПутьКФайлу & НазваниеФайла).Worksheets(1)
            ПоследняяСтрокаОтчет = Отчет.Cells.SpecialCells(xlLastCell).Row
            СтрокаОбщий = 2
            Do While СтрокаОбщий <> ПоследняяСтрокаОбщий + 1
                СтрокаОтчет = 2
                Do While СтрокаОтчет <> ПоследняяСтрокаОтчет + 1
                    'Наименование в общем и отчетном файлах начинается со второй строки первого столбца
                    If Отчет.Cells(СтрокаОтчет, 1) = ОбщийФайл.Cells(СтрокаОбщий, 1) Then
                        'Суммы в отчетных файлах находятся в третьем столбце
                        ОбщийФайл.Cells(СтрокаОбщий, Столбец) = Отчет.Cells(СтрокаОтчет, 3)
                        СтрокаОтчет = СтрокаОтчет + 1
                        Exit Do
                    End If
                    СтрокаОтчет = СтрокаОтчет + 1
                Loop
                СтрокаОбщий = СтрокаОбщий + 1
            Loop
            ActiveWorkbook.Close (False)
        End If
    Next

End Sub
Изменено: Valo - 18.04.2019 14:40:48
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Цитата
Valo написал:
Однако надо понимать, что с реальными файлами ситуация может пойти не так радостно, в первую очередь из разнородной организации данных в файлах и различных наименований одного и того же объекта.
Большое спасибо за точку отсчёта с неё и начну. И за макрос тоже спасибо.
Страницы: 1
Наверх