Есть много вещей, которые я бы порекомендовал в вашем коде.
Поиск определенного текста / значения в диапазоне заголовков различных таблиц (определенный текст / значение из другой таблицы «БД»)
Когда заголовок с этим значением найден, скопируйте все данные ниже этого заголовка и вставьте его как значение в тот же столбец
A.
Dim Lr1,lr2,lr3,lr4 As Long
В приведенном выше коде только последняя переменная lr4
будет объявлена как Long
, а остальные будут объявлены как Variants
. Замените его на Dim Lr1 As Long,lr2 As Long,lr3 As Long,lr4 As Long
. Variants
замедляет код, так как во время выполнения код должен преобразовывать его в соответствующий тип данных. Их следует избегать, если в этом нет необходимости.
B. With Worksheets("Calc_1", "Calc_2", "Calc_3", "Calc_4")
Не делайте этого. Что если заголовок находится в другом столбце? Просмотрите листы и используйте Select Case
для работы с соответствующими листами
C. Selection.PasteSpecial Paste:=xlPasteValues.....
Вы пытаетесь вставить без копирования? Как я упоминал в комментариях, я не рекомендую использовать xlDown
в таком сценарии. Вы правильно вычисляете последнюю строку в начале кода. Используйте это, чтобы определить свой диапазон. Однако то, что вы пытаетесь достичь, можно сделать в одной строке, а не копировать и вставлять специальные.
Ваш код может быть сокращен до ( Не проверено )
Option Explicit
Sub Sample()
Dim period As String
Dim ws As Worksheet
Dim rng As Range
period = Worksheets("DB").Range("Y1")
For Each ws In ThisWorkbook.Sheets
Select Case ws.Name
Case "Calc_1", "Calc_2", "Calc_3", "Calc_4"
With ws
For Each rng In .Range("G11:Z11")
If rng.Value = period Then
.Columns(rng.Column).Value = .Columns(rng.Column).Value
Exit For
End If
Next rng
End With
End Select
Next ws
End Sub
Дайте мне знать, если вы получили какую-либо ошибку в приведенном выше коде.
D. Lastrow1 = Worksheets("Calc_1").Cells(Rows.Count, "A").End(xlUp).Row
. Чтобы быть в безопасности, полностью квалифицируйтесь также Rows.Count
. Я бы порекомендовал почитать на ЭТО .
Что касается пункта 3 и 4, пожалуйста, покажите некоторые усилия, которые вы предприняли для пункта 1 и 2, и мы возьмем его оттуда. :)