скопировать непустые строки из подмножества столбцов на другой лист - PullRequest
0 голосов
/ 02 марта 2020

Всего VBA Noob здесь, так что терпите меня, пожалуйста. У меня есть рабочая книга с 67 столбцами, из которых мне нужны только данные из 14 столбцов, вставленные в новую рабочую таблицу, а затем отформатированные в таблицу. Эта исходная рабочая книга ежедневно обновляется новыми строками данных, которые я хотел бы обновить с помощью новой рабочей таблицы и таблицы с данными обновления.

Мой текущий рабочий процесс выглядит следующим образом: Загрузите исходную рабочую книгу с обновлениями. Я копирую исходную книгу в MasterList, так как никаких изменений нет. Я стараюсь копировать только строки и столбцы с данными.

В листе Master List я разместил кнопку Update, чтобы она копировала нужные мне столбцы из MasterList в MasterTable.

Я нашел решение, которое копирует данные, но похоже, что оно копирует все строки независимо от того, есть у них данные или нет. В результате новая таблица, содержащая более 100 000 строк, действительно замедляет работу приложения Excel и приводит к зависанию системы.

Вот код, который я использую для выполнения sh копирования и вставки. Я

Sub Button1_Click()
    Worksheets("MasterList").Activate
    Worksheets("MasterList").Range("I:I,J:J,K:K,L:L,M:M,N:N,S:S,X:X,Y:Y,Z:Z,AA:AA,AC:AC,AD:AD").Select
    Selection.Copy
    Worksheets("MasterTable").Activate
    Worksheets("MasterTable").Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub

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

Я ценю любые указания или предложения.

1 Ответ

1 голос
/ 02 марта 2020

Не используйте .select или .activate. Ресурс тяжелый / медленный.

Протестировано и работает.

Sub test()
    ' These will help with the speed of your macro.
    ' This turns of calculations
    Application.Calculation = xlCalculationManual
    ' This runs the macro "behind the scenes"
    Application.ScreenUpdating = False

    ' Always dim your variables
    Dim lRow As Long
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim Sourcews As Worksheet: Set Sourcews = wb.Worksheets("MasterList")
    Dim Destinationws As Worksheet: Set Destinationws = wb.Worksheets("MasterTable")

    ' find the last row of the source ws
    lRow = Sourcews.Cells(Sourcews.Rows.Count, "I").End(xlUp).Row
    ' "select" from row 1 to the last row containing data and paste to the destination ws
    Sourcews.Range("I1:N" & lRow & ", S1:S" & lRow & ", X1:AA" & lRow & ", AC1:AD" & lRow).Copy Destination:=Destinationws.Range("A1")

    ' turn the calculations and screen updating back on
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...