Скопируйте и вставьте под определенным заголовком

Скопируйте и вставьте под определенным заголовком У меня есть 6 разных заголовков на листе WIPTX, которые будут извлекать информацию с вкладки TestData, которая по сути представляет собой данные, которые будут загружены с сайта SharePoint. Я хочу иметь возможность копировать и вставлять строки с определенными значениями, такими как тип статуса или имя. под каждым заголовком на листе WIPTX. Заголовки находятся в столбцах A-C, E-G, I-K, M-O, Q-S и U-W. Заголовки имеют разные статусы, которые находятся на листе TestData. Статус включает в себя «Назначено», «Принято», «Выполняется», «Приостановлено», «Завершено» и «Отменено». Будет ли это возможно? Код, который у меня есть до сих пор, работает, но он не вставляется в определенные столбцы заголовков.

Я пытался исследовать и просматривать другие источники, но я все еще не могу найти правильный код, который соответствует тому, что я ищу.

Sub Update1()

Dim LastRow1 As Long, LastRow2 As Long, i As Long

With ThisWorkbook.Worksheets("TestData")
      LastRow1 = .Cells(.Rows.Count, "A").End(xlUp).Row
      For i = 1 To LastRow1
          If .Range("A" & i).Value = "Thomas Xiong" Then
              LastRow2 = ThisWorkbook.Worksheets("All Projects with NetBuilds").Cells(ThisWorkbook.Worksheets("All Projects with NetBuilds").Rows.Count, "A").End(xlUp).Row
              .Rows(i).Copy ThisWorkbook.Worksheets("All Projects with NetBuilds").Rows(LastRow2 + 1)
          End If
      Next i
End With

End Sub

Это возможно?

Если вы пытаетесь скопировать и вставить строку, у вас не может быть разных групп в одной строке. Вам нужно скопировать и вставить определенные столбцы для каждого заголовка. Допустим, столбцы A-C из листа TestData и вставьте их в последнюю строку, доступную в нужном заголовке.

Damian 08.04.2019 17:05
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
286
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что это должно помочь вам:

Option Explicit
Sub Update1()

    Dim wsData As Worksheet, wsProjects As Worksheet, LastRow As Long, Col As Integer, CopyRange As Range, C As Range

    With ThisWorkbook
        Set wsData = .Sheets("TestData") 'refering the worksheet with all the data
        Set wsProjects = .Sheets("All Projects with NetBuilds") 'refering the worksheet with the headers
    End With


    For Each C In wsData.Range("A2", wsData.Cells(1, 1).End(xlDown)) 'Lets assume the criteria is on the column A
        With wsData
            Select Case C.Value
                Case "Assigned"
                    With wsData
                        Set CopyRange = .Range(.Cells(C.Row, 3), .Cells(C.Row, 5)) 'Here I'm assuming you want to copy data from Columns B To D
                    End With
                Case "Accepted"
                    With wsData
                        Set CopyRange = .Range(.Cells(C.Row, 7), .Cells(C.Row, 9)) 'Here I'm assuming you want to copy data from Columns G To I
                    End With

            '... all your headers
            End Select
        End With
        With wsProjects
            Col = .Cells.Find(C).Column 'Find the header column
            LastRow = .Cells(.Rows.Count, Col).End(xlUp).Row + 1 'find the last row on that header
            CopyRange.Copy .Cells(LastRow, Col) 'paste the range (this method will copy everything from the source)
        End With
    Next C

    'In case you are always copying the same range of cells skip the select case, delete the CopyRange variable and just copy paste on the last block

End Sub

Я получаю сообщение об ошибке на Col=.Cells.Find(C).Column?

TJunky 08.04.2019 18:38

Приведенный выше код был просто примером. Вы должны изменить его в соответствии с вашими потребностями. C в моем коде - это ячейка в столбце A, поэтому, если ячейка в столбце A не является вашим заголовком, она выдаст ошибку.

Damian 09.04.2019 07:56

Привет, Дамиан, у меня все еще проблемы с приведенным выше кодом. Я добавил все свои заголовки в оператор case, но теперь получаю сообщение об ошибке: Ожидаемая функция или переменная?

TJunky 09.04.2019 16:00

В каком столбце содержатся все заголовки? потому что я предполагаю, что заголовки находятся в столбце A в тестовых данных рабочего листа

Damian 09.04.2019 17:03

на самом деле заголовки находятся в рабочем листе WIPTX, и я пытаюсь скопировать и вставить строки с разными статусами из рабочего листа TestData в заголовки «Назначено», «Принято», «Выполняется», «На удержании», «Завершено» и «Отменено».

TJunky 09.04.2019 17:06

Ну так, а где статус на листе testdata? в какой колонке?

Damian 09.04.2019 17:08

Например, на рабочем листе TestData в столбце A есть имена, в столбце B есть статусы этого состояния: «Назначено», «Принято», «Выполняется», «На удержании», «Завершено» и «Отменено». Что я хочу сделать, так это скопировать и вставить строки с другим статусом в рабочий лист WIPTX под этим конкретным заголовком статуса. Хотел бы я добавить картинку.

TJunky 09.04.2019 17:09

Затем вам нужно изменить: wsData.Range("A2", wsData.Cells(1, 1).End(xlDown)) на wsData.Range("B2", wsData.Cells(1, 2).End(xlDown)), потому что ваш статус находится в столбце B, и я предположил, что они были в столбце A.

Damian 09.04.2019 17:10

Я изменил это, но по-прежнему получаю сообщение об ошибке: не задана переменная объекта или переменная с блоком. Ошибка выполнения 91 строка Col = .Cells.Find(C).Column 'Найти столбец заголовка

TJunky 09.04.2019 17:12

Извините, @TJunky, я забыл добавить With, мой ответ отредактирован, и теперь он должен работать.

Damian 09.04.2019 17:15

Я все еще получаю сообщение об ошибке "Переменная объекта" или "Переменная блока не установлена". Ошибка выполнения 91 строка Col = .Cells.Find(C).Column 'Найти столбец заголовка?

TJunky 09.04.2019 17:21

Можете ли вы дать мне свою рабочую тетрадь с ограниченным набором данных и моим реализованным макросом? вы можете изменить данные, если это проблема для обмена.

Damian 09.04.2019 17:23

Конечно, у вас есть электронная почта или я могу связать ее с вами? и было бы проще использовать оператор if then? например: If .Column("B" & i).Value = "On Hold" Затем скопируйте и вставьте строку под заголовком On Hold на листе "WIPTX" в следующей доступной строке Else If .Column("B" & i) .Value = «Completed». Затем скопируйте и вставьте строку под заголовком «Completed» на листе «WIPTX» в следующей доступной строке.

TJunky 09.04.2019 17:26
Select выглядит легче для чтения, чем если, вы можете использовать wetransfer, чтобы загрузить книгу и вставить ссылку сюда.
Damian 09.04.2019 17:27

[ссылка](wetransfer.com/downloads/… ) это должна быть ссылка

TJunky 09.04.2019 17:39

Я только что попробовал вашу книгу, добавил If Not CopyRange Is Nothing Then перед CopyRange.Copy .Cells(LastRow, Col) . В вашем коде было ThisWorkbook.Worksheets("All Projects with NetBuilds"), в то время как в вашей реальной книге есть рабочий лист с именем "WIPTX", как только я изменил имя листа на wsProjects, все работает гладко. Также вы изменили .Cells.Find(C) на .Cells.Find(A) не делайте этого.

Damian 09.04.2019 17:59

Спасибо, код запускается, но ничего не вставляется в рабочий лист WIPTX?

TJunky 09.04.2019 18:05

Другие вопросы по теме