フォルダ内の全エクセルシートを一括処理する方法

このQ&Aのポイント
  • エクセルのマクロのコードを使用して、あるフォルダ内に入っている全エクセルシートの特定のセルの値を別のエクセルシートに一括で貼り付ける方法を教えてください。
  • VBA初心者の方でも実行可能な方法を教えていただけると助かります。
  • フォルダ内のエクセルシートが複数ある場合でも、貼り付けるセルを1つずつ下にずらしていきたいです。フォルダの検索から全てのコピーが終了するまでの手順も教えてください。
回答を見る
  • ベストアンサー

★「フォルダ内の全エクセルシートを一括処理」★

★「フォルダ内の全エクセルシートを一括処理」★ エクセルのマクロのコードを教えていただけますでしょうか。 ★VBAの初心者です★ どなかた詳しい方、下記の内容を実行するためのコードを教えていただけませんでしょうか。 あるフォルダ内に入っている全エクセルシートの「sheet1」セルA1、B1、C1にある値を、デスクトップ上に保存されている別のエクセルシート”X” のF2、G2、H2、にそれぞれ貼り付けたい。 フォルダ内のエクセルシートは複数あるので、エクセルシートXのセルF2、G2、H2の次はF3、G3、H3、F4、G4、H4とそれぞれ1番ず つ下に貼り付けていきたい。 フォルダを検索するところから、全てのコピーが終了するところまで教えていただけると幸いです。 お忙しいところ恐れ入りますが、よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

ひとつごめんなさい、うっかり間違いました。 >マクロで開かせて値を取り出したいブックを保存してある「あるフォルダ」のプロパティを >右クリックして場所をコピーということですが C:\Users\test\Desktop  そこに表示されているのはフォルダが「置いてある場所」のパスなので、そこに「あるフォルダ」というフォルダがあるなら、マクロでは次のようにします。 修正版: mypath = "C:\Users\ユーザー名\Desktop\あるフォルダ\" としてください。 失礼しました。 #このようにマクロでは「具体的なファイル名」「具体的なファイルの保存場所」「具体的なシート名」「具体的なセル番地」をイチイチ間違えるとすぐにエラーになります。既に3回目回答を重ねていますが、マクロの本質部分(ブックを拾う、開く、コピーする)にまるで入れずに、「ファイルの保存場所の指定のしかたが分からない」で延々つまづきっぱなしです。 教えてもらったマクロを丸写して実行するしかまだできないときは、こういったあなたの「具体的な名前」をキチンと詳しく正しく情報提供してご相談投稿するようになさってください。 いつまでもいつまでも「あるフォルダ」とか「あるシート」とか「あるセル」とかじゃなく、ですね。 また、丸投げ丸コピーにしても、最低限教わったマクロのそれらの記載が実際の自分のそれと間違っていないか、必ずご自分で確認し必要に応じて修正してから実行してください。

adelaide8484
質問者

お礼

ご回答ありがとうございます。 ご指摘の通り実行した結果、無事成功することが出来ました。 ありがとうございました。 今回、自分の知識が不足している状態で、ただただ教えて下さい、のスタンスでのご質問となって しまい大変申し訳ありませんでした。 それにも関わらず、ご丁寧に、そして迅速に教えて下さり誠に感謝しております。 もっとマクロの基本をしっかり押さえたうえで、実務を実行していきたいと思います。 このたびは本当にありがとうございました。

その他の回答 (3)

回答No.4

'指定されたフォルダ内の全ファイル(ブック)を対象に、特定のシートの特定のセルを1つのシートに集める '特定のシートが存在しないときは、そのブックは無視される Sub SelectFiles() Const xDefaultPath = "D:\tmp" Const xFileSelector = "\*.*xls*" Const xSheetName = "X" Const xDataSheet = "Sheet1" Dim xFolderPath As Variant Dim xFileName As String Dim xSheet As Worksheet Dim xNoData As Boolean Dim xShell As Variant Dim xSh As Worksheet Dim xLast As Long Application.ScreenUpdating = False Application.DisplayAlerts = False xNoData = True Set xShell = CreateObject("Shell.Application") Set xFolderPath = xShell.BrowseForFolder(&O0, "データ(ブック)が存在するフォルダを選択, Please!!", &H1 + &H10, xDefaultPath) If xFolderPath Is Nothing Then Exit Sub xFileName = Dir(xFolderPath.Items.Item.Path & xFileSelector, vbNormal) Do Until xFileName = "" Workbooks.Open xFolderPath.Items.Item.Path & "\" & xFileName For Each xSheet In Worksheets If xSheet.Name = xDataSheet Then Set xSh = ThisWorkbook.Worksheets(xSheetName) xLast = xSh.Cells(xSh.Rows.Count, "F").End(xlUp).Row xSh.Cells(xSh.Rows.Count, "F").End(xlUp).Offset(1).Resize(1, 3).Value _ = Workbooks(xFileName).Worksheets(xDataSheet).Range("A1:C1").Value xNoData = False Exit For End If Next xSheet Workbooks(xFileName).Close False xFileName = Dir() Loop If xNoData = True Then MsgBox ("No Data Found!!") Application.ScreenUpdating = True Application.DisplayAlerts = True Exit Sub End If ThisWorkbook.Worksheets(xSheetName).Select xSh.Cells(xLast + 1, 8).Select Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

「ここを直しなさい」というのをスルーして何もしなければ、当然正しく動くはずもありません。 説明が分かりにくくて、理解できなかったようでごめんなさい。 アナタのご質問: >あるフォルダ内に入っている全エクセルシートの「sheet1」セルA1、B1、C1にある値を  ~~~~~~~~~~~~~~~~~~~~~~~~~ どこにあるのか判りませんが、このフォルダのパスを >mypath = "c:\あるフォルダ\" ’言わずもがなですが正しく記入すること ここに記入しなさいという意味です。 >このコードでデスクトップ上の「あるフォルダ」フォルダのパスコード取得になるのでしょうか。 どうやらパスの調べ方も判らないみたいなので、次の通りにします 1.ウィンドウズの画面上であなたの「あるフォルダ」を右クリックしてプロパティを表示する 2.「場所」としてC:\test といった具合に表示されるのでコピーする 3.「mypath = "c:\あるフォルダ\"」の代わりに「mypath = "c:\test\"」といった具合に修正する   一番最後に「¥」が付いているのを見落としてまた失敗しないよう、気を付けること また間違えないように、「あるフォルダ」はブックを保存してある(マクロで開かせて値を取り出したい)ブックを保存してある方のフォルダのことです。 マクロを付けたブック(値を貼り付ける方のブック)は、最初に回答したようにあなたの最初のご質問に書かれている通り、デスクトップに置いておきます。 値を張り付けて集める「シート」は、ご質問であなたがご自分で書いた通りシート名をXにしておかなきゃいけないので、そこも忘れないように気を付けて下さい。

adelaide8484
質問者

補足

ご回答ありがとうございます。 ご丁寧にありがとうございますm(__)m パスの調べ方も知らない初心者で恥ずかしい次第です。 アドバイス通り実行いたしましたところ、 「実行時エラー9  インデックスが有効範囲にありません」 と表示されました。 ThisWorkbook.Worksheets("X").Range("F65536").End(xlUp).Offset(1).Resize(1, 3).Value _ = Workbooks(myFile).Worksheets("Sheet1").Range("A1:C1").Value ここの値のどこがが違うことを示すエラーと認識しておりますが、 マクロで開かせて値を取り出したいブックを保存してある方のフォルダ(デスクトップ上にフォルダを作成しました。)に入っている各エクセルシート達sheet1のA1~C1には間違いなく値が入っているため、 コードエラーの原因がわかりません。 フォルダ内の各エクセルのファイル名は特にこの今回のアクションとは無関係でしょうか?? (フォルダ内に入っている各エクセルシート達はばらばらな名前です) また、マクロで開かせて値を取り出したいブックを保存してある「あるフォルダ」のプロパティを 右クリックして場所をコピーということですが C:\Users\test\Desktop  デスクトップ上に存在するファイルたちは全て同じ場所(パス)表示になるのでしょうか。 どのように、自分が抽出したいエクセルが入っているフォルダを選んでいるのか不思議です。 (現在デスクトップには1つしかファイルは存在していませんが) 初心者じみたばかりの質問で本当に申し訳ありません。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

デスクトップにデータをまとめるためのまとめブックを用意しておく まとめブックを開いてマクロを登録し、実行する。 手順: まとめブックを開く ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim myPath as string  dim myFile as string  mypath = "c:\あるフォルダ\" ’言わずもがなですが正しく記入すること  myfile = dir(mypath & "*.xls*")  do until myfile = ""   workbooks.open mypath & myfile   thisworkbook.worksheets("X").range("F65536").end(xlup).offset(1).resize(1,3).value _    = workbooks(myfile).worksheets("Sheet1").range("A1:C1").value   workbooks(myfile).close false   myfile = dir()  loop end sub

adelaide8484
質問者

補足

早速のご回答誠にありがとうございます。 ご教授頂いた通り、そのままコピーし、実行いたしましたが、対象のまとめシート上でマクロ実行したところ何も起きませんでした。 エラー等は特に発生しなかったので、コード自体に間違いはないかと思いますが、原因はなにが想定されますでしょうか? ・デスクトップに保存しているファイル名は「あるフォルダ」にしております。 ・mypath = "c:\あるフォルダ\"   このコードでデスクトップ上の「あるフォルダ」フォルダのパスコード取得になるのでしょうか。   お忙しいところ大変恐れ入りますが、ご教授いただけますと幸いです。 何卒よろしくお願いいたします。

関連するQ&A

  • Excelシート内への一括リンク

    あるフォルダ[folder]内にある大量のファイル[file1.xls,file2.xls,…file30.xls]を Excelワークシートの各セルにフォルダ内のファイル名(拡張子なし)を挿入し、且つそのセル内のファイル名に対応するファイルへのハイパーリンクを一括で張るといったような処理をするにはどのようにしたらよろしいのでしょうか?そのような処理のできるマクロやVBAをお分かりになる方がいらっしゃいましたら教えてください。

  • エクセル:ある任意のシートを除く他のシートの一括削除について

    エクセルVBAについての質問です。よろしくお願いします。 エクセルの「○○.xls」にたくさんのシートを作っています。 ◆それをある任意のシートだけを残して(リンクがあるのでそのシートの全部を値だけ貼り付けてから) ◆そのほかのシートを一括削除して、 ◆別の名前をつけて「デスクトップ」に保存 ◆「○○.xls」を他のPCに保存してもそのVBAを実行するとそちらの「デスクトップ」に保存できるというイメージです。 このようなVBAを教えていただけないでしょうか。 よろしくお願いいたします。

  • エクセル:複数シートの一括処理

    お世話になります。 エクセルで1つのブックに複数のシートがあります。 書式は同じですが行数がそれぞれ違います。 A列で、データが入力されている一番下のセルの次の行から、エクセルの最終行である65536行までの行を全て選択して「削除」をしたいのです。(行の削除)しかも全シート一括で。 A列でデータが入っている一番下のセルがA550だった場合、551行~65536行までを全て選択→削除を行う。 これらの作業をするためのマクロを教えてください。

  • 複数フォルダ内のファイルに一括でマクロ

    複数のフォルダ内に入っているエクセルファイルに一括でマクロをかけたいのですが、どうすればよいのでしょうか? フォルダにはエクセルファイルしか入っていません。 検索したところ秀丸というツールがあるようですが、有料であるため、ほかの方法を探しています。無料でVBAなどで出来ませんでしょうか?

  • エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(

    エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(A1:X365)の値を取得し、コピー元のエクセルファイル名のシートに貼付ける方法を教えて頂けないでしょうか?できればコピー元のエクセルファイルは開かずに実行させたいです。エクセルは2003を使っています。

  • エクセルの複数のセルの値からシート名を自動変更する

    エクセルのシート名を複数のセルから自動で変更する場合のマクロを教えてください。 E6に「平成」、G6に「年」、I6に「月」、K6に「日」と入力されている状態で、 間のF6、H6、J6が空欄となっており、それぞれに年と月と日を入力するような状態となっています。 このF6、H6、J6に入力した年月日情報をシート名にするようなマクロは可能でしょうか? 「28.2.6」のように。もしくは「280206」のように6桁で。 また、F6、H6、J6の3つとものセルに値を入力した場合に、シート名が変更され、 その後に、それかのセルの情報を変更した場合は、その情報に変更されるようになればありがたいです。 下記のQ&Aが近いのですが、複数セルの情報からシート名を変更する方法が分かりません。 http://okwave.jp/qa/q2025849.html よろしくお願いします。

  • Excel グラフ一括作成

    添付画像の通り、同じ様式の表があるシートが複数あります。 中身の値だけシートによって異なります。 各シートのグラフを一括作成する方法はありますか? 自分でVBAを書くことはできませんが、マクロの記録はできます。 なにかテクニックはありませんか?

  • エクセル:シート1のセルA1が0でなければ任意のマクロを実行したい

    エクセルマクロ(VBA)初心者です。よろしくお願いします。 (1)エクセルのsheet1のセルA1の値が”0(ゼロ)”でなければ、そのシート上で任意のマクロを実行し、ゼロであれば実行せずにsheet2へとぶ (2)同じようにsheet2のセルA1がゼロでなければ実効し、ゼロでなければsheet3へとぶ・・・の繰り返し(sheet50まであります。) このようなマクロ(標準モジュール)の書き方を教えてください。 よろしくお願いいたします。

  • エクセルのセル抽出でチェックシート

    複数ブックの同じシートの特定セルの内容を抽出し、1つのチェックシート用のエクセルに貼り付けたいのですが、可能でしょうか。 複数ブックは1つのフォルダの中に入れます。特定セルは複数のシートにまたがっています。 Book1 Sheet1:A5, B10, D20/Sheet3:C1, H4/Sheet5:F7 Book2 Sheet1:A5, B10, D20/Sheet3:C1, H4/Sheet5:F7 Book3 Sheet1:A5, B10, D20/Sheet3:C1, H4/Sheet5:F7  ・  ・

  • エクセルでの一括計算

    エクセルでの一括処理の方法についての質問です。 複数のデータについて同じ処理を繰り返して、それを別のシートに吐き出させたいのですが、どのようにすればいいの分かりません。 具体的には シート1のA1のデータを使って計算します。その結果をシート2のA1に表示したいのですが・・・ マクロやVBAなどは利用経験がないため、詳しく解説いただけると幸いです。

専門家に質問してみよう