none
[C#]_Application.InputBoxの初期値に指定する値について RRS feed

  • 質問

  • C#でExcelのアドインを作成しています。
    そこで、_Application.InputBox メソッドを使用しています。
    ここで問題は、InputBoxの第3引数に設定する値について質問したいとおもいます。

    using Excel = Microsoft.Office.Interop.Excel;
    Excel.Application _xlsApp = Globals.ThisAddIn.Application;

    Excel.Range range = _xlsApp.InputBox("参照セル範囲", "セル参照","=C3",
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 8)
                        as Excel.Range;

    このような例で、第3引数に"=C3"を指定すると、InputBoxにデフォルトで表示されるのは、=$C:$Cになってしまいます。
    なぜかR1C1形式での認識になってしまいます。
    第3引数とInputBoxの初期値表示を以下にまとめます。

    第3引数     初期値
    ------------------------
    "=$C$3"    =$C$3
    "=$C3"     =$C3
    "=C$3"     =C$3
    "=C3"      =$C:$C

    やりたいことは、初期値表示を=C3にすることです。
    セルC3の相対表示にしたいのです。
    どうすればいいでしょうか。ご意見いただけると幸いです。

    2010年3月7日 3:54

回答

  • 自己レスです。
    InputBoxでは、R1C1形式での取り扱いになっているらしく、形式を変換後に設定するとうまくいきました。

    // A1形式で保持している数式をR1C1形式に変換
    String formula = "=C3";
    formula = xlsApp.ConvertFormula(
                    formula, Excel.XlReferenceStyle.xlA1, Excel.XlReferenceStyle.xlR1C1, Type.Missing, Type.Missing) as String;
    // ここでformula = R[-1]C[-1]など、に変換される

    Excel.Range range = _xlsApp.InputBox("参照セル範囲", "セル参照", formula,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 8)
                        as Excel.Range;

    すみません。お騒がせしました。
    2010年3月7日 5:35