Excel VBA — копирование несмежного диапазона в другой несмежный диапазон

#vba #excel

#vba #excel

Вопрос:

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

 Sub Update()
Dim Template As Worksheet: Set Template = Worksheets("ImportTemplate")
Dim Master As Worksheet: Set Master = Worksheets("Master")
Dim a As Long, x As Long

With Master
For a = 2 To .Range("A" amp; Rows.Count).End(xlUp).Row
    Select Case .Range("A" amp; a).Value
        Case "S"
            x = Template.Range("A" amp; Rows.Count).End(xlUp).Row   1
            Template.Range("A" amp; x).Value = .Range("E" amp; a).Value 'Site Details
            Template.Range("B" amp; x).Value = .Range("AO" amp; a).Value 'Meter Details
        Case "M"

        Case "C"

        Case Else
    End Select
Next a
.Select
End With
End Sub
 

Есть ли какой-нибудь «лучший» способ сделать это? Там будет гораздо больше ячеек для обновления, так что это не ограничивается 2, показанными, например

Комментарии:

1. Если ячеек много, я бы, вероятно, работал с массивами VBA, а не переходил туда и обратно к рабочим листам.

Ответ №1:

Вы могли бы включить

 ' at the start
Dim priorCalculationSetting as Long

Application.ScreenUpdating = False
priorCalc = Application.Calculation
Application.Calculation = xlCalculationManual

...your code here...

' at the end
Application.ScreenUpdating = True
Application.Calculation = priorCalculationSetting