#excel #vba
Вопрос:
У меня есть две ячейки (R5 и S5), которые являются агрегатами на основе функции RAND (). Я хочу создать текущий список этих значений, которые изменяются каждый раз, когда лист пересчитывается. В списке должно быть около 100 000 итераций этого. Я написал «тупой» бит VBA, который копирует/вставляет значения в список.
Это своего рода работа, но слишком медленная для масштабирования до 100 тыс. итераций, и по какой-то причине я получаю разрыв каждые 50 записей.
Должен быть лучший / более быстрый способ сделать это с помощью петли или что-то в этом роде? ТИА.
Sub Macro2() ' ' Macro2 Macro ' ' Range("R5:S5").Select Selection.Copy Range("U5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("U6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("U7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub
Ответ №1:
Рабочий лист Вычисляет
Модуль листа, например Sheet1
Option Explicit Private Sub Worksheet_Calculate() Macro2 Me End Sub
Стандартный модуль, например Module1
Option Explicit Sub Macro2(ByVal ws As Worksheet) Application.EnableEvents = False Dim lCell As Range Set lCell = ws.Cells(ws.Rows.Count, "U").End(xlUp).Offset(1) lCell.Resize(, 2).Value = ws.Range("R5:S5").Value Application.EnableEvents = True End Sub
Комментарии:
1. Спасибо — я получаю ошибку с «Аргумент необязателен» — какие-нибудь указатели?