• ベストアンサー

.NET エクセルで除算するには?

いつもお世話になっています。 下記環境でエクセルを出力するシステムをつくっています。 開発環境 : WindowsXP       office2003 言語   : VB.NET 出力時にエクセル上で除算してパーセンテージを表示、 分子または分母がない場合は「0」と表示、 しようとしているのですが、どうしてもエラーをはいてしまいます。 コードは、下記の通りです。 エクセル上ではうまくいくのですが、コードはNGでした。 IF(OR(" & A1 = 0 & "," & A2 = 0 & ",0," & A2 / A1 * 100 & ")" ご存知の方がおりましたら、ご教示御願いいたします。

noname#117866
noname#117866

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 #1以降、レスが付かないようですから、少し書かせていただきます。 一応、変数の宣言から、Excelのオートメーションの取得、End Subの最後まで書いていただいたほうがよいのでは? それと、Excel上でうまくいく行かないというよりも、 IF(OR(" & A1 = 0 & "," & A2 = 0 & ",0," & A2 / A1 * 100 & ")" VB.Net 上で、どうこうよりも、Excelに数式を書き出す目的なら、丸々文字列数式するしかないと思います。 その数式では、A1 = 0 も A2 = 0 も、VB上の変数でしかありません。

noname#117866
質問者

お礼

ご返信が遅くなり申し訳ございません。 ご回答ありがとうございました。 >一応、変数の宣言から、Excelのオートメーションの取得、End Subの>最後まで書いていただいたほうがよいのでは? →そうですね。別途ご質問させていただきます。 >VB.Net 上で、どうこうよりも、Excelに数式を書き出す目的なら、 >丸々文字列数式するしかないと思います。 >その数式では、A1 = 0 も A2 = 0 も、VB上の変数でしかありません。 →そうなんです。今回のA1、A2は変数の意味のつもりだったのですが、急いで投稿してしまい、正しくお伝えできなかったんです。 申し訳ございません。 今回は、Excelに数式を書き出す方法ではなく、 VB上で計算するように変更することとしました。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>IF(OR(" & A1 = 0 & "," & A2 = 0 & ",0," & A2 / A1 * 100 & ")" はワークシート上の関数の形を書いたものですか。 こんな式の書き方は見たことが無い。 エクセルのセルに手打ちで式を入れる場合は =IF(OR(A1=0,A2=0),0,A2 / A1 * 100 ) のはずですが、VBAの世界へ入ってきての話なら、IF文で両セルが0かどうか判断できるでしょうし、 Sub test01() Range("C3").Formula = "=IF(OR(A1=0,A2=0),0,A2 / A1 * 100 )" End Sub でエクセルではうまくいくようですからRange("C3").のオブジェクトの特定を旨くやればうまくいくと思いますが。 Application-WorkBook-Worksheet-Rangeの階層を.をつけてコード上指定すれば。

noname#117866
質問者

お礼

お礼が遅くなり申し訳ございません。 .NET初心の為、正しく伝えきれていませんでした。 ひとまず、VB上での実計算で解決させるに至りました。 ありがとうございました。

noname#117866
質問者

補足

ご回答ありがとうございます。 今回はVBAの世界へ入ってきての話になるのですが、 >Range("C3").Formula = "=IF(OR(A1=0,A2=0),0,A2 / A1 * 100 )" で試したのですが、どんな数字でも FALSE で返ってきてしまいます。 なぜでしょう?? ちなみに、 A1,A2は数字として存在しており、DECIMAL型です。 表示したいエクセルのセルの書式設定は標準です。 もしよろしければ、解決策を教えていただけると大変たすかります。 よろしくお願い致します。

関連するQ&A

  • エクセル ゼロ除算のエラー

    エクセルで#DIV/0! とでてしまいます。 (ゼロで除算している。ゼロを分母に使っている。) 「0で割った場合0を表示」するにはどうしたらいいのでしょうか? 「A1~A3をたしてA4に表示→B1にA1÷A4の式を入れて、もしA4がゼロだった場合(もちろんA1~A3もゼロ)」 の例で教えてください。

  • エクセルのパーセンテージを求める計算

    エクセルでパーセンテージを求める計算をしたいのですが、 下記のような数値を求めるにはどのような式を入力したらよいでしょうか? 求めたい数値は、 「セルA1に対してB1の数値が、A1の値と比べて何パーセント増減したか。」 です。 =IF(ISERROR(B1/A1),"",B1/A1)-1 っていうのは間違っていますよね? また、分母もしくは分子が0になる場合に、 「#DIV/0」を表示させたくない場合はどうしたらよいでしょうか? 初心者で申し訳ありませんが、よろしくお願い致します。

  • Excelの内容がVBにうまく反映されない

    すみません、下記の内容で困っていまして、 どうにかお力をお借りしたいと思います。 開発言語:VB2008、Excel2003 内容:Excelでは改行してあるのですが、    そのセルを読み込んだときに    VBではそのまま引っ付いて    表示されてしまう状態です。 例:エクセルのB2セルの入力内容   あいうえお   かきくけこ   VBのTextboxでの表示内容   あいうえおかきくけこ のようになります。 記述したコード TextBox4.Text = exSheet.Cells(2, 2).value 以上、宜しくお願いします。      

  • EXCELを閉じる

    VB6.0とACCESS2000で開発しています。 ACCESS2000のデータをEXCELへ表示しています。 しかし コマンドボタンクリック ACCESSデータをEXCELへ出力 EXCELを表示 として EXCELの×ボタンをクリックしてEXCELを閉じても タスクマネージャーのプロセスは閉じていません。 また コマンドボタンクリック ACCESSデータをEXCELへ出力 EXCELを表示 EXCELを閉じる とした場合も残ってしまいます。 VB6.0で作ったプログラムを閉じると EXCELは閉じます。 出来ればEXCELの×ボタンをクリックした時に 閉じて欲しいのですが・・・。 よろしくお願いします。

  • VB.NET操作で Excelにビットマップ貼り付け

    下記の環境で開発しています。 VB.NET 2005/XP(sp2)/Excel2003(sp2) ビットマップをExcel2003に貼り付けたいのですが、どなたか手法ご存知ないでしょうか? 画像ファイル(Bitmap)→画面に表示→Excelに画像ファイル(Bitmap)を出力といったイメージなのですが… ※Excelを起動して、名前を付けて保存は今のところ上手くいってるようです。

  • VB2005でのエクセルへのデータ出力

    タイトルどおりなのですが、DBからマスタのデータを単純にエクセルに出力するだけなのですが、どういったやり方が一番高速に処理できるのでしょうか? マスタのデータをデータテーブルに取得して、データテーブルをループさせながら、1レコードごとにエクセルに出力するようなやり方しか思いつかないのですが、もっと効率的で高速に処理できる方法があれば教えて下さい。 ちなみに、エクセルは新規ファイルではなく1行目にマスタのテーブルのカラム名を記述している既存ファイルのエクセルに出力していく形になります。 画面の動作としては、マスタメンテの画面にある「出力」ボタンをクリックすることで、ファイルダイアログを表示して保存先を決めたら、出力開始というイメージです。 できれば、サンプルコードなどあれば有難いです。 宜しく、お願いします。 開発環境: OS:WinXP SP2 DB:Oracle 10g(?)、すみません。バージョンまであってるかは不明です。 言語:VB2005Pro Excel:Excel2000

  • エクセルについて

    エクセルの表計算について質問です。 Aの列に分母。B列に分子を入力し、C列にA、Bの割合を表示させたいのですが、C列にどのような操作をすればよいのでしょうか? AとBに数字を入れるだけで、C列が表示されるようにしたいです。 エクセル初心者で申し訳ありません。よろしくお願いします。

  • エクセル割り算

    エクセル2002です。関数割り算で分母のセルが変わってしまいます。 例: 関数設定 分子:C2 分母:B2 関数C2/B2をC3に設定 WINNDOWS再起動しファイル開くとC3の関数の分母だけが変わる。(C2/A2) A2は以前分母に関数設定したことあります。 エクセル壊れたのでしょうか?

  • ACCESS、EXCELの限界?

    ACCESS、EXCELで表示できる列数の限界について教えて下さい。 VBからの操作で、Oracleのテーブルの内容をACCESSで表示する仕組みを考えています。 Oracleのテーブルの列数が350近くもあり、ACCESSで表示することができません。CSVで出力したとしても、Excelで表示できません。どちらも255以上の列は表示できないようでした(256列以上は途切れて表示される)。 となると、Oracleのテーブルの内容をVBのグリッドに表示するしか方法はないでしょうか? もしそれしか方法が無いようであれば、グリッドに表示するか、ビューか何かを使用して表示列を絞り込む(これは最終手段にしたいです)かどちらかにしなければなりません。 一番いいのは、そのままACCESSに表示することなんですが。テキストで延々と出力するだけでは、データの編集がやりにくいので困っています。 よろしくお願いいたします。 開発環境は、Win2000(SP2)、Oracle8.1.6、VB6.0(SP3)、OFFICE2000(SR-1、SP2)です。

  • DAO3.6とACCESSの関係

    OS:WindowsXP, Windows7 開発言語:VB6、Excel VBA ACCESSがインストールされていない環境で VB6やExcel VBAでDAO3.6を使った開発は可能ですか? また、 ACCESSがインストールされていない環境に VB6やExcel VBAでDAO3.6を使ったプログラムは配布可能ですか? ご存知の方がいたら教えて下さい。宜しくお願いします。

専門家に質問してみよう