Excel に一連の配列数式があり、互いにキーオフしています。これらは、独自の Excel アドインによって生成されるデータの範囲に合わせて自動的にサイズ変更されます。
ただし、私のコードが配列数式の一部を正しい新しいサイズに書き換えるたびに、シート上の別の無関係なセルを編集するか、シートを保存するか、F9 キーを押すまで、セルはすべて #N/A として表示されます。
Application.Calculate、ActiveSheet.Calculate などのコードを使用しても効果はありません。
ただし、SendKeys "{F9}" を使用すると可能です。
例として、これらはシート上の 2 つの数式です。
={IF(LEN(INDEX(A:A, ROW()))>0,ROW(A:A)+2)}
と
={LARGE(OFFSET($J$1,0,0,ROW()),1)}
最初の数式は、プログラムでセル範囲に書き込んだ後、正常に機能します。テキストが含まれているセルの行番号を教えてくれるだけです。
2 番目の数式は、プログラムでセル範囲に書き込んだ後は機能しません。数値のリストで以前に見られた最大の行番号が得られます (これは最初の式の出力です)。F9 キーを押すと、2 番目の数式が正しく更新されます。VBA で Application.Calculate を実行しても、何も起こりません。ワークシート レベルで利用できる他のさまざまな再計算方法も試しましたが、うまくいきませんでした。
誰もこのようなことに遭遇したことがありますか?
編集: サイズ変更コードは基本的に次のようなものに要約されます (より一般化された呼び出しを可能にするサポート コードをすべて取り除きます):
まず、私は:
formula = dataSheet.Cells(startRow, startColumn).formula
じゃあ後で:
Set DeleteRange = dataSheet.Range(dataSheet.Cells(startRow, startColumn), dataSheet.Cells(bottomBound, rightBound))
DeleteRange.ClearContents
Set DeleteRange = Nothing
その後、次のようになります。
Set resultRange = dataSheet.Range(dataSheet.Cells(startRow, startColumn), dataSheet.Cells(startRow + Height - 1, startColumn + Width - 1))
resultRange.FormulaArray = formula
Set resultRange = Nothing
簡単に言えば、数式のコピーを作成し、範囲をクリアしてから書き直します。