tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelで複数シートの操作について
記事No13560
投稿日: 2009/04/02(Thu) 17:27
投稿者えり
はじめまして、えりといいます。
時々掲示板やツールなどを利用させて頂いています。
1年ほどVBの勉強?を行っています。

今回どうしても分からない事があり、ご教示をお願い致します。

バージョンは以下になります。
OS:Windows 2000 SP4
VB:6.0 SP3
Excel:2000 SP1

標題の件なのですが、
現在、AccessデータをExcelに出力する処理を作成しています。
Accessのレコード件数は約1万件程です。
このAccessレコードを順次Excelの該当セルに出力していくのですが、
シートが1つだけの処理ではサイトを参考にさせて頂き、上手く作成することが出来ました。

ここで疑問なのですが、
これを複数シートに出力したい場合の流れとしては

1、シート1にデータを出力
2、シート1のワークシートオブジェクトをNothing
3、シート2のワークシートオブジェクトをSet
4、シート2にデータを出力

以外で方法は無いのでしょうか?

対象Accessデータが同じ場合、Accessデータを何度も読み込むのが無駄なので
お手数ですが、良い方法があればご教示をお願い致します。

[ツリー表示へ]
タイトルRe: Excelで複数シートの操作について
記事No13561
投稿日: 2009/04/02(Thu) 18:32
投稿者オショウ
OleDbで、エクセルファイルをデータベースに見立てて
アクセスからエクセルに出力できますが・・・
その方が断然速度が速いかと。

エクセルのシートが、データベースで言うテーブルに
なります。

どの程度のシート数かは、アクセスのテーブルから、
group by してまとめてやればシート数は最初に解りま
すし、エクセル側に先にシートをすべて作っておいて
後は、アクセスから1件づつデータを取り込んで、何
らかのフィールドで判定して各シートにinsertして行
く・・・

これならアクセス側を何度も読まないで可能かと。

ご検討下さい。

以上。

[ツリー表示へ]
タイトルRe^2: Excelで複数シートの操作について
記事No13563
投稿日: 2009/04/03(Fri) 11:08
投稿者えり
オショウ様、返信有り難う御座います。

> OleDbで、エクセルファイルをデータベースに見立てて
> アクセスからエクセルに出力できますが・・・
> その方が断然速度が速いかと。

私の持っている教科書にはOleDbの事が載っておらず、
ネットで色々調べたのですが、意味が良く分かりませんでした・・・

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9812/vb6da/
http://www.agtech.co.jp/html/v9manuals/oledb/oledb-4-02.html

あと、私の勘違いでAccessのテーブルと思っていたのは実際は
OracleのDBのリンクテーブルで、データを作成する処理はOracleで処理していました。
学校の春休みの課題なのですが、Excelファイルにデータを出力する所だけを作成するので
その他の処理や環境を理解していませんでした。申し訳御座いません。

それで、わがままな御願いなのですが、何とかこのサイトの
http://hanatyan.sakura.ne.jp/vbhlp/excelframe.htm
の様にオブジェクトを宣言して、複数のシート(生徒数なので固定です)に
出力する事は出来ないのでしょうか。

勉強不足で御迷惑をお掛けしていますが、ご教示をお願い致します。

[ツリー表示へ]
タイトルRe^3: Excelで複数シートの操作について
記事No13564
投稿日: 2009/04/03(Fri) 11:54
投稿者るしぇ
> 私の持っている教科書にはOleDbの事が載っておらず、
> ネットで色々調べたのですが、意味が良く分かりませんでした・・・
ごくごく簡単に説明すると、
> それで、わがままな御願いなのですが、何とかこのサイトの
> http://hanatyan.sakura.ne.jp/vbhlp/excelframe.htm
> の様にオブジェクトを宣言して、複数のシート(生徒数なので固定です)に
> 出力する事は出来ないのでしょうか。
そのリンク先にある『DAOを使って〜』あたりの話と同じ内容です。
使うオブジェクトが ADO なだけ。

基本は RecordSet と呼ばれるデータの入れ物にデータベースのデータを
コピーしてくるだけなので、勉強するほどの内容ではないです。扱う
オブジェクトの違いで方言みたいな違いがあるので、定型のサンプル
コードに従ってコーディングするときに、自分がどのオブジェクトを
使ってるか気をつけるだけ。

ただ、オショウさんの助言は更に、データベースを検索時に一般的に
使用される SQL を Excel のシートをテーブルに見立てて。。。
[HOWTO] Visual Basic または VBA から ADO を Excel データで使用する
http://support.microsoft.com/kb/257819/ja
ってことかな。

少し Excel のオブジェクトとデータベース検索に慣れないと混乱するかな?
って部分もあるにはあるけど、えりさんご質問の内容とさほど変わらないと
いうか、手法が0.5くらい違う程度の内容です。わがままに回答するなら
『回答済み』と言えなくも無いので、また勉強しておいてください。

で、そもそも、データベースの検索で使うオブジェクトと Excel のオブジェクトは
別々の存在なので、質問自体が的外れな気もします。
データベースの検索で使うオブジェクトを保持したまま、Sheet1 でも
Sheet2 でも出力すればいいわけで、ワークシートオブジェクトをNothing
とか。。。あまり関係ない内容です。

とりあえず、どの手法を使ってどこまでできているのか具体的な説明が
無いですよね?
> シートが1つだけの処理ではサイトを参考にさせて頂き、上手く作成することが出来ました。
これは先のリンクの『DAOを使って〜』で Recordset にデータを取得できていると
考えて良いですか?(※色々な手法があるので、何をしたのか限定できる情報が欲しいです)
Sheet1 と同じデータを Sheet2 に出力するので良いですか?

1、Recordset にデータを取得(Access(Oracle)データ読込み)
2、シート1にデータを出力
3、シート2にデータを出力

これだけです。…何の問題があるんでしょうか?

[ツリー表示へ]
タイトルRe^4: Excelで複数シートの操作について
記事No13581
投稿日: 2009/04/08(Wed) 16:17
投稿者えり
るしぇ様、返信有り難う御座います。

また、返信が遅くなり申し訳御座いませんでした。
ご教示頂いたURLなどを読んで色々調べてたのですが、
私のバカな頭では理解が・・・

プログラミングは難しいですね。挫折しそうです。
愚痴っても仕方がないのですが・・・

結局、学校の先生に泣き付いて教えてもらいました。
出来上がった処理を確認すると
るしぇ様にご教示いただいた

>1、Recordset にデータを取得(Access(Oracle)データ読込み)
>2、シート1にデータを出力
>3、シート2にデータを出力

と同じ事でした。難しく考えすぎていたのと勘違いをしていました。
申し訳御座いません。

オショウ様、るしぇ様本当に有り難う御座いました。

[ツリー表示へ]