Como definir células específicas para não calcular no Excel?

2

Temos uma planilha com muitas fórmulas complexas (mais de 6000 vlookups). Uma macro é executada na planilha e passa por cada uma das mais de 3000 linhas várias vezes por dia por mais de 200 dias. Em cada atualização, todas as fórmulas precisam recalcular para que a macro continue. Além de codificar os valores, existe uma maneira de selecionar certas células (com fórmulas neles) e desativar os cálculos para elas, porque seus valores não serão alterados pelo restante da execução?

Não pretendemos desativar cálculos para a planilha inteira, apenas para um subconjunto de intervalos dentro da planilha. O resto da folha deve calcular normalmente.

    
por rishimaharaj 13.01.2016 / 02:24

1 resposta

2

Eu não acho que você pode definir células específicas para não calcular. Você pode, no entanto, substituir temporariamente as fórmulas pelos valores reais em sua macro. Isso, na prática, teria o mesmo efeito. Há muitas maneiras de conseguir isso, aqui está uma ideia.

Faça uma planilha contendo todas as fórmulas do intervalo que você não deseja calcular, mas sem o = , para que elas não sejam calculadas. Em seguida, na sua macro, você pode fazer isso para se livrar das suas fórmulas:

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

Isso é basicamente equivalente a copiar o intervalo e fazer um comentário em Colar Especial > > Valores.

A maneira como você obtém suas fórmulas de volta difere dependendo se todas as fórmulas são iguais ou não. Se eles são o mesmo uso:

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

Se eles forem diferentes, você pode percorrer todas as células assim:

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
    
por 13.01.2016 / 03:18