it-swarm-ja.com

Excelが値を適切に再計算しない

値が含まれているExcelシートがあります(このシートはカスタムPerlスクリプトによって生成されますが、そこに問題があるとは思いません)。その中に、私は式を持っています:

_=sum(indirect(concatenate(address(6,column()),":",address(17,column()))))
_

この数式の目的は、現在の列の行6と17の間のセルのSUM()を取得することです。 Gnumeric Spreadsheet で、ファイルを開くとすぐに、これは機能します。ただし、Excel(20032007の両方)では、ファイルを開くと、この数式のフィールドに_#VALUE!_エラーが発生し、INDIRECTが値_$B$6:$B$17_はエラーになります。

これが問題のねじれです。 (_F2_を介して)フィールドを編集し、noを変更して、Enterキーを押すと、値が更新されます。また、ファイルを.xlsx(Excel 2007形式)で保存すると、開くと値が更新されるようです。残念ながら、私が使用しているモジュールでxlsxを作成できるかどうかはわかりません。また、クライアントの多くはおそらくそれを使用できないでしょう。

助言がありますか?クライアントごとに毎月200以上のファイルを編集することは不可能なので、何か足りないものがあれば教えてください。

2
Glen Solsberry

バニラサム関数を挿入した場合、それは機能しますか?つまり、問題は間接/アドレスの組み合わせのコンポーネントに起因する可能性がありますか?

合計する範囲を作成するためにOFFSETを使用してみましたか?例えば:

=SUM(OFFSET(B6,0,0,12,1))
3
Diem

ストローを握っているかもしれませんが、R1C1スタイルのリファレンスを試すことができます

=SUM(INDIRECT("R["&7-ROW()&"]C:R["&17-ROW()&"]C",FALSE))

または、数式が常に行19にある場合は、参照スタイルをR1C1に設定します。

Application.ReferenceStyle = xlR1C1

次に、数式を次のように挿入できます

=SUM(R[-13]C:R[-2]C)

更新:

を使用してReferenceStyleを設定する必要を回避できます

<YourCellReference>.FormulaR1C1 = "=SUM(R[-13]C:R[-2]C)"
2
chris neilsen

PerlスクリプトにWriteExcelを使用している場合は、記事の提案とともに、これに注意してください。 INDIRECT関数とCONCATENATE関数の解析 および SUM()とINDIRECT()の混合式エラー

残念ながら、Spreadsheet :: WriteExcelパーサーはそのような数式を処理できません。 Spreadsheet :: WriteExcelXMLは、それを使用できれば、それらを処理できます。

1
datatoo

たぶん、これでスプレッドシート全体の再計算を強制することができます:

http://msdn.Microsoft.com/en-us/library/bb687891.aspx

マクロの名前を変更してから、スプレッドシートの名前を再度変更すると、正常に機能するはずです。たぶん、パールスクリプトの最後で実行できますか?真珠についてはあまりよくわかりません。

または、ホットキーCTRL + ALT + F9を使用し、それが機能する場合は、次の関数でVBAを使用します:Application.CalculateFull

1
Darokthar

ExcelのTools | Calculations計算モードを設定できます。 「自動」に設定されている場合、Excelは、ファイルを開いたときにも、「すべてのフィールド」の数式結果を自動的に更新する必要があります。

計算設定は個々のワークシートごとに設定することもできるため、Perlスクリプトが手動更新モードを設定している可能性があります。

0
Jawa