前提
今月からVBAを仕事で使うことになりました。
約10万行ほどのレコードが記載されているCSVファイルが3つあるのですが、そのファイルを組み合わせて1つにまとめたいです(内容としては、FULL OUTER JOINのようなことをしたい)。
使用できる言語はVBAで、MYSQLなどの外部のデータベースやAccessなどは使用できない環境です。
1人で仕事を行っていることとVBA自体が初心者である為、仕様の段階で躓いております。。
実現したいこと
以下のようなデータがファイル毎に3つあります。実際には1つのファイルにデータが約10万件あります。
また、カラム数やカラム名もその時々により変化します。
IDはユニークとなります。
この3つのファイルをジョインし、以下のデータに加工したいです。
加工内容としてはFULL JOINにあたります。
相談したいこと
実際にプログラムを作成するにあたり、どのような方法で進めていくのがベストなのか判断できずにいます。
考えつくベストな方法があればご教授いただきたいです。
ちなみに、自分なりに2つの案を考えてみました。
案①:以下URLでの情報を参考にし、シートをデータベース化する方法
【VBA】ADOを使用してExcel表をDB操作する方法のまとめ(範囲指定、書き込みなど)
手順
⑴ 3つのファイルに書かれているテーブルをVBAを使用し1つのファイルまとめる。
Worksheetを3つに分け、1Worksheetにつき1つのテーブルに振り分ける。
⑵ URLに書かれているようにVBAでSQLを操作し、FULL OUTER JOINコマンドを実施。
⑶ SQLで出力した結果を新たなシートを作成し、書き出す。
案②:データベース化せずにVBAのみで処理を行う方法
手順
⑴ 3つのファイルに書かれているテーブルをVBAを使用し1つのファイルまとめる。
Worksheetを3つに分け、1Worksheetにつき1つのテーブルに振り分ける。
⑵それぞれのテーブルのID値を3つのテーブルのIDを配列にし、重複の値を除去する。
⑶新たにWorksheetを用意し、A列にIDの配列をループ処理し出力していく。
⑷wearテーブルのカラム名を取得し、1行目に貼り付ける。
⑸wearテーブルのデータを取得し、セル毎に条件式(IDと合致するデータがあるかどうか)に合致すれば貼り付ける。
⑹上記の⑷⑸をoralテーブル、gadgetテーブル共に実行し、貼り付けていく。
・処理の高速化
・運用しやすい
上記2点を意識した上で私自身が理解しやすい方法としては、
データベース化する案①が有力だと考えています。
案②は1セル毎に条件式で出力するのはあまりにも時間がかかりそう、またコードが複雑になりそうだと考えています。
しかし、実際に案①で実現させることができるのか、また自分が思いつかないだけでもっと他にもベストな方法があるのではないかとも思っています。
事実データベース化するという案は当初考えつかず、ネットでひたすらググったところたまたま発見しました。
自分なりに考えた案①案②ですが、実際には実現不可能な方法なのではないかという心配もあります。
是非、知見のある方に相談とお力添え頂きたいです。

回答3件
あなたの回答
tips
プレビュー