私は一連の大きなワークブックで作業しており、ツールを使用して財務データベース (SAP Financial Consolidation) から値をインポートしています。=GetCtData({parameters})
これが機能する方法は、またはなどの UDF を使用すること=GetCtLabel({parameters})
です。パラメータの 1 つは、セルの出力値であり、任意の時点でセルの値が数値になります。
Financial Consolidation アドインを持っていない他のユーザーとこれらのワークブックを共有するには、これらの各セルを値に変換する必要があります。すべてのセルを値に変換するのではなく、=GetCt...
数式を含むセルのみを変換します。以下は、これまでに書いたコードで、3 つの (類似した) アプローチがあります (2 つはコメントアウトされています)。小さなワークブックでは完全に機能しますが、ファイルが大きくなり、更新が必要なセルが合計でおそらく 250,000 以上になりました。(およそ 70 列 x 350 行 x 10+ ワークシート。) 実行してみましたが、数時間後も実行されています。
誰でもより効率的な方法を提案できますか?
Sub removeAllMagnitudeLinks()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
For Each sSheet In Worksheets
If sSheet.Name <> "blankMagnitude" Then 'Don't remove links from the blankMagnitude sheet -- unnecessary
If sSheet.FilterMode Then sSheet.ShowAllData
Application.StatusBar = "Working on sheet #" & sSheet.Index & " of " & Worksheets.Count & ". Name: " & sSheet.Name
On Error Resume Next
While Err.Number = 0
With sSheet.Cells.Find(What:="GetCt", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
' .Copy 'Copying and pasting is one approach, but may not be fastest
' .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
' .Formula = .Value 'This is another approach, which is certainly not very fast
.Value = .Value
End With
Wend
End If
Next sSheet
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub