■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#30271-0複数のCSVを一つのブックに取り込むには?たかはし2000-09-19(火) 23:28
     #30277-0RE#30271:複数のCSVを一つのブックに取り込むには?魔界の仮面弁士2000-09-20(水) 02:54
     #30346-0RE#30277:複数のCSVを一つのブックに取り込むには?たかはし2000-09-20(水) 23:45
     #30352-0RE#30346:複数のCSVを一つのブックに取り込むには?魔界の仮面弁士2000-09-21(木) 00:17
#30271-0
複数のCSVを一つのブックに取り込むには?
こんにちわ、いつも参考にさせていただいております。
わからない事があるので、教えていただければ幸いです。

VB6からEXCEL97のファイルを出力しようとしています。
はじめはセルにデータを貼り付ける方式(こんな感じ→.Cells(x,y) = "ABC")
で行っていたのですが、データの件数が多く性能が出ませんでした。

やり方を変えて、データを一旦CSVに吐き出して、
そいつをEXCELに取り込もうと思っているのですが、
以下の事柄が解りません。

複数のCSVを一つのブックに取り込むにはどの様にすれば良いか?
   a.csvを読込んだ後にb.csvを読込んだ場合、ブックが別になってしまいますが、
   これを同じブック内の別シートとする事はできないのでしょうか?
   (両方読込んだ後に片方のシートをもう片方のブックにコピーすればできると思いますが、
    できれば読込みの段階で一つのシートにまとめたい。)

以上、よろしくお願いします。
#30277-0
RE#30271:複数のCSVを一つのブックに取り込むには?
> VB6からEXCEL97のファイルを出力しようとしています。
> はじめはセルにデータを貼り付ける方式(こんな感じ→.Cells(x,y) = "ABC")
> で行っていたのですが、データの件数が多く性能が出ませんでした。
Cellsプロパティを使うと、処理は遅くなりますよ。

代わりに、Rangeプロパティを用いて、複数範囲を含むRangeオブジェクトへの参照を取得し、
そのValueプロパティに「配列を格納したVariant」を代入するようにしてみてください。
高速にデータを書き込む事ができるようになるはずです。

> やり方を変えて、データを一旦CSVに吐き出して、
# もし、データ型まで指定しながら読み込ませたいのであれば、
# CSVの代わりに、SYLK(*.slkテキスト)を使うという手もあるかも。

> 複数のCSVを一つのブックに取り込むにはどの様にすれば良いか?
元データがデータベースになっているなら、ODBC経由でエクセルファイルを操作すれば、
ワークシートをテーブルとみなして、SQL文で操作することもできます。
例えば、Access MDBから、Excel XLSに書き出すなら、
   SELECT * INTO [Excel 5.0;Database=C:\My Documents\TEST.XLS].[Sheet1]
     FROM テーブル1 WHERE 〜〜抽出条件〜〜;
のようなJet SQLを発行すれば済みます。
#30346-0
RE#30277:複数のCSVを一つのブックに取り込むには?
魔界の仮面弁士さん、いろいろ教えていただいてありがとうございます。
とても参考になりました。

> 代わりに、Rangeプロパティを用いて、複数範囲を含むRangeオブジェクトへの参照を取得し、
> そのValueプロパティに「配列を格納したVariant」を代入するようにしてみてください。
> 高速にデータを書き込む事ができるようになるはずです。
試してみたところ、かなり速くなりました。
 
> > やり方を変えて、データを一旦CSVに吐き出して、
> # もし、データ型まで指定しながら読み込ませたいのであれば、
> # CSVの代わりに、SYLK(*.slkテキスト)を使うという手もあるかも。
SYLK形式は今回初めて知りました。
たしかにデータ型まで指定できた方がいいのですが、
やはりシート単位になってしまうので、このやり方は今回はパスしようと思います。
 
> > 複数のCSVを一つのブックに取り込むにはどの様にすれば良いか?
> 元データがデータベースになっているなら、ODBC経由でエクセルファイルを操作すれば、
> ワークシートをテーブルとみなして、SQL文で操作することもできます。
> 例えば、Access MDBから、Excel XLSに書き出すなら、
>    SELECT * INTO [Excel 5.0;Database=C:\My Documents\TEST.XLS].[Sheet1]
>      FROM テーブル1 WHERE 〜〜抽出条件〜〜;
> のようなJet SQLを発行すれば済みます。
今回の場合、元データはデータベースから読み込み後に見出しやら小計やら編集したモノなので
DBから直接エクセルには出力できません。この方法は別の機会に活用させて頂こうと思います。
これをヒントにいろいろ調べてみたところ、CSVファイルをDBに見立ててエクセルに出力するってのが
できそうなんですが、どなたかやったこと有る方いらっしゃいますでしょうか?


いまのところ、範囲Rangeへの配列セットの方法で行なおうと考えていますが、
EXCELのISAMを使ってシートに出力ができるようなのでそちらも少し試してみようと思います。


最後に前回書き込みの訂正をします。
>   (両方読込んだ後に片方のシートをもう片方のブックにコピーすればできると思いますが、
>     できれば読込みの段階で一つのシートにまとめたい。)
できれば読み込みの段階で一つのブックにまとめたい。の誤まりでした。

以上
#30352-0
RE#30346:複数のCSVを一つのブックに取り込むには?
>>    SELECT * INTO [Excel 5.0;Database=C:\My Documents\TEST.XLS].[Sheet1]
>>      FROM テーブル1 WHERE 〜〜抽出条件〜〜;
>> のようなJet SQLを発行すれば済みます。
> 今回の場合、元データはデータベースから読み込み後に見出しやら小計やら編集したモノなので
> DBから直接エクセルには出力できません。この方法は別の機会に活用させて頂こうと思います。
> これをヒントにいろいろ調べてみたところ、CSVファイルをDBに見立ててエクセルに出力するってのが
> できそうなんですが、どなたかやったこと有る方いらっしゃいますでしょうか?
DAOやADOなど、ODBCを扱うことができるミドルウェアがあれば、
Text IISAM Driver/Excel IISAM Driverを使って、CSV/XLSファイルにアクセスできます。

# ISAM = Indexed Sequential Access Method
# IISAM = Installable ISAM

CSVの場合、ディレクトリがデータベースとみなされ、各ファイルはテーブルとして扱われます。
各列のデータ型指定には、同ディレクトリ上の SCHEMA.INI ファイルが参照されます。

XLSの場合、ワークブックファイル自体がデータベースとみなされます。
テーブルには、「ワークシート」「範囲を示す定義名」などを指定できます。


> いまのところ、範囲Rangeへの配列セットの方法で行なおうと考えていますが、
> EXCELのISAMを使ってシートに出力ができるようなのでそちらも少し試してみようと思います。
ISAMの場合、文字通りの「索引順次アクセス方式」なので、
例えば「C4のセルに"あいうえお"と記述したい」などという細かい指定は困難です。
(データの追加はできるが、削除をすることはできない…など)

それでもよければ、先と同様の記述でテーブルを指定すれば、扱うことができます。
詳しくは、Microsoft Knowledge Baseの、
    文書番号: J027190 
    [VB] CSV 形式で保存されたテキスト データへのアクセス方法
などを調べてください。
使っているのがJET SQLであれば、「IN句」を使って指定することもできます。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)