VisualBasic.NETでExcel帳票を作成するには?

解決


kuromaku  2004-07-16 16:30:41  No: 114875  IP: [192.*.*.*]

VBでExcel帳票を自動生成したいのですが可能でしょうか?

具体的には、
表の線を引いたり、チェックボックスをつけたり、右揃え、
セルの結合といったことがVBから操作可能でしょうか?

できれば帳票生成(Excel操作)製品を買わずに実現したいのです。

編集 削除
魔界の仮面弁士  2004-07-16 17:07:03  No: 114876  IP: [192.*.*.*]

・Microsoft Excelを使う(実行環境にExcelが必要)
・Excelクリエータを使う(ランタイムは無料、開発ライセンスは有料)

これらの方法を採用したくなければ、
・自前でBIFFデータを出力する。
  http://www.pleasuresky.co.jp/insidexl.php3
  http://homepage3.nifty.com/m-and-i/tips/tipspage.htm#xbiff
・自前でHTMLフォーマットのExcelファイルを出力する。
・自前でXMLフォーマットのExcelファイルを出力する。
・SYLKフォーマットを利用する。
といったところでしょうか。

編集 削除
kuromaku  2004-07-16 18:11:26  No: 114877  IP: [192.*.*.*]

ありがとうございます。

「Microsoft Excelを使う(実行環境にExcelが必要)」
で可能であれば作成してみたいのですが、
この方法だと
表の線を引いたり、チェックボックスをつけたり、右揃え、
セルの結合といったことがVBでできるということでしょうか?

コードのサンプル等載っているところをご存知であれば教えていただけないでしょうか?

編集 削除
魔界の仮面弁士  2004-07-16 18:50:01  No: 114878  IP: [192.*.*.*]

> コードのサンプル等載っているところをご存知であれば教えていただけないでしょうか?

オートメーション、という機能にあたります。さしあたっては、
  http://support.microsoft.com/default.aspx?scid=kb;ja;306022
  http://support.microsoft.com/default.aspx?scid=kb;ja;301982
  http://support.microsoft.com/default.aspx?scid=kb;ja;317109
あたりが参考になるでしょう。

具体的な Excel の操作方法に関しては、Excel 付属の VBA のヘルプを
参照してください。(なお、標準インストールでは、VBAのヘルプは含まれません)

どのように書けば良いのかわからない場合は、とりあえず、Excelを
起動して、[ツール]-[マクロ]にてマクロを記録し、
セルへの入力や、書式設定作業を記録してみてください。
(マクロ記録後、Alt+F11にて、コードの編集画面を呼び出せます)

「マクロの記録」で記録されるコードは、VB.NETではなく、VBAのコードですが、
どのような処理を行うときに、どのようなメソッドを使えば良いかを
逆引きするには、役に立つと思います。

# ただし、自動記録されるコードは、手続きが曖昧だったり、また、
# コードが冗長だったりしますので、そのまま使うのではなく、
# ある程度、手を加える必要があるかも知れません。

編集 削除
魔界の仮面弁士  2004-07-16 19:15:30  No: 114879  IP: [192.*.*.*]

ちなみに罫線の操作は、Borderオブジェクトにて行えます。
Borderには、セル範囲を示す「Rangeオブジェクト」の
Bordersプロパティ経由でアクセスできます。

以下は、以前、罫線についてまとめた資料です。VB.NET用の
資料ではないので、一部、VB6/VBA/VBScript向けの記述も
ありますが、適当に読み変えてください。
http://www.ocv.ne.jp/~oratorio/windev/Excel/ExcelLine.xls

チェックボックスについては、
  Set objCheckBox = objWorkSheet.CheckBoxes.Add(0, 0, 100, 20)
  objCheckBox.Name = "CheckBox1"
  objCheckBox.Caption = "テスト"
  objCheckBox.Value = 1
という感じで制御できます。

右寄せは、RangeオブジェクトのHorizontalAlignmentプロパティで行えます。

セルの結合は、RangeオブジェクトのMergeメソッド、または、
RangeオブジェクトのMergeCellsプロパティを使ってみてください。

編集 削除
kuromaku  2004-07-19 17:23:43  No: 114880  IP: [192.*.*.*]

ご丁寧に解説いただきありがとうございます。

実際にやってみましたところ、
確かに作成することができました。

「マクロの記録」で記録したコードの手続きを参考にすると
いうのは大変便利ですね。今後活用させていただきます。

ありがとうございました。

編集 削除