• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイル名のわからない複数のファイルをひとつにまとめる)

複数のファイルをまとめる方法とエクセルマクロの作成方法

このQ&Aのポイント
  • ファイル名のわからない複数のファイルをひとつにまとめる方法と、エクセル2000でマクロを作成する方法について教えてください。
  • フォルダ内のCSVファイルを開き、中のデータをひとつにまとめる方法とはどのようなものですか?ファイル数やデータの形式に制限はありますか?
  • エクセル2000でマクロを作成し、フォルダ内のCSVファイルを開いてデータを統合する方法について教えてください。マクロの記述方法や注意点なども教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

1.フォルダを取得し、どのCSVファイルをまとめるのか選択   できるようにする。 2.CSVの操作 (1)CSVをひとつにまとめたい (2)ある項目の列をKEY列としてKEY列を基準に重複しないように  したい。 という要件でよろしいでしょうか? まず、1.については次のようにしてはいかがでしょうか? メインメニューというシートをEXCELに一つ作成します。 次に「メインメニュー」のシートにボタン「CSV一括まとめ処理」 という名前で作成します。 VBAの画面に移り。 「メインメニュー」Object を選択します。 SUB CSV一括まとめ処理ボタン_click() end sub と表示していると思います。 そこに コードを記入します。 CSV一括まとめ処理ボタン_click() 処理には 画面(フォーム)呼び出すコードだけを記入します。 CSV一括まとめ処理フォーム.Show でフォームですが プロジェクトツリーにてユーザーフォームを挿入します。 画面には テキストボックス(dirText) とフォルダ選択ダイアログ起動ボタン と リストボックス(dirlistBox) ボタン(処理実行ボタン) の4個のオブジェクトを配置します。 でプログラムですが文字数(800文字)以内には入りきりませんので 簡単に申し上げます。 まず。フォルダの取得は左記のDirtextbox に入力するか フォルダ選択ダイアログ起動ボタンによるものとします。 フォルダ選択ダイアログは 以下のコードで簡単に取得できます。 Dim Fs as Object DIm Fd as Object SET FS = CreateObject("Shell.Application") SET FD=fs.BrowsForFolder(0,"フォルダを選択してください。",&h1,&h0) Csvのファイル名については  FSOを用います。 下記 Dim Fs as Object DIm Corfiles as Object Dim ObjFolder Dim StrFile as string Dim Cnm as string SET FS = CreateObject("scripting.FilesystemobJect") SET ObjFolder = FS.Getfolder(~指定されたパス) SET ObjFolder = ObjFolder.files StrFile =EMPTY Cnm=Empty For each ObjFiles In Corfiles   StrFile = strFile & Cnm & Objfile.Name   Cnm="," Next あとは取得したファイル名を split関数で 配列変数に変換し、 その値を リストボックス Dirlist の選択値としてデータ を追加します。 で1、の要件はこれで終わりです。 続きがあります。

ogange
質問者

お礼

回答ありがとうございます! NOBNNNさんの回答を参考にテキストなどを見ながら作成してみたのですが…、 すみません、VBA超初心者で基本的な知識が足りないため詰まってしまいました。。。 フォームを作成までは出来たのですが、フォルダ選択がわかりません。 Dim Fs as Object DIm Fd as Object SET FS = CreateObject("Shell.Application") SET FD=fs.BrowsForFolder(0,"フォルダを選択してください。",&h1,&h0) ↑コードをフォルダ選択ボタン(CommandButton1,Click)にコピペしたのですが、実行してみると 「実行時エラー'438'オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 と出てきてしまいます。 明日1日使って勉強しようと思いますが、よろしければ詳しくおしえていただけないでしょうか?

その他の回答 (2)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.3

>>SET FD=fs.BrowsForFolder(0,"フォルダを選択してください。",&h1,&h0) >>↑コードをフォルダ選択ボタン(CommandButton1,Click)にコピペしたのですが、実行してみると >>「実行時エラー'438'オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 >>と出てきてしまいます。 _______________________________________________________________ についてお答えします。 SET FD=fs.BrowsForFolder の パンチミスです。 正しくは SET FD=fs.BrowseForFolder でした。 ちなみに  SET FD=fs.BrowseForFolder(0,"フォルダを選択してください。",&h1,"C:\") とすると最初に表示されるディレクトリは C:\ になります。 詳細はマイクロソフトの http://www.microsoft.com/japan/technet/scriptcenter/scripts/storage/folders/stfovb01.mspx を参照してください。 Windows スクリプトについては スクリプト センター http://www.microsoft.com/japan/technet/scriptcenter/default.mspx を見るとより理解できると思います。 以上です。

参考URL:
http://www.microsoft.com/japan/technet/scriptcenter/scripts/storage/folders/stfovb01.mspx
ogange
質問者

お礼

ありがとうございます!! ゴールが見えてきたような気がします。がんばります。

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

NO1の続き フォーム上で、リストボックスが選択され。処理実行ボタンが押されたなら。 リストボックスの選択されているアイテムがなくなるまでループします。 ここで 本来の処理の2のCSVの処理について説明します。 まず、CSV ファイルやExcel シートは ADOを用いることにより テキスト形式のファイルにも同じようにSQLのクエリが使えます。 Google などで キーワード「ADO テキストデータ アクセス方法」 で検索してください。 なお、UDL を用いることによりディレクトリをMDBとみなし、 CSVファイルをテーブルとみなすようにできるようです。 またExcel シートも MDBとみなし SQLのクエリが使えます。 Google などで キーワード「ADO を使用して Excel ワークシートにクエリを実行する」 マイクロソフトの技術情報に掲載されています。 で検索してください。 テキスト形式についいてはまだ私も実験段階ですので詳細はお答えできませんが。Excel についてはある程度実験してみました。 今回は CSV ファイルを SQL で抽出するようにするにあたって まず csvファイルを一適当なワークディレクトリを作成し、そちらに このプログラムでXLSシートに変換します。ただしexelのBOOKは 一個にしてシートを追加する方法です。 それらを ADO接続で開き、 SQL で 次のようにすれば重複しないようにできます。 SELECT キー項目1 FROM [CSVファァイル名のシート名1$]     [CSVファァイル名のシート名2$]      Group By キー項目1 過去レスにもあります。 このサイトのQNo.2858699 高速で重複データを削除するには? に書かれています。

関連するQ&A