お世話になります。質問を締め切ってしまい、回答者の方からご連絡いただいたので改めて投稿させていただきます。
同一フォルダ内にある複数のファイル(.xlsx)を一つのファイルに統合するマクロを考えております。
以下内容でツールを作りたいと思っています。何かヒントになるソースコードがありましたらご教示いただけないでしょうか?(現段階で、1つのファイルをコピー複製し、それに他ブックのデータを、配列などを用い追記できないかと考えていますが、まだそこに至っておりません。)
ファイル数は毎回変わります(20~30程度)
データ数はマージした後で最大でも10万レコードはいかない程度
シート数は10程度、見出し内容は固定で1~3行目までが見出し(項目により、行結合してあったり2段になっていたりしますが、データの左上端は必ずセルA3です)
シートごとにデータをマージしたいです。
フォルダ指定について
フォルダ指定は、参照ボタンでユーザーに選択してもらう
出力先もボタンを押し、毎回ユーザーに選択してもらいます
以上どうぞよろしくお願いいたします。
自分の考えた方法ですが、まずはじめの、ファイルを複製する方法については、別投稿で質問させていただきました。
No.11ベストアンサー
- 回答日時:
追伸:
sheet_namesの設定方法について
もし、あなたのマージ対象ブックの中に、
Sheet1,Sheet2,Shhet3,Shhet4
があり、それらすべてが、マージ対象なら、
sheet_names = Array("Sheet1", "Sheet2","Aheet3","Sheet4")
としてください。
Sheet2とSheet3だけがマージ対象なら
sheet_names = Array("Sheet2","Aheet3")
としてください。
sheet_names に登録されたシート名がマージの対象となります。
確認が遅くなりました。どうもありがとうございます。完璧に動きました。なんとお礼を申し上げたらよいのか。本当にありがとうございましたm(_ _)m
No.12
- 回答日時:
No11に誤りがありました。
sheet_names = Array("Sheet1", "Sheet2","Aheet3","Sheet4")
は
sheet_names = Array("Sheet1", "Sheet2","Sheet3","Sheet4")
の誤りです。
sheet_names = Array("Sheet2","Aheet3")
は
sheet_names = Array("Sheet2","Sheet3")
の誤りです。
失礼しました。
No.10
- 回答日時:
>「インデックス有効範囲内にありません」とエラーが出てしまいます。
ワークシートがそのマージ対象ブック内に存在しないケースです。
添付図のように、黄色の行で止まるはずです。
sh_name(赤線で囲んだ箇所)にマウスをあてると、シート名が表示されます。そのシートが、マージ対象ブック内に存在しない為、エラーになります。
シート名は、
sheet_names = Array("Sheet1", "元データ", "元データ2")
の行で、あなたの環境にあわせて適切なシート名になっていなければいけません。
ここに登録したシート名が、全て、マージ対象ブック内に存在することを確認してください。
シート名は全角/半角、大文字/小文字を含めて全て一致させてください。
全角のSheet1と半角のSheet1は、一致しませんので、エラーなります。
どうもありがとうございます。。以下のご回答で先にご指摘いただいていたのに私が見落としておりました。大変申し訳ございません!直したところ、問題なく動きました!!
No.8
- 回答日時:
以下のマクロを標準モジュールに登録してください。
尚、出力先に同じファイル名が存在した場合は、無条件に上書きされますのでご注意ください。
文字数オーバーなので下記URLにアップしました。
https://ideone.com/QiG2OU
ご連絡が遅くなり申し訳ございません。昨日から頂いたコードを試しているのですが、117行目 ”maxrow_src = wb.Worksheets(sh_name).Cells(Rows.count, "A").End(xlUp).Row ” 'A列 最終行を求める
「インデックス有効範囲内にありません」とエラーが出てしまいます。改善方法を探っているのですが未だわからず、、よろしければ何か確認する点をご教示いただけないでしょうか。
No.6
- 回答日時:
フォルダの参照についてですが、以下のようにします。
以下のマクロを標準モジュールに登録してください。
フォルダ名を記入するシートのシート名は「管理」とします。
添付図参照
Public Sub 参照先フォルダ設定() と Public Sub 出力先フォルダ設定()
をボタンに割り当ててください。
Public Sub 参照先フォルダ設定()
Dim ws As Worksheet
Set ws = Worksheets("管理")
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
ws.Range("B5").Value = .SelectedItems(1)
End With
End Sub
Public Sub 出力先フォルダ設定()
Dim ws As Worksheet
Set ws = Worksheets("管理")
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
ws.Range("B9").Value = .SelectedItems(1)
End With
End Sub
No.5
- 回答日時:
No4の補足についてです。
>ありがとうございます。以下yyyymmddに当日の日付が入る形にできればと思います。
>マージ【AAA】売上管理表_yyyymmdd.xlsx
ということは、
「マージ」+ 元のファイル名(拡張子を除く)から下3桁を削除したもの + .xlsx
で良いでしょうか。
例1 元のファイル名=【AAA】売上管理表_20220420_02.xlsxの場合
ファイル名= マージ+売上管理表_20220420+.xlsx
= マージ売上管理表_20220420.xlsx
例2 元のファイル名=【XYZABC】売上管理表_02.xlsxの場合
ファイル名= マージ【XYZABC】売上管理表.xlsx
No.4
- 回答日時:
補足ありがとうございました。
No1の以下の補足ですが
------------------------------
例
【AAA】売上管理表_20220420_01.xlsx
【AAA】売上管理表_20220420_02.xlsx
【AAA】売上管理表_20220421_01.xlsx
統合後のファイル名は冒頭に「マージ」とつける等にしたいと考えております。
------------------------------------------
この例では、上記の3つのファイルを統合すると思いますが、
その場合、統合後のファイル名は、
マージ【AAA】売上管理表_20220420_01.xlsx
マージ【AAA】売上管理表_20220420_02.xlsx
マージ【AAA】売上管理表_20220421_01.xlsx
のどれになるのでしょうか。
ありがとうございます。以下yyyymmddに当日の日付が入る形にできればと思います。
マージ【AAA】売上管理表_yyyymmdd.xlsx
No.3
- 回答日時:
フォルダ選択についての補足要求です。
1.B5にファイルを選択してファイル名を設定していますが、
これは、マージ元のファイルでしょうか。
マージ元だとすると、ファイル数(20~30)の数分、マクロの実行を行うのでしょうか?
個人的には、B5にマージ元のファイルを格納してあるフォルダ名を設定するほうが
良いと考えますが、いかがでしょうか?
その場合、そのフォルダ内のすべての(*.xlsx)のファイルをマージ対象のファイルとして処理します。
ありがとうございます。仰る通りです。私はVBA初心者で、まずは一つのファイルを複製し、出力をするにはどうしたらいいかを考え、それができたら、フォルダ指定でどうしていくかを考えるつもりでおりました^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のエクセルファイルを起動...
-
【VBA】異なる行だけを抜き出す...
-
Ajaxでファイル中身をPOSTするには
-
仕事のファイルを共有フォルダ...
-
【Excel】[Expression.Error] ...
-
VBAでCSVファイルが使用中かど...
-
tmpファイル なぜできる?削除...
-
ファイルの途中に文字列を挿入
-
大量のCSVデータを行列の変換を...
-
Batch: フォルダ内の特定のファ...
-
XMLデータを変換し印刷する方法
-
社内Excel共有ブックでの保存ト...
-
EXCELをDAOで操作したい
-
swfのボタンからCADデータを開...
-
AccessVBAで作成したExcelファ...
-
WebBrowserで開いたEXCELファイ...
-
Accessでエクセル出力の保存先指定
-
エクセルで縦のカラムデータを...
-
selectした結果の余計な余白を...
-
【access】マクロファイルのコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
共有フォルダに誰が何にアクセ...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
AccessVBAで作成したExcelファ...
-
(Excelマクロ)datファイルをエ...
-
excelを共有ファイルにすると行...
-
月が変わったら自動でシートが...
-
batファイル、コマンドプロンプ...
-
Excel VBA 処理後データが重た...
-
XMLデータを変換し印刷する方法
-
Access VBA を利用して、フォル...
-
【アクセス】「ほかのユーザー...
-
特定のフォルダに入れたファイ...
-
WEBクエリが使えない場合のHPデ...
-
ファイルの途中に文字列を挿入
-
tmpファイル なぜできる?削除...
-
大量のCSVデータを行列の変換を...
-
社内Excel共有ブックでの保存ト...
おすすめ情報
訂正 ファイルのデータ部分、左上端はA3ではなくA4でした。
統合するデータの見出しイメージです。