Страницы: 1
RSS
Нужно импортировать данные из одного файла в другой
 
Ребята помогите с простым макросом.
у меня есть файл "импорт данных". количество строк в отчете может рости как в большую так и в меньшую сторону.
Нужно в файл "итоги" на определенном листе закачались данные с файла "импорт данных".
данные импортируются из папке с прописанным путем. В конкретную папку будут падать подобные отчеты, а макрос должен забирать данные с этого файла и в вставлять в рабочий.
данные: ДАТА, Имена, затраты(столбей "О" и "Р"), а итог со строки 24 на примере, но если работников будет больше то и строчки сдвинутся и причем нужно взять только число и оно также может менять длину.

Заранее всем спасибо за помощь...
 
Доброе время суток
Цитата
khkana написал:
помогите  с простым макросом.
Позвольте поинтересоваться, как вы определили, что макрос простой? Если вы умеете немного программировать, чтобы уметь определять простоту, то почему его не написали самостоятельно?
Если совсем не умеете программировать, тогда почему пишите помогите? В чём суть помощи, если его некто должен будет написать за вас?
Ещё и необъявленный кросс
Изменено: Андрей VG - 24.02.2020 18:35:35
 
Мне можно и на примере подобных задач показать, а я скорректирую. Почему простой, так мне кажется. Если тяжелый, то извините не рассчитал возможности ресурса.
 
Кросс http://www.excelworld.ru/forum/10-44206-1
 
Цитата
khkana написал:
не рассчитал возможности ресурса
Причём тут возможности ресурса и Ваше представление о сложности макроса? Или Вы сомневаетесь в квалификации форумчан, которые здесь обитают?
И на вопрос Андрея Вы не ответили: Вам помощь нужна (что-то конкретное не получается) или нужно, чтобы всё сделали за Вас с нуля?
И последнее: размещаете свой вопрос на нескольких форумах - информируйте об этом прямыми ссылками.
 
кнопка цитирования не для бездумного копирования [МОДЕРАТОР]

Я не сомневаюсь в квалификации Форумчан. Так как я ее не знаю. Мне сделали замечание, что я определил задачу как легкое я и извинился за это.
что касается проблемы, то мне нужно грамотно найти позицию имя Васи в импорте данных и правильно определить часть числа в итоговом значении и понять где конец строки...
 
Вася: сумма 22,53 (причем с минусом) - в столбце P
Петя: сумма 17428 (причем с плюсом) - в столбце O

А если будет Федя еще? Сумму откуда брать? Из P или O ? Или нужно от О отнимать Р ?
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
khkana написал:
Я не сомневаюсь в квалификации Форумчан. Так как я ее не знаю.

повеселили

М.б. Вам воспользоваться функционалом Power Query?
Вот самый примитивный вариант ( по-другому я еще не умею сам  ).
1. Файлы нужно разместить в папке C:\TEMP
2. Нужно убрать группировку ячеек, озаглавить образовавшийся в результате безымянный столбец и превратить вашу исходную таблицу в "Умную"
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
khkana написал:
В конкретную папку будут падать подобные отчеты, а макрос должен забирать данные с этого файла и в вставлять в рабочий.
По-моему, Вам должен очень помочь пример из раздела Приёмы.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Код
Sub Main()
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Title = "Выбрать файлы отчетов" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 2 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = "С:\Temp\Книга1.xlsx" 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then Exit Sub 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        Dim wb As Workbook
        For lf = 1 To .SelectedItems.Count
            x = .SelectedItems(lf) 'считываем полный путь к файлу
            Set wb = Workbooks.Open(x, False, True) 'открытие книги
            Job_wb wb
            wb.Close False
            'можно также без х
            'Workbooks.Open .SelectedItems(lf)
        Next
    End With
End Sub
'
Sub Job_wb(wb As Workbook)
    Dim d As Object
    Set d = CreateObject("Scripting.Dictionary")
    With wb.Sheets(1)
        Dim y As Long
        Dim a As Variant
        y = .Cells(.Rows.Count, 2).End(xlUp).Row
        a = .Range(.Cells(1, 1), .Cells(y, [P1].Column))
        For y = 20 To UBound(a, 1)
            If Left(a(y, 3), Len("Затраты")) <> "Затраты" Then
                d.Item(a(y, 3)) = d.Item(a(y, 3)) + a(y, [O1].Column) + a(y, [P1].Column)
            End If
        Next
    End With
    Out_dic d
End Sub
'
Sub Out_dic(d As Object)
    With ThisWorkbook.Sheets(1)
        .Range(.Cells(3, 1), .Cells(.Rows.Count, .Columns.Count)).Clear
        If d.Count > 0 Then
            .Rows(2).Copy .Cells(3, 1).Resize(d.Count, 1)
            .Cells(3, 1).Resize(d.Count, 1) = Application.Transpose(d.keys)
            .Cells(3, 2).Resize(d.Count, 1) = Application.Transpose(d.items)
            
        End If
    End With
End Sub
Изменено: МатросНаЗебре - 25.02.2020 10:01:42
Страницы: 1
Наверх