1

やあ私は次のように、その式配列をExcel2007の範囲を与えるac#プログラムを持っています

   Excel.Worksheet ws_res = (Excel.Worksheet)
                      wb.Worksheets.Add(mis, mis, mis, mis);
   Excel.Range range_res = (Excel.Range)ws_res.get_Range("A1","HM232");
   range_res.FormulaArray = "=(IF((IF(Sheet4!A1:HM232=1,0,"+
                     "IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232)))=1,0,"+
                     "IF((IF(Sheet4!A1:HM232=1,0,"+
                     "IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232)))=0,1,("+
                     "IF(Sheet4!A1:HM232=1,0,"+
                     "IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232))))))";

数式が間違っているという例外が表示されます...しかし、Excel-2007を開いて新しいシート(シート5としましょう)で範囲A1:HM232を選択し、上記の数式を数式バーに直接貼り付けてからCtrlを押します+Shift+Enter を一緒に押すと、すべて問題なく動作します... c# で同じことを行う方法を教えていただけますか?

FormulaArray を使用して R1C1 スタイルを使用する場合は認識していますが、

              "=ROUND((IF(Sheet4!A1:HM232=1,0,"+
                 "IF(Sheet4!A1:HM232=0,1,Sheet4!A1:HM232))),0)"

それは私に例外を与えず、C#とExcelの両方から直接Ctrl + Shift + Enterをしたかのように実行します

上記の 2 つの式について、A1:HM232 を R1C1:R232C221 に変更しました。短い方は c# から正常に動作しますが、長い方は動作しません!

4

9 に答える 9

2

私が開発している人々がスペイン語で Excel を使用しているという複雑な問題がありました。
英語以外のバージョンの Excel で数式を機能させるには、別の関数セットを使用する必要があります。つまり、 Formulaの代わりにFormulaLocal 、 FormulaR1C1代わり にFormulaR1C1Localなどです。引数マーカーとしての関数名とセミコロンはそうではありません - 実行時エラーが発生します。 私が見つけた回避策は、英語に翻訳し、R1C1ではなくローカルの式を使用するなどのことを行うことでした...そしてそれはうまくいきます。
=RC[-1]+R4C4=SUMA(SI(FC(-2)=1;F8C(-3):F1000C(-3);0))
=SUM(IF(AC9=1,AB$8:AB$1000,0))


a) 発行されたアドバイスは、配列数式に R1C1 を使用することであり、
b) 英語の関数名を使用すると、通常、実行時エラーが予想されるため、これは驚くべきことです。

于 2011-02-11T10:52:48.460 に答える
1

セル参照を変更する必要があるようです。FormulaArrayのドキュメントから:

このプロパティを使用して配列数式を入力する場合、数式ではA1参照スタイルではなくR1C1参照スタイルを使用する必要があります。

R1C1参照スタイルの詳細:

于 2009-06-25T18:20:21.463 に答える
1

問題は、数式配列がR1C1参照で機能していないように見えることです。これは、RC列があり、formulaArrayletプロパティに適用する数式スタイルに関してExcelを混乱させるためです。

= Sum(RC2:RC3)は、RC形式とA1参照形式の両方になりました。

そして、彼らはformulaArrayR1C1のような新しいletプロパティを追加していません

于 2009-10-22T00:06:38.900 に答える
1

代わりに sumproduct を使用してみてください。「暗黙の」配列式であるという利点があります。

myrange.formula = "=sumproduct((logicalExpr1) * (logicalExpr2) * (logicalExpr3))

また、数式が読みやすくなります。

于 2009-08-05T07:28:21.697 に答える
1

選択範囲全体に数式を適用しているにもかかわらず、数式の最初のセルを指定する必要があると思います。

range_res("A1").FormulaArray = "=(IF((IF(Sheet4!A1:HM232=1,0,"+ etc
于 2009-06-25T18:25:01.643 に答える
0

私の頭のすぐ上で、あなたは式を全範囲に適用することを意味しましたか?

編集:FormulaArrayプロパティの代わりにFormulaプロパティを設定してみてください。

于 2009-06-25T18:14:50.833 に答える
0

少し古いスレッドですが、FormulaArray での私の経験 (Excel 2010、ドイツ語を使用):

リチャードが述べたように、A1 参照スタイルの複雑な数式も私にはうまくいきませんでした。ただし、ワークシートで名前付き参照を使用することを好むため、R1C1 参照スタイルは適用できませんでした。次の回避策は私にとってはうまくいきました:

Microsoft.Office.Interop.Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet;
Microsoft.Office.Interop.Excel.Range range = sheet.Cells[1, 1];
range.Value2 = "=IFERROR(MATCH(INDEX(ForeignTable[ForeignTableField1],MATCH(1,(ForeignTable[ForeignTableField1]=LocalField1)*(ForeignTable[ForeignTableField2]=LocalField2),0)),ForeignTable[ForeignTableField1],0),MATCH(1,(ForeignTable[ForeignTableField3]>=LocalField3)*1,0))"
string formulaArrayString = range.FormulaArray;
range.FormulaArray = formulaArrayString;

出力するformulaArrayStringと、式のローカライズされた (ドイツ語) バージョンが含まれます。ローカライズされた式を使用すると、エラーは発生しません。ただし、一時的なformulaArrayString文字列を使用することで、ローカライズされた Excel バージョンに限定されず、常に英語の数式を使用できます。

于 2014-04-19T22:44:27.797 に答える
0

数式は引き続き R1C1 形式で入力できます。このようにしてみてください:

Private Sub Tryformula()
  Range("B2").FormulaR1C1 = "=RC[-1]+R4C4"
End Sub
于 2010-05-18T18:29:36.683 に答える
0

はい、Robert J.に同意するので、最初に式の1つを変換する必要があります(できればA1に)。幸いなことに、それを行う機能がありますが、Ctrl-Shift-Enter を使用してセルに入力するだけでなく、毎回マクロを実行する必要があります。

于 2009-10-28T16:01:57.873 に答える