2

У нас есть лист со многими сложными формулами (более 6000 просмотров). Макрос запускается на листе и проходит по каждой из 3000+ строк несколько раз в день в течение 200+ дней. При каждом обновлении все формулы должны пересчитываться для продолжения макроса. Помимо жесткого кодирования значений, есть ли способ выбрать определенные ячейки (с формулами в них) и отключить вычисления для них, потому что их значения не изменятся до конца цикла?

Мы не собираемся отключать вычисления для всего листа, а только для подмножества диапазонов на листе. Остальная часть листа должна рассчитываться нормально.

1 ответ1

2

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

Создайте лист, содержащий все формулы диапазона, который вы не хотите вычислять, но без = , чтобы они не рассчитывались. Затем в вашем макросе вы можете сделать это, чтобы избавиться от формул:

With Worksheets("sheetname").Range("A1:A100")
    .Formula = .Value
End With

Это в основном эквивалентно копированию диапазона и выполнению вставки специальных >> значений.

Способ возврата формул зависит от того, являются ли все формулы одинаковыми. Если они одинаковые, используйте:

With Worksheets("sheetname").Range("A1:A100")
    .Formula = "=" & Worksheets("formulasheet").Range("A1:A100").Text
End With

Если они разные, вы можете пройти по всем ячейкам следующим образом:

Dim i&, firstrow&, lastrow&
Dim ws As Worksheet, formulaws As Worksheet
Set ws = Sheets("sheetname")
Set formulaws = Sheets("formulasheet")
firstrow = 1
lastrow = 100
For i = firstrow To lastrow
    ws.Cells(i, 1).Formula = "=" & formulaws.Cells(i, 1).Value
Next i

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .