Страницы: 1
RSS
Перенос данных из объединенных ячеек одного документа в одну ячейку другого документа. VBA, Макрос VBA
 
Приветствую вас, великие умы)

Перед мной поставлена задача- сформировать готовый табельный лист.
Для этого требуется перенести данные из документа "График" в документ "Табель". Данные должны тянуться из столбцов "№ п/п", "ФИО/Дожность", "Таб. номер" документа "График" в одноименные столбцы документа "Табель".
Сложность в том, что некоторые строки и столбцы в документе "График" объеденены, а вставить их содержимое надо в одну ячейку.

Вопрос глобальный- как это все реализовать с помощью макроса VBA? (вариант с записью макроса не устраивает из-за своей неуниверсальности)

Вопрос насущный(требует ответа в первую очередь) - как через VBA заполнить столбец "Табельный номер" в док."Табель" с помощью предварительно созданного массива с данными из док."График"?

Во вложении прилагаю оба упомянутых файла.

Порадуйте неопытную меня)
Спасибки заранее)
 
Цитата
EleeSha написал:
великие умы
:)  ... гмм ... к счастью, у меня пока нет гидроцефалии ... но есть асцит ... от пива ...  :)

А что делать с остальными столбцами (Направление, 1,2,3,4,5 и т. д.) ?
Ну, и в "Графике" 3 строки для каждой линии данных а в "Табельном" только две, как вписать 3 строки в 2 ?


Пс:
Вам придется использовать свойства: MergeArea и MergeCells, а также конструкции типа "Range.Сells(x,y)" => MergeArea.Cells(1,2), и т. д.
 
Цитата
EleeSha написал:
как через VBA заполнить столбец "Табельный номер" в док."Табель" с помощью предварительно созданного массива с данными из док."График"?
Вам принципиально через VBA?
Гораздо проще - просто удалить каждую третью строку из графика. Тогда можно будет простым копированием вставить столбец "Таб. номер" из графика в столбец "Табельный номер" в Табеле.
Чтобы удалить каждую 3-ю, достаточно установить фильтр на столбец "ФИО/Дожность" и отфильтровать ячейки, содержащие слово " часов". После чего удалить их.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Код
Sub Main()
    Dim shG As Worksheet: Set shG = Workbooks("график.xlsm").Worksheets("график")
    Dim shT As Worksheet: Set shT = Workbooks("Табельный.xlsm").Worksheets("Табель")
    
    Dim dic As Object:    Set dic = GetDic(shG)
    OutDic shT, dic
End Sub

Function GetDic(sh As Worksheet) As Object
    Dim y As Long
    Dim a As Variant
    With sh
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        a = .Range(.Cells(1, 1), .Cells(y, 5))
    End With
    Dim dic As Object:    Set dic = CreateObject("Scripting.Dictionary")
    Dim arr3(1 To 1, 1 To 3) As Variant
    Dim x As Byte
    For y = 6 To UBound(a, 1)
        For x = 1 To 3
            arr3(1, x) = a(y, x ^ 2 - 2 * x + 2)
        Next
        dic.Item(a(y, 1)) = arr3
    Next
    If dic.Exists("") Then dic.Remove ("")
    Set GetDic = dic
End Function

Sub OutDic(sh As Worksheet, dic As Object)
    With sh
        Dim x As Byte
        Dim y As Long
        Dim yMax  As Long
        Dim i As Long
    
        yMax = .Cells(.Rows.Count, 1).End(xlUp).Row
        y = 19
        For i = 1 To dic.Count
            .Cells(y, 1).Resize(1, 3).Value = dic.Items()(i - 1)
            y = y + 2
        Next
        Do
            If y > yMax Then Exit Do
            For x = 1 To 3
                .Cells(y, x).Resize(2, 1).ClearContents
            Next
            y = y + 2
        Loop
    End With
End Sub

 
Цитата
ocet p написал: А что делать с остальными столбцами?
Эти столбцы буду заполняться через формулы экселя. На основе первых трех столбцов будут присваиваться значения для упомянутых.

Цитата
Михаил Лебедев написал: Вам принципиально через VBA?
Именно) Идет оптимизация процесса производства, но навыков текущих пока недостаточно, чтобы реализовать задачи руководства. Сижу учусь :oops:

МатросНаЗебре, умничка такой) Я в восторге, честно :*
Возможно ли видоизменить код, так чтобы при переносе данных я могла исключать некоторые строки? Т.е чтобы перенос осуществлялся для всех сотрудников из списка "График" кроме определенного.

Надеюсь на вашу помощь)
 
Привет, форумчане ;)

Вопросец следующего рода.

Как модернизировать нижеуказанный макрос от "МатросНаЗебре", чтобы не было привязки к имени документа? ( в ходе работы оно может меняться)
Цитата
МатросНаЗебре написал: Sub Main()...
 
Цитата
чтобы не было привязки к имени документа?
Открывайте второй документ при помощи диалогового окна
 
Я часто заставляю пользователей не выбирать файл в диалоге, что неудобно, а предлагаю кликнуть ячейку нужного листа (использую экселевский инпутбокс тип8), а там уже через Parent ячейки получаем всё что нужно остальное.
Единственное - чтоб физически кликнуть, часто файлы должны быть изначально видимы на экране (у кого есть OfficeTab - не касается, тем проще).
Страницы: 1
Наверх