VBAで別のエクセル内の値を取り込む方法

このQ&Aのポイント
  • VBAを使用して、エクセルファイル内の特定のシートを別のエクセルファイルのシートに一括で取り込む方法について教えてください。
  • エクセルファイルに格納されている複数のシートからデータをアクセスに一括で取り込む方法をVBAで実現したいです。
  • VBAを使って、30〜50のエクセルファイルにある特定のシートを一つずつアクセスへエクスポートする方法を教えてください。
回答を見る
  • ベストアンサー

VBAでエクセルに別のエクセル内の値を取り込む

前提: ・あるフォルダ下に30~50のエクセルファイルが格納されている。 ・それぞれのエクセルファイルは全く同じフォーマットである。 ・エクセルファイルは複数(5~8)のシートで構成されている。 実現したいこと(今回ご教授いただきたいこと): 1. 上記エクセルファイルのあるひとつのシートを別フォルダに格納されているエクセルシートの ひとつのシートに一括で取り込みたい。 または 2. 上記エクセルファイルにあるひとつのシートをアクセスに一括で取り込みたい。 ちなみに集計したいデータはDBテーブルの形をしています。 つまり、本来50ほどあるエクセルファイルのあるシートを一つずつ50回「アクセスへエクスポート」する 作業をVBAで実現したいのです。 1.であれば、すべてを取り込んだエクセルファイルをアクセスへエクスポートするつもりです。 VBAは素人なので(ま、素人なのはVBAに限りませんが)ノーアイディアです。 何とぞよろしくお願いいたします。

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

  • ベストアンサー
  • aji70
  • ベストアンサー率100% (1/1)
回答No.1

Excelのバージョンがわからないのですが こんなんで どうでしょう? Option Explicit Const DATA_PATH = "D:\tess\data\" Const gFile = "制御.xlsm" '/* 書き込み先のブック Const gSheet = "Sheet1" '/* 書き込み先のシート Dim lRows_Cnt As Long Sub Main() lRows_Cnt = 1 Dim StrMsg As String Dim StrFn As String '/* ファイルを検索する StrFn = Dir(DATA_PATH & "*.xlsx") Do While StrFn <> "" StrMsg = StrFn '/* ファイルが見つかった Call yExcel(CStr(StrMsg)) StrFn = Dir() Loop End Sub Sub yExcel(sFile As String) Workbooks.Open DATA_PATH & sFile, ReadOnly:=True Dim ii As Integer For ii = 1 To Workbooks(sFile).Worksheets.Count With Workbooks(sFile).Worksheets(ii) Dim iSub_Row As Integer: iSub_Row = 1 Do Until Workbooks(sFile).Worksheets(ii).Cells(iSub_Row, 1) = "" '/* 書き込み Excel Workbooks(gFile).Worksheets(gSheet).Cells(lRows_Cnt, 1) = _ Workbooks(sFile).Worksheets(ii).Cells(iSub_Row, 1) Workbooks(gFile).Worksheets(gSheet).Cells(lRows_Cnt, 2) = _ Workbooks(sFile).Worksheets(ii).Cells(iSub_Row, 2)        ’/* この辺に アクセスのインサトーと処理を書く。。。。。 lRows_Cnt = lRows_Cnt + 1 iSub_Row = iSub_Row + 1 Loop End With Next ii ' <使用例 特定のブックを閉じる> Workbooks(sFile).Close End Sub

sankon3
質問者

お礼

ありがとうございます。大変助かります。 現在テストをしておりますが、 Sub yExcel(sFile As String) のところで「変数が定義されていない」という コンパイルエラーが出るのですが、 どういうことですか? 教えていただけると幸甚です。

その他の回答 (2)

  • aji70
  • ベストアンサー率100% (1/1)
回答No.3

Excel2007で作成しました。 Moduleを追加してコピペで動くはずだけど ただ、コピペで使うのではなく どんな処理になっているのかなとか? この関数は何してるのかなとか? ちゃんと調べれば、動くはずです。 最初はみんな初心者なので、人の作ったソースを 参考に必ず理解してから、自分のものにした方がいいかと 環境と詳しいエラーメッセージを教えていただければ、 手だすけできるかな? がんばって、勉強してください

sankon3
質問者

お礼

ありがとうございます。 現在解読中(教えていただいたコードを自分なりに消化)なのでまだ動いていませんが、なんとかいけそうです。おそらくシートを順番に取り込むような仕様を想定してお教えくださったようなのですが、(私の説明が足りずごめんなさい)、実際はたくさんあるファイルの中のそれぞれ一つのシートから取り込みたいので、そこがひっかかっていると思います。教えていただいたコードを元に修正します。 ありがとうございました。

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

VBAを余り勉強してないのに、回答を求めるのは、他人にコードを作ってクレと言うことになる。ここは無料のコード作成依頼コーナではない。ヒントぐらいを頼むところだ。 問題が普通のケースではない。ファイルが数十、シートは10シート近くは初心者の課題ではない。 本来自分で出来ないことは、当面あきらめざるをえないのが世の常。 >のあるひとつのシート これはどうやって見出すのか。一般的な書き方をしないこと。名前とか特徴は? >別フォルダに格納されているエクセルシートのひとつのシートに一括で取り込みたい。 これも具体的に書かないと。 >にあるひとつのシートをアクセスに一括で取り込みたい の「ある」とは ーー これらは質問すす場合は、2・3のエクセルブックに限定し、シート名も決めて、取り込み先のブックやシート名も決めて、模擬実例を作って、質問するものだ。一般的な表現にするのは、わかりにくくするだけ(ある、特定の、などの頻用) ーー アクセスにエクスポートするなどは、別の問題なので、質問を別にしたら。 ーー 課題はフォルダの中のファイルをすべて掴む方法 (1)Dir関数 (2)FSO のFor Each (3)エクセルブック以外の捨て方 -ー 在るブックの中の全シートの掴み方。名前が同じなら簡単だが。 ーー 一括して取り込むとはコピー貼り付け ーー 決めたブックめがけてそのシートのコピーを出来ないか >集計したいデータはDB アクセスで集計したいのか。アクセスでしないとならないほど、複雑なのか。 アクセスは少しはわかるということか。 エクセルでも出来る化も知れないと思うが。ブック間のデータの統合 http://www.eurus.dti.ne.jp/~yoneyama/Excel/tougou.html これをマクロの記録に持ち込んで、コードを修正。 ーー 親切な回答者は現れるとおもうが、其れで良しとしないで、2つのことをWEBででもしらべて勉強してから、判らない点にしぼって質問すること。

sankon3
質問者

お礼

ありがとうございます。 ご指摘いただいたことに関してはご尤もですし、質問する前から百も承知ではあったのですが、結局甘えて他人に任せてしまったのは私の至らないところではあります。 質問の仕方、当ページを利用するにあたっての心構え、ご指摘いただいた点を甘んじて受け、今後気をつけます。 ありがとうございました。

関連するQ&A

  • エクセルVBAで別ブックを参照してDSUM

    エクセルVBAで別ブック(閉じてる)を参照してDSUMをしたいです。 インターネットや本等で調べたのですが、全然分かりませんでした。 何卒、よろしくお願い申し上げます。 【前提】 ・エクセルファイルが2つあります。 1つ目は「DB」ファイル(Cドライブ直下)。 2つ目は「表示」ファイル(デスクトップ上。「DB」ファイルとは別の場所)。 ・「DB」ファイルの仕様は、Sheet1に以下のとおりです。 A列:会社(1行目には、会社と記載して2行目以降に値) B列:部署(1行目には、部署と記載して2行目以降に値) C列:氏名(1行目には、指名と記載して2行目以降に値) D列:金額(1行目には、金額と記載して2行目以降に値) ※値(データ)の行数は、数万行となる見込みです。 【実現したいこと】 ・「DB」ファイルのSheet1のデータを、DSUM関数の”データベース”として、 金額を集計して、「表示」ファイルで集計・表示させたい。 ・なお、DSUM関数の"条件"としては、会社と部署と氏名の3つとしたい。 ※具体的には、「読み出し」ファイルのSheet1のセルA2に会社を、セルB2に部署を、 セルC2に氏名を入力できるようにる。 それらすべてをAND条件として、金額を集計させたい(金額の集計は、セルD2に出力)です。 以上の内容で考えています。 ひとつのエクセルファイルで作成してみたのですが、データが数万行もあるため、容量が非常に大きくなってしまいます。 集計結果(集計条件を変更させて確認できる状態)は、複数メンバーで共有したいと思っています。 エクセルのVBAで上記のことを実現できないでしょうか。 Accessは、自分含め他のメンバーも知識が乏しいため、避けたいと思っています。 よろしくお願い申し上げます。

  • EXCEL VBA 別シートへデータ集計

    お世話になります。 EXCEL VBAを使って下記のことを実現したいです。 [やりたいこと] [データ]シートに社員情報が4人分入っています。(本当は可変です) [データ]シートに"集計"というボタンを作ってクリックするとVBAが動いて[集計]という シートにデータを集計したいのです。この[集計]シートのフォームが少し変わっていて一人に つき3行使用します。次の人はまた3行、また次の人は3行と繰り返していきたいのです。 上記やりたい事を画像にもしてみました。 上記動作を実現するVBAコードをどなたかご教授いただけませんでしょうか? 何卒よろしくお願い致します。 環境 EXCEL 2017 Win7

  • Excelで値貼り出力をするVBAは作れますか?

    Excelで値貼り出力をするVBAは作れますか? Excel2003を業務で使用しています。 SUMPRODUCTなどのいろんな関数を使って売上げ報告書を集計し、 取引先に送っているのですが、計算式や参照式でファイルが重くなっているので、 値貼りをしたファイルを作成したいのです。 そこで、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

  • エクセルVBAで複数のブックから指定のシートを別のブックに複写するには

    エクセルVBAの超初心者です。 複数のフォルダに「●●社計算書(2010年3月).xls」・・・()内の年月は毎月増えます。格納されているフォルダは各会社名です。 というブックがあります。その各ブック内の売上というシートにある商品コードと売上金額を別の集計用ブックで集計したいと思っています。 どのように集計用ブックにコードを書いたらよいのでしょうか? 1 商品コードは各社共通です。 2 ブック名は共通ですがブック内のフォーマットは共通していません。(シート名は共通) 3 集計するのは集計時の年月度のデータです。 要領を得ず、ぶしつけな質問かと思いますが、大変困っています。 どなたかお分かりになる方、ご教授願います。 

  • エクセルVBAに関しての質問です。

    エクセルVBAに関しての質問です。 同じフォルダ内に同形式のエクセルファイルが複数あります。そのファイルの特定のシートの中の特定の列のみをコピーして並べたいと思っています。 (1)フォルダはUSBに入れて使ったり、複数のパソコンの中で使われるので特定の場所にあるとは限りません。 (2)フォルダ名はその年度に応じて変更されます。「2009」、「2010」・・・といった具合です。 (3)フォルダ内のファイル数は常に3つで、「記録集計第1期」「記録集計第2期」「記録集計第3期」と名前を付けています。 (4)3つのファイル全てに「結果」という名前のシートがあり、そのシートのC4~AU37までのセルをコピーしたいです。 (5)C4~AU37までのセルには数値では無く、IF関数を使用して出された「◎」「◯」「△」等の文字列が入っています。 (6)コピーしたセルを「記録集計第3期」ファイルの中の「年度末結果」というシートのC2以降に並べてコピーしたいです。 「記録集計第1期」のC4~AU37を「年度末結果」のC2~AU35へ 「記録集計第2期」のC4~AU37を「年度末結果」のAV2~CN35へ 「記録集計第3期」のC4~AU37を「年度末結果」のCO2~EG35へ といった具合です。 (7)作業手順としては、「記録集計第3期」のファイルを開き、その中の「年度末結果」のシートにボタンを作って上記のVBAを動かせたらと思っています。 (8)「記録集計第1期」「記録集計第2期」のファイルは開かずにデータをコピーしたいです。 勝手なお願いで申し訳ございませんが、 お時間がございましたら、よろしくお願いいたします。

  • VBAエクセルのフォームについて

    お世話になっております。 VBAエクセルのフォームについて教えていただきたいのです。 VBAで入力のフォームを作ったのですが(TEXT BOXが4つ、コマンドボタン1つ、コマンドボタンを押したときに登録される用にしたい) 各シートの集計にしたい為、各シート(31のシートがあります)に入力フォームがあります、その各シートでの入力結果を1つのシートに 集計したいのですが、どの様なコードにしたらようか判りません。 素人のためお手数ですが、なるべく判りやすくお願いします。 よろしくお願いします。

  • エクセルVBAに関しての質問です。

    エクセルVBAに関しての質問です。 同じフォルダ内に同形式のエクセルファイルが複数あります。そのファイルの特定のシートの中の特定の列のみをコピーして並べたいと思っています。 (1)フォルダはUSBに入れて使ったり、複数のパソコンの中で使われるので特定の場所にあるとは限りません。 (2)フォルダ名はその年度に応じて変更されます。「2009」、「2010」・・・といった具合です。 (3)フォルダ内のファイル数は常に3つで、「記録集計第1期」「記録集計第2期」「記録集計第3期」と名前を付けています。 (4)3つのファイル全てに「結果」という名前のシートがあり、そのシートのC4~AU37までのセルをコピーしたいです。 (5)C4~AU37までのセルには数値では無く、IF関数を使用して出された「◎」「◯」「△」等の文字列が入っています。 (6)コピーしたセルを「記録集計第3期」ファイルの中の「年度末結果」というシートのC2以降に並べてコピーしたいです。ただし、コピーする際に4行ずつ飛ばしてコピーしたいです。 「記録集計第1期」のC4を「年度末結果」のC2へ、C5をC6へ...... 「記録集計第2期」のC4を「年度末結果」のC3へ、C5をC7へ...... 「記録集計第3期」のC4を「年度末結果」のC4へ、C5をC8へ...... といった具合です。 このコピーにより、C2から始まって、C2=記録集計第1期のC4、C3=記録集計第2期のC4、 C4=記録集計第3期のC4ときて、年度末結果のC5には空白の列ができます。 そして、C6からまた続く訳です。 ややこしくてすみません。 (7)作業手順としては、「記録集計第3期」のファイルだけを開き、その中の「年度末結果」のシートにボタンを作って上記のVBAを動かせたらと思っています。 (8)「記録集計第1期」「記録集計第2期」のファイルは開かずにデータをコピーしたいです。 勝手なお願いで申し訳ございませんが、 お時間がございましたら、よろしくお願いいたします。

  • VBAでExcelのBookの串刺し集計

    VBAでExcelのBookの串刺し集計するにはどうすれば良いでしょうか? 同一フォルダ内のファイルをすべて集計したいと思っています。 よろしくお願いします。

  • EXCELのVBAでの他EXCELデータ取得&表示

    EXCELのVBAを使い、実行したEXCELのシートに他のEXCELから読み込んだデータを取得&表示させたいと思っています。 取り込むEXCELファイルは、フォルダに格納された複数の同フォーマットのデータになります。 指定したフォルダの中の全てのEXCELファイルのデータを読み込んで、 実行したEXCELファイルのシートに複数行書き込んでいくような形になります。 機能として必要なのは以下の通りです。 ・取り込みファイルの保存されたフォルダの選択 ・選択したフォルダ内のファイルを開き、VBA側で設定した箇所のデータを読み込み、それを実行側のシートに出力する。(1ファイルにつき1行表示させる形。読込元と出力先のデータの位置関係は違います。色々入力されているファイルの必要部分だけを抜き出し、一行に出力する感じです) ・フォルダ内の全ファイルに対して同じ処理を繰り返す。(出力先の行は1行ずつ下にずれる) このようなVBAはどのように作ればよろしいでしょうか?

専門家に質問してみよう