Ваша основная идея выглядит хорошо для меня. Просто добавьте еще один цикл, чтобы просмотреть интересующие вас номера сущностей, например,
Dim myEntities
myEntities = Array(4013, 4503, 57, 1111) ' or whatever
For Cnt = FirstRow To 10
currentEntity = ActiveSheet.Cells(Cnt, 7)
For iEntity = LBound(myEntities) To UBound(myEntities)
If currentEntity = myEntities(iEntity) Then
'...
End If
Next iEntity
Next Cnt
Пара важных моментов:
Всегда Избегайте копирования / вставки , если это вообще возможно! Скопируйте и вставьте использовать буфер обмена. Другие программы могут выполнять чтение / запись в буфер обмена во время работы вашего кода, что приведет к непредсказуемым непредсказуемым результатам. Если вы действительно должны использовать метод .Copy
, используйте его так:
ActiveSheet.Cells(Cnt, 3).Copy _
Destination:=Worksheets("4-3-2011").Cells(Cnt - 3, 2)
Избегайте зацикливания в ячейках , поскольку это супер медленный . Вместо этого загрузите блок ячеек сразу в массив Variant, выполните ваши манипуляции в VBA (например, измените порядок значений, как вы это делаете), а затем запишите все обратно на лист. Это ускорит ваш код на порядок +.
Dim varSource As Variant
Dim varDestination As Variant
' ...
varSource = rngMySourceRange
' Manipulate data here. Place processed data in varDestination.
rngMyDestinationRange = varDestination
Кроме того, весь жаргон .Select
/ Selection.
является ненужным и неэффективным. Вот как Excel генерирует макросы автоматически, но мыслящий человек не должен воспроизводить это. Вместо чего-то вроде:
ActiveSheet.Cells(Cnt, 3).Select
Selection.Copy
всегда пишите более лаконичную версию, т.е.
ActiveSheet.Cells(Cnt, 3).Copy