C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■103069 / 6階層)  vbからExcelの計算式が書かれた帳票を出力したい。
□投稿者/ 魔界の仮面弁士 (3763回)-(2024/04/17(Wed) 18:33:23)
No103068 (ヒノザル さん) に返信
> どこでコーディングのミスをしているかがわからず、
> 詰まっているのが現状です。
「解決済み」マークが外されたということは、追加の質問が生じたということですかね?



>>一方、ここでいう「セルの名称」というのはもしかして、

セル範囲に名前を付けるには、Excel ではこのようにします。
https://swri.jp/article/1180#nav1


>>A1 とか A1:C4 といった表記のことを言っておられたのでしょうか?
> →その通りです。記載漏れがありすみません。

その表記は、"A1 参照形式" と呼ばれています。
 A1 とか $A$1 とか A$1 とか $A1 とか A1:C4 などといったおなじみの表記法。
 列がアルファベット、行が数値で指定。
 $ 付きが絶対参照、$ 無しが相対参照。

対を成すのが、"R1C1 参照形式" です。
 こちらは RC とか R[-1]C[0] とか R2C3:R4C5 などといった表記です。
 行と列を数値で指定するモード。Rが行でCが列。
 [] 付きが絶対参照、[] 無しが相対参照。

今回の質問内容からは少し外れますが、Excel で複数範囲のセルに計算式を入れるような場合には、
R1C1 参照形式を使った方が、分かりやすいかもしません。

Excel で A1 参照と R1C1 参照を切り替える場合は、
[ファイル]-[オプション] 設定の [数式]-[数式の処理] です。
頻繁に切り替える場合は、RelaxTools アドインなどを併用すると便利かも。


> 現在はFuncメソッドで14行1列で1グループとして出力しています。
> ---vb.net サンプル
> .Pos(iCol, 7 + iRow * 14).Func("=SUM(" & Cel & 1 + 4 + iRow * 14 & ":" & Cel & 1 + 6 + iRow * 14 & ")", "")

グループという用語から、Excel の [データ]リボンにある [アウトライン]-[グループ化] の方を
想像してしまいましたが、それはさておき。


ここでいう「Func メソッド」というのは、ExcelCreator のメソッドのことだと思って良いのですよね?
何度か確認しているつもりなのですが、肯定も否定もしてもらえていないので、回答に困ります。


ひとまず ExcelCreator について知らない掲示板参加者向けに、
ExcelCreator の Func メソッドのサンプルを抜粋しておきます。

Xlsx1.Cell("A2").Long = 1000 'A2セルには1000が入る

' Func メソッドの第2引数(計算結果)は省略可能
Call Xlsx1.Cell("A4").Func("=A2+999") 'A4セルには=A2+999が入る
Call Xlsx1.Cell("C1").Func("=A2+999", "1999") 'C1セルには=A2+999と計算結果1999が入る
Call Xlsx1.Cell("C3").Func("=A2+777", "1777") 'C3セルには=A2+777と計算結果1777が入る

' 関数式を取得する機構は用意されていない(Excel VBA なら Formula や FormulaR1C1 で得られるのに!)
' 下記のプログラム例では、C1セルの関数結果のみ取得できる
nData = Xlsx1.Cell("C1").Long 'nLongには関数の結果値1999が入る
vData = Xlsx1.Cell("C1").Value 'vDataには関数の結果値1999が入る


上記は ActiveX 版の ExcelCreator を想定したコードです。
上記コメントの「関数式を取得できない」という制限が
.NET 版の ExcelCreator でも引き継がれているかは把握していません。

注意点として:
計算式や関数式を設定した後に、その式が参照する範囲の列や行の挿入、削除、クリアをした場合、
Excel の場合と違って、ExcelCreator では変更内容が答えに反映されないそうです。
(ActiveX 版のヘルプで Func メソッドの項を読むと、そのように書かれている)


> グループ内で一つでも0以外の値がストアドプロシージャで取得した値がvbからExcelに出力されると、

ストアドプロシージャと Excel の関係性が説明されていないので、なんのことだか分からないです。


> Excelの計算式がFuncで設定した計算式が出力されるのですが、すべて0だと計算式ではなく、0が出力されているのが現状です。

計算式が正しいかどうかは、確認済みなのですよね?


> .Pos(iCol, 7 + iRow * 14).Func("=SUM(" & Cel & 1 + 4 + iRow * 14 & ":" & Cel & 1 + 6 + iRow * 14 & ")", "")

iCol や iRow は Integer 、Cel というのは String 型と思えば良いのでしょうか。

そしてそれぞれの変数には、具体的にはどんな値が入るのでしょうか。
たとえば仮に
 Cel = "F"
 iCol = 0
 iRow = 3
だと仮定すると、上記は
 .Pos(0, 49).Func( "=SUM(F47:F49)", "" )
 'Excel VBA でいうところの「.Range("A50").Formula = "=SUM(F47:F49)"」に相当。
という処理になるわけですが、この認識であっていますか?


で……先ほどの「すべて0だと」や「一つでも0以外の値」というのは、
iCol や iRow の値のことを言っておられるのでしょうか。

「取得した値を VB から Excel に出力」ということは、
計算結果の話では無いのですよね?
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[5]: vbからExcelの計算式が書かれた帳票を出力したい。 /ヒノザル →Re[7]: vbからExcelの計算式が書かれた帳票を出力したい。 /ヒノザル
 
上記関連ツリー

vbからExcelの計算式が書かれた帳票を出力したい。 / ヒノザル (24/04/11(Thu) 14:45) #103056
Re[1]: vbからExcelの計算式が書かれた帳票を出力したい。 / 魔界の仮面弁士 (24/04/11(Thu) 17:01) #103058
  └ Re[2]: vbからExcelの計算式が書かれた帳票を出力したい。 / 魔界の仮面弁士 (24/04/11(Thu) 17:50) #103059
    └ Re[3]: vbからExcelの計算式が書かれた帳票を出力したい。 / ヒノザル (24/04/17(Wed) 10:08) #103066
      └ Re[4]: vbからExcelの計算式が書かれた帳票を出力したい。 / 魔界の仮面弁士 (24/04/17(Wed) 12:34) #103067 解決済み
        └ Re[5]: vbからExcelの計算式が書かれた帳票を出力したい。 / ヒノザル (24/04/17(Wed) 16:04) #103068
          └ vbからExcelの計算式が書かれた帳票を出力したい。 / 魔界の仮面弁士 (24/04/17(Wed) 18:33) #103069 ←Now
            └ Re[7]: vbからExcelの計算式が書かれた帳票を出力したい。 / ヒノザル (24/04/19(Fri) 09:34) #103077
              └ Re[8]: vbからExcelの計算式が書かれた帳票を出力したい。 / 魔界の仮面弁士 (24/04/19(Fri) 10:19) #103080
                └ Re[9]: vbからExcelの計算式が書かれた帳票を出力したい。 / ヒノザル (24/04/22(Mon) 14:32) #103085 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信