none
VB2005でExcelを操作したいのですが RRS feed

  • 質問

  • よろしくお願いします。こちらで質問してよいのかわからなかったのですが違っていたらすみません。

    開発環境はVB2005、データベースはAccess2003、Windowsアプリを開発しています。

    表題のとおり、Vb2005からExcelの操作をしたいと思っているのですが、構想していることが実現できるものなのか知りたくて投稿しました。

    データベース1  日付、氏名、商品コード、個数 の4列があります。

    ユーザーの指定した月のデータだけを、指定したExcelファイルの(sheet1)に出力。Excel(sheet2)には、あらかじめ表を作成しておき、該当するセルに、氏名や商品コード、個数を自動的に表示したい。又は、直接(sheet2)に出力&表示したい。と思っています。だいたいのプロセスをお教えください。VB2005にExcelを参照設定してあります。

     

    仮に、この構想でアプリが完成したら、このあらかじめ作成しておいたExcelファイルもユーザーのパソコンにインストールされるんでしょうか?

     

    2006年11月6日 13:52

回答

  • momo-yo さん、こんにちは。

     momo-yo さんからの引用
    だいたいのプロセスをお教えください。

    とのことですが、いくつか方法がありますので、まずは手法だけでも決定しないと説明のしようがないです。

    1. Office PIA を利用する
    2. VSTO を利用する
    3. Office PIA から Excel のマクロを呼び出して Excel 側で処理する

    私の最近のお勧めは 3 です。
    COM の参照カウントの解放が楽だという理由ですが。

    仮に、この構想でアプリが完成したら、このあらかじめ作成しておいたExcelファイルもユーザーのパソコンにインストールされるんでしょうか?

    コンピュータが人工知能を搭載しない限り、Excel ファイルが勝手に配置されることはないです。
    インストーラでそういった設定にしておけば、配置されますが。

    2006年11月6日 15:47
  • momo-yo さん、こんにちは。

     momo-yo さんからの引用
    「COMの参照カウントの解放」という言葉を始めて知りました。何か難しそうなのですが、普通にExcelでマクロを作って、呼び出して実行する、という作業だけではだめだということでしょうか?

    マクロを使わずに VB 側で処理をしようとするとこういう目に遭います。

    COM オブジェクトを解放する

    マクロに委譲するパターンであれば、これが、2 ネストくらいまで減ります。

    アプリ完成の際のことですが、インストーラでの設定は難しいのでしょうか?

    インストーラにも因りますが、難しくはないです。

    特定のExcelファイルを指定しておくのはあまり良い手法ではないのでしょうか?

    ソリューションとして必要なファイルなのですから、良い手法ではないとは言えないと思います。

    2006年11月7日 2:21
  •  処理するデータが多いと VB側で処理させると 驚くほど遅くなる(私だけでしょうか) マクロにやらせた方が
    格段に早くなります

     >特定のExcelファイルを指定しておくのはあまり良い手法ではないのでしょうか?
    このExcelが プログラムを実行するたびに中身が入れ替わるものであれば わざわざインストールせずに その都度
    新規で作成するプログラムにすれば良いし 中身が残って新しいデータが足されていくものでユーザー毎に必要なものであれば
    インストールすれば良いです また ネットワーク上でひとつあれば良いものなら どこかにひとつ配置しておけば良いかと思います。

     

     

     

    2006年11月7日 3:35
  • momo-yo さん

     momo-yo さんからの引用
    VB.NETでも処理ができるけど、Excelオブジェクトの知識がかなり求められそうなのでマクロで処理させようと思います。

    いや、Office PIA + VB.NET でも VBA でも、オブジェクト ツリーはほぼ一緒です。
    VB.NET からの場合は、COM の参照カウントに関する手間が加わるというイメージで良いでしょう。

    かずbooさんの書込みにもあるのですが、毎回データがかわるのでインストールをする必要がないかも、と思っています。

    そうですね。
    Excel はアプリケーション起動のコストは高いですが、Workbook 作成 (Workbooks.Add メソッド) のコストはそれほど高くありません。

    デプロイ (配置) については、完成に近づいてから、いろいろ検証して決定するのも良いと思いますよ。

    2006年11月7日 5:56
  • すべての返信

    • momo-yo さん、こんにちは。

       momo-yo さんからの引用
      だいたいのプロセスをお教えください。

      とのことですが、いくつか方法がありますので、まずは手法だけでも決定しないと説明のしようがないです。

      1. Office PIA を利用する
      2. VSTO を利用する
      3. Office PIA から Excel のマクロを呼び出して Excel 側で処理する

      私の最近のお勧めは 3 です。
      COM の参照カウントの解放が楽だという理由ですが。

      仮に、この構想でアプリが完成したら、このあらかじめ作成しておいたExcelファイルもユーザーのパソコンにインストールされるんでしょうか?

      コンピュータが人工知能を搭載しない限り、Excel ファイルが勝手に配置されることはないです。
      インストーラでそういった設定にしておけば、配置されますが。

      2006年11月6日 15:47
    • じゃんねっとさま、こんにちは。

      手法がいくつもあるとのことで失礼しました。私が思っていたのは、じゃんぬねっとさまお勧めの「3」です。

      「COMの参照カウントの解放」という言葉を始めて知りました。何か難しそうなのですが、普通にExcelでマクロを作って、呼び出して実行する、という作業だけではだめだということでしょうか?

      アプリ完成の際のことですが、インストーラでの設定は難しいのでしょうか?特定のExcelファイルを指定しておくのはあまり良い手法ではないのでしょうか?まだずーっと先のことですが、気になります。

       

       

       

      2006年11月7日 1:29
    • momo-yo さん、こんにちは。

       momo-yo さんからの引用
      「COMの参照カウントの解放」という言葉を始めて知りました。何か難しそうなのですが、普通にExcelでマクロを作って、呼び出して実行する、という作業だけではだめだということでしょうか?

      マクロを使わずに VB 側で処理をしようとするとこういう目に遭います。

      COM オブジェクトを解放する

      マクロに委譲するパターンであれば、これが、2 ネストくらいまで減ります。

      アプリ完成の際のことですが、インストーラでの設定は難しいのでしょうか?

      インストーラにも因りますが、難しくはないです。

      特定のExcelファイルを指定しておくのはあまり良い手法ではないのでしょうか?

      ソリューションとして必要なファイルなのですから、良い手法ではないとは言えないと思います。

      2006年11月7日 2:21
  •  処理するデータが多いと VB側で処理させると 驚くほど遅くなる(私だけでしょうか) マクロにやらせた方が
    格段に早くなります

     >特定のExcelファイルを指定しておくのはあまり良い手法ではないのでしょうか?
    このExcelが プログラムを実行するたびに中身が入れ替わるものであれば わざわざインストールせずに その都度
    新規で作成するプログラムにすれば良いし 中身が残って新しいデータが足されていくものでユーザー毎に必要なものであれば
    インストールすれば良いです また ネットワーク上でひとつあれば良いものなら どこかにひとつ配置しておけば良いかと思います。

     

     

     

    2006年11月7日 3:35
  • じゃんぬねっとさま、お返事ありがとうございました。

    マクロを使えば、処理がしやすくなるんですね。投稿した後に色々調べてみました。VB.NETでも処理ができるけど、Excelオブジェクトの知識がかなり求められそうなのでマクロで処理させようと思います。

    インストーラでの設定は、アプリができてから、わからない点を質問させていただきます。

    かずbooさんの書込みにもあるのですが、毎回データがかわるのでインストールをする必要がないかも、と思っています。

    色々と教えていただいてありがとうございました。何から手をつけてよいかわからなかったのでとても参考になりました。

    2006年11月7日 4:34
  • かずbooさまこんにちは、返信ありがとうございました。

    じゃんぬねっとさまの返信にもありましたが、マクロにやらせたほうが良いみたいなので、そうします。

    Excelなんですが、実行するたびに中身のデータがかわるので都度作成、という方向で開発しようと思います。Excelに出力するために、ファイルを指定しなければならないと思っていたのでとても勉強になりました。このたびはありがとうございました。

     

    2006年11月7日 4:39
  • かず boo さん、こんにちは。

     かずboo さんからの引用
    処理するデータが多いと VB側で処理させると 驚くほど遅くなる(私だけでしょうか) マクロにやらせた方が格段に早くなります

    仰るとおりだと思います。

    繰り返し処理をやっていると情緒に現れます。
    まあ PIA からは余計な手順がありますから、当然といえば当然かもしれませんが。

    2006年11月7日 5:53
  • momo-yo さん

     momo-yo さんからの引用
    VB.NETでも処理ができるけど、Excelオブジェクトの知識がかなり求められそうなのでマクロで処理させようと思います。

    いや、Office PIA + VB.NET でも VBA でも、オブジェクト ツリーはほぼ一緒です。
    VB.NET からの場合は、COM の参照カウントに関する手間が加わるというイメージで良いでしょう。

    かずbooさんの書込みにもあるのですが、毎回データがかわるのでインストールをする必要がないかも、と思っています。

    そうですね。
    Excel はアプリケーション起動のコストは高いですが、Workbook 作成 (Workbooks.Add メソッド) のコストはそれほど高くありません。

    デプロイ (配置) については、完成に近づいてから、いろいろ検証して決定するのも良いと思いますよ。

    2006年11月7日 5:56
  • じゃんぬねっとさま、返信ありがとうございました。

    いや、Office PIA + VB.NET でも VBA でも、オブジェクト ツリーはほぼ一緒です。
    >VB.NET からの場合は、COM の参照カウントに関する手間が加わるというイメージで良いでしょう。

    オブジェクトはほぼ同じなんですね^^;過去にやったBVAを思い出しつつ、新たに勉強しなおします。

    今回もたくさんアドバイスをしてくださってありがとうございました。やりたいと思っていることがだんだんと形になってきたので頑張りがいがあります。

    2006年11月7日 7:36
  •  momo-yo さんからの引用

    じゃんぬねっとさま、返信ありがとうございました。

    いや、Office PIA + VB.NET でも VBA でも、オブジェクト ツリーはほぼ一緒です。
    >VB.NET からの場合は、COM の参照カウントに関する手間が加わるというイメージで良いでしょう。

    オブジェクトはほぼ同じなんですね^^;過去にやったBVAを思い出しつつ、新たに勉強しなおします。

    今回もたくさんアドバイスをしてくださってありがとうございました。やりたいと思っていることがだんだんと形になってきたので頑張りがいがあります。

    私も Excelには結構苦労しましたが じゃんぬねっとさんのところをかなり参考にさせて頂いて今に至っております(他の面でも)
    http://jeanne.wankuma.com/tips/

    面白くなってきたと思いますのでがんばってください
    私で分かる事なら いつでもアドバイスさせていただきます。

    2006年11月7日 11:07