VBAでCSVファイルをテンプレートのBOOKに読み込む方法

このQ&Aのポイント
  • VBAを使用してCSVファイルをテンプレートのBOOKに読み込む方法について教えてください。
  • BOOK1のデータを集計してBOOK2を作成するためのVBAコードを作成したいです。
  • VLOOKUPやINDEX関数を使用せず、日付毎にファイルを読み込ませる方法について教えてください。
回答を見る
  • ベストアンサー

EXCEL VBAについて

VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 質問には書く必要なし。 ーー >上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 「読み込ませたい」とは普通そのまま読み込んで表示するときに使う表現ですので不適 ーーーー >集計する 加算していますか。してないのでは。 寄せ集めはしているようだが BOOK1で、同じ日付で例えば渋谷店は2行に出現する場合ありますか ?そこがコードを考える上で決定的に大事。 どうも無いような雰囲気? ーーー 結局、日付的に考えて縦に表示されるデータを横の日付流れに置き換えているだけか。 (ただし、同じ日の中で、並び順はBOOK2の並び順と同じようには出現しないようだが。 ーーー BOOK1に1日分データを追加されて、BOOK"にその1日分だけ追加すればよいように読めるがそれでよいか。 ーーー 下記はBook1、Book2のシートが同じブックのSheet1、Sheet2(結果を出すシート)にしてやってみたもの。 使うなら別ブックの例に修正のこと。 小数例なのでテストは十分でなく、上記から、質問の意図も十分把握 できているか心配だが、参考にしてください。 あくまでもMATCH関数など使った特殊1方法です。コード行数は他と比べ少ないはず。 ーーー 例データ Sheet1 ID 店名 売上 日付 1104567 渋谷店 190,809 11月21日 1102031 新宿店 209,808 11月21日 1103450 横浜店 108,765 11月21日 1104567 渋谷店 203,487 11月22日 1102031 新宿店 340,876 11月22日 1103450 横浜店 547,627 11月22日 1104567 渋谷店 122,333 11月23日 1102031 新宿店 223,455 11月23日 1103450 横浜店 355,556 11月23日 ーー Sheet2 ID 店名 11月21日 1104567 渋谷店 1102031 新宿店 1103450 横浜店 のように日付だけ第1行に入れて書きコードを実行する。 結果は ID 店名 11月21日 1104567 渋谷店 190809 1102031 新宿店 209808 1103450 横浜店 108765 次ぎの日は ID 店名 11月21日 11月22日 1104567 渋谷店 190809 1102031 新宿店 209808 1103450 横浜店 108765 の状態で(日付だけD2セルに入れて)実行する。 第2行E列以右にはデータなど一切入れ無いこと。 ーー 日付は日付シリアル値の入力になっていること。 Sheet2のC列以右の書式は(カンマ区切りなど)別途設定のこと。 標準モジュールに Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row 'MsgBox d c = sh2.Range("iv1").End(xlToLeft).Column 'MsgBox c dt = sh2.Cells(1, c) For i = 2 To d If sh1.Cells(i, "D") = dt Then 'MsgBox i r = WorksheetFunction.Match(sh1.Cells(i, "B"), sh2.Range("B1:B1000"), 0) 'MsgBox r sh2.Cells(r, c) = sh1.Cells(i, "c") End If Next i End Sub あえてMSGBOXはコメント化して残してます。 コメント化の’をはずして、実行時の動きを理解してください。

mimoule1998
質問者

お礼

sheet1のIDの列を昇順にした所、教えていただいたコードでうまくいきました! ただ、希望がありまして、 1、sheet1のデータを昇順にしなくて出来る方法はありますか? 2、SET sh1 =の部分をファイルを選択させるダイアログボックスを表示させて選択できますか? 3、日付を入力するセルを入力ボックスを表示させて入力させたいです。 無理を言ってすみませんが、ご教授お願いします。

mimoule1998
質問者

補足

ご回答ありがとうございます。 コードを実行してみたのですが、d=1566 c=3 I=emptyになっています。 コードの記述が違っていますでしょうか?

関連するQ&A

  • excel vba 作成について教えて下さい。

    excel VBAを使ってあるブックのセル範囲を別のブック(日報.XLS)のシートへコピー貼り付けをしたいのですが、コピーする側のブックがランダムに取り込まれ(例 8時間ピッチにて自動的にブックが作成される)そのブックを日にちごとに集計し、一か月ごとにまとめるということをやらなければなりません。 例)8時間ごとにフォルダが作成されます。   000001.XLS 000002.XLS   00000F.XLS ・・・・・・・・16進数にて   上記ブックのSheet1のA2:A11までの数値を別のブック(日報月報集計)のに貼り付ける。 別のブック(日報月報集計)は項目ごとに10個のシートがあり 8時間ごとのファイルのセルA2は別ブックのSheet1の日付けに対応するセルへ貼り付け B2は       Sheet2 上記操作を8時間ごと(可変可能)に自動的にコピー貼り付けをやりたいのですが ブック間のコピー貼り付け等わからないことが(初心者です。)多々あり、いろいろ調べてはいるのですが、STOPした状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

  • EXCELのVBAについて教えて下さい。

    VBA初心者です。 EXCEL操作は今まで何度もやっていて大体のことは分るのですが、この度、仕事の関係でマクロ、VBAを初めて使わなくてはいけなくなりました。早速はじめからつまずいています。どうか私にご教授くださればと思います。 やりたいことというのが、 (1)毎日の仕事として、まず、サーバーにあるデータを集計しcsvファイルとして保存します。 (2)そのcsvファイル(ファイル名:今日落としたファイルなら○○050620.csv)を××.xlsというファイルのワークシートにコピーします。 (3)その集計した表をピボットテーブルでさらに分りやすく分別。 (4)そのピボットテーブルからでてきた数字を××.xlsのSheet1の表のあてはまるところに数字をコピーし貼り付けていきます。 それによってグラフができます。 この操作の流れのうち(2)(3)(4)の部分をマクロニ組んでしまいたいのです。なかなかうまくいかないので良い方法を教えてください。ちなみにcsvファイルは毎日の作業なので年月部分のファイル名が毎日の日付が入ります。

  • Excel VBAに詳しい方教えてください。

    Excel VBAについて 下記内容をマクロを使ってできるようにしたいのですが、どなたかお力添えいただけませんか? 例えば、下記のような記載のファイルBook1があるとします。 A1セル内 名前 B1セル内 〇〇会社 C2セル内 〇〇部 D2セル内 〇〇係 この内容を別のファイルBook2へ転記したいのです。 ただし、Book2の列は下記のようになっており A列 名前(すでに入力されている) B列 会社名 C列 部 D列 課 E列 係 Book1の内容をBook2の下記の条件で正しいセルへ転記したいです。 -Book1で[部]で終わっているものはBook2のB列[部]に転記 -Book2ですでに入力されている名前の行に、Book1の情報を転記 ご協力のほど何卒よろしくお願いいたします。

  • エクセル2003VBA 新規ブックを作成、保存の時に

    いつも勉強させていただいております。 今回、VBAで以下の事をできるのかな?と思い質問させていただきました。 まず、VBAで以下の動作を作成しました。 Aファイル、データーベースCSVファイル Bファイル、VBA記述ファイル 1)Bファイルから、Aファイルを開いて、検索、条件に合うデーター を配列で抽出。 2)新規ブックを追加 3)新規ブックに抽出したデーターを書き出し と言うVBAを作成しました。 で、質問なのですが、新規ブックは保存するか、しないかがその時々に よって任意でするため、VBAで保存の所までは作成していないのですが 、保存する場合、ファイル名に規則性を持たせたいため、ファイル保存 をしたときに表示させる初期ファイル名をBファイルのVBAから変更 させる事はできるのでしょうか? 新規ブックを保存するとき、初期ファイル名は「Book1.xls」となって いると思うのですが、この値を変更することってできますでしょうか? もし可能であれば、ヒントや参考になるHPなど教えていただけないで しょうか。

  • エクセル内でのVBAの質問です。

    閲覧ありがとうございます。 エクセルの作業ファイルにてVBAのコードを作成しているのですが、中々思う通りに実行できないので、ご教授願います。 実行したい内容については以下の通りです。 ボタン1を押すと(添付画像上段のブック)、マイドキュメント内にある「データ転送ソフト2」という名前のブックを開き、そのブックのシート「A」内(添付画像下段)の、ボタン1を押したシートのF1セル(添付画像上段のブック)と同じ文字(日付)の列と"う"と入力された行の交差したセルの数値(添付画像下段の紫色のセル)をコピーして、ボタン1を押したシートのT4のセル(転送値1:の右隣にある薄緑のセル)に貼り付ける作業が行えるコードをご教授願いたいです。 要約しますと、作業しているシートのボタン1を押すと、別の場所にあるブックを開き、そのシート内の条件に沿った数値をコピーして、作業しているシートの指定されたセルに貼り付ける作業が行いたいです。 とても分かりにくい文章で申し訳ございませんが、お願いします。 可能ならば、コードの解説もつけてくださると嬉しいです。

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

  • エクセルVBAで作成できますか(2)

    質問No.9506691に関連して添付ファイルのようなVBAを作成したい。 1:日付と時刻が同じセルで10分毎に合計を出すことはできますか。  それとも日付と時刻は別々のセルにして算出する方がいいのでしょうか。 2:抽出する項目は先に作成しておいた方がいいのでしょうか。  VBAで表示させることはできますか。 どなたかアドバイスお願いします。

  • EXCEL VBA 複数ファイルの値を1つのファイ

    おせわになります。yakkunnと申します。 当方EXCEL VBAは素人なのですが、下記の処理を実現したく、恐れ入りますが、どなたかVBAコードをご教授いただけないでしょうか? ■やりたいこと デスクトップに集計.xlsxというファイルを作り、このファイルに「集計」というボタンを作成します。H4セルに4月とか入力させて(出来ればプルダウンで選択)、「集計ボタン」をクリックしたら以下の集計処理が動くVBAコードをご教授いただきたく思います。 ■実現したい処理 Cドライブ配下に[実績]というフォルダがあります。このフォルダにはA.xlsx~Z.xlsxという複数のファイルが存在します。(フォーマットは全て同じ) このファイルを1つずつ開き、B4セルに記入されている「月」が集計.xlsxのH3セルで指定された「月」と同じであれば、B7列より「コード」を読み込んでそれに対応したE列の金額も読み込みます。このコードを集計.xlsxのH7セルに転記、金額をK7列に転記、これをA.xlsxのB列のコードが存在するまで読み込んで、集計.xlsxのHセル、K列にどんどん転機したいのです。 この処理を[実績]フォルダの中の全ファイルに対して実施したいです。 最後に集計.xlsxのK列の最後に金額合計が出ると最高です。 分かりづらい説明で申し訳ございませんが、何卒よろしくお願いいたします。 イメージ図を添付いたします。 明日には動かさないといけなくなり困っております。。何とぞよろしくお願いいたします。 環境 windows10 Excel2019

  • EXCEL VBAでコピー元の選択をしたい時

    初めて「教えてgoo」を利用します。掲示板等も未だ利用したことがありません・・マクロの初心者です。 ★関数を使用する時、引数のセル範囲を選択するダイアログボックスのようなものはマクロで作れるのでしょうか。 要は、BOOK1のあるセルでBOOK2のデータの範囲をコピーしてきて貼り付けたいのです。常に同じ保存場所にある同じファイル名ならよいのですが、日々取得するデータのためできません。 作業はEXCEL2002で集計表を作成しています。 集計用ブック・集計結果の表示用(関数やマクロあり) データブック・日々取得するデータ(商品別に複数あり日々名前や保存場所も変わる) 取得するデータはFD数枚に保存されていて、集計用の各シートに貼り付けることによって、まとめのシートに集計が反映されるようにしてあります。   集計シートで「コピー元を選択してください」とダイアログボックスがでてきて、そこを関数の時のように範囲指定してOKすると、アクティブにしていたセルの所に貼りつく・・というものがつくりたいのです。 どなたかVBAにお詳しい方、お知恵をください。 検索方法が下手なのか、類似の質問も見つけられませんでしたし、本も何冊か買いましたがわかりませんでした。 よろしくお願いいたします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

専門家に質問してみよう