2011-04-01 16 views
2

Excel Interopライブラリを使用してシートを取得し、シートの値を置き換えます。Excel Interopと数式範囲

列A-Eには、列F-Lのデータを処理する式が含まれています。 シートを更新すると、F-Lの内容がクリアされ、A-Eに式が残されます。次に、F-L列に新しいデータを入力します。

入力した新しいデータの全範囲に拡張するために、列A〜E(任意の行)に式が必要です。

たとえば、=sum(G1,G8)は、データを8から20行に拡張すると、になります。 シート内のすべての数式に到達する方法はありますか?数式の範囲を広げるにはどうすればよいですか?

答えて

4

私は8行から20行にプログラム化されたデータ量を拡張していると仮定しています。このデータを入力している間は、データを入力する各セルの数を保持してから、行うことができます:私はあなたが求めていたものだ願ってい

yourWorkSheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount); 

を、私はいくつかのポイントを逃したと私は改訂よなら、私に知らせてください。

+1

フォーマットの最後に ')'が表示されないようです。 '' = SUM(G1、G {0}) "' – SwDevMan81

+0

@ SwDevMan81良い点。改正された。 – SeeSharp

+0

それは私が考えていたものですが、実際には何らかの公式を持つことができるので、簡単な方法があることを望んでいました。私はこのメソッドを使用しているだろうし、私は正規表現を推測する? – Bob

0

Excelオブジェクトモードを操作する方法については、まずVBAソリューションを探してからC#に変換することをおすすめします(これは簡単です)。 Web上ではるかに多くのVBAリソースが利用できます。また、VBAマクロを記録することによって自分自身を助けることさえできます。

あなたの数式がどこにあるかによって、行を挿入することで必要なものを達成することができます。

など。範囲G1:G8を参照するA3の式があり、8の代わりに20行のデータを挿入する場合は、データを書き込む前に行8を20-8 = 12回下に移動できます。

Dim rng As Range 
Dim nIndex As Long 
Set rng = Rows("8:8") 
For nIndex = 1 To 20 - 8 
    rng.Insert Shift:=xlDown 
Next nIndex 

これを行うと、A3の数式が自動的に変更され、挿入された行が含まれます。

Interopでこれを行うことは、多数の行(アプリケーションからExcelプロセスに挿入された行ごとの往復)には特に効率的ではないことに注意してください。パフォーマンスを向上させる1つの方法は、一度に複数の行を挿入することです。

+0

これはちょうど範囲を下にシフトしているように見えます。私は、単純な範囲G1:G20だけでなく、数式の範囲を変更する必要があります。私は合計(G1:G20)または最大(G1:G20)または連結する(G1:G20)などを探しています。 – Bob

0
あなたが範囲にオブジェクトを解析する必要があり

...

(((Excel.Range))yourWorkSheet.Cells[rowCount, column]).Formula = string.Format("=SUM(G1,G{0})", rowCount); 
0

は、私は同様の問題があったが、IF式。それをFormulaプロパティに設定しても機能しませんでした。ただし、同じ作品がFormulaLocalに設定されている場合...

おかげところで、マイクロソフト:)

:式とFormulaLocalはA1 reference styleのために動作します。 R1C1の場合は、FormulaR1C1とFormulaR1C1Localを使用する必要があります。

関連する問題