Нужна помощь в написании кода для перемещения определенных данных с одного листа на другой в Excel - PullRequest
0 голосов
/ 26 июня 2018

По сути мне нужно переместить данные с одного листа на другой в Excel. Я приложил фотографии к листу данных (из которого мне нужно получить данные) и листу назначения (к которому мне нужно опубликовать данные). Мне нужно написать код, чтобы прочитать лист, и создать новую строку для каждого действия (очистка, мытье полов, очистка, вытирание и т. Д.) С правильным количеством часов, которое они потратили на каждое, сколько единиц они завершили, их имя, и год. Я приложил фотографию нескольких строк, которые я заполнил вручную, но если бы я мог автоматизировать процесс, это было бы намного проще. Большое спасибо за любую помощь, которую вы можете предложить :)

Формы источника и назначения, рядом друг с другом

1 Ответ

0 голосов
/ 26 июня 2018

Так что это не самый чистый код, который я когда-либо делал, но я верю, что он заполнит те части, которые я понимаю, а вы можете заполнить остальные.

Поскольку все сотрудники находятся на одном и том же листе друг под другом, они переходят от i к нижней части листа. Он проверяет наличие «PP» в тексте ячейки и, если он его находит, он начинает проверять эту строку на предмет единиц / часов для передачи. Если тип в этой строке не содержит ошибок, он скопирует данные для этого типа. Это повторяется для каждого типа.

Если в тексте ячейки на первом листе нет «PP», то в качестве альтернативы он проверит имя «Сотрудник», чтобы узнать, чье имя скопировать на лист два для следующих записей.

Теперь код действительно ужасен, потому что он постоянно указывает каждую ячейку, чтобы получить значения из нее. Для меня это был самый быстрый способ получить все, что вы перечислили на своем первом листе, и сделать его легко обновляемым вами в будущем.

Sub Report()

    Dim ws1 As Worksheet
    Set ws1 = Sheets(1)

    Dim ws2 As Worksheet
    Set ws2 = Sheets(2)

    Dim i As Long
    Dim row_current As Long
    Dim employee_name_row As Long: employee_name_row = 1

    For i = 1 To ws1.Cells(ws1.Rows.count, "A").End(xlUp).row
        If InStr(ws1.Cells(i, "A").Value2, "PP") > 0 Then

            'getting row to use on sheet 2
            row_current = ws2.Cells(ws2.Rows.count, "A").End(xlUp).Offset(1, 0).row

            If Not IsError(ws1.Cells(i, "D")) Then  'Cleaning

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, units, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "B").Value2
                ws2.Cells(row_current, "E").Value2 = ws1.Cells(i, "C").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "B").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Not IsError(ws1.Cells(i, "G")) Then  'Mopping

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, units, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "E").Value2
                ws2.Cells(row_current, "E").Value2 = ws1.Cells(i, "F").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "E").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Not IsError(ws1.Cells(i, "J")) Then  'Scrubbing

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, units, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "H").Value2
                ws2.Cells(row_current, "E").Value2 = ws1.Cells(i, "I").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "H").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Not IsError(ws1.Cells(i, "M")) Then  'Wiping

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, units, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "K").Value2
                ws2.Cells(row_current, "E").Value2 = ws1.Cells(i, "L").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "K").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Len(ws1.Cells(i, "N")) > 0 Then  'Jumping

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "N").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "N").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Len(ws1.Cells(i, "O")) > 0 Then  'Swimming

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "O").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "O").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Len(ws1.Cells(i, "P")) > 0 Then  'Other

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "P").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "P").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If
            If Len(ws1.Cells(i, "Q")) > 0 Then  'Computer Probs

                'period, name
                ws2.Cells(row_current, "A").Value2 = ws1.Cells(i, "A").Value2
                ws2.Cells(row_current, "B").Value2 = ws1.Cells(employee_name_row, "B").Value2

                'task, hours
                ws2.Cells(row_current, "C").Value2 = ws1.Cells(3, "Q").Value2
                ws2.Cells(row_current, "F").Value2 = ws1.Cells(i, "Q").Value2

                'year
                ws2.Cells(row_current, "I").Value2 = ws1.Cells(employee_name_row, "L").Value2

                row_current = row_current + 1

            End If

        ElseIf InStr(ws1.Cells(i, "A").Value2, "Name") > 0 Then
            employee_name_row = i
        End If

    Next i
End Sub
...