アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。質問を締め切ってしまい、回答者の方からご連絡いただいたので改めて投稿させていただきます。

同一フォルダ内にある複数のファイル(.xlsx)を一つのファイルに統合するマクロを考えております。
以下内容でツールを作りたいと思っています。何かヒントになるソースコードがありましたらご教示いただけないでしょうか?(現段階で、1つのファイルをコピー複製し、それに他ブックのデータを、配列などを用い追記できないかと考えていますが、まだそこに至っておりません。)

ファイル数は毎回変わります(20~30程度)
データ数はマージした後で最大でも10万レコードはいかない程度
シート数は10程度、見出し内容は固定で1~3行目までが見出し(項目により、行結合してあったり2段になっていたりしますが、データの左上端は必ずセルA3です)
シートごとにデータをマージしたいです。

フォルダ指定について
フォルダ指定は、参照ボタンでユーザーに選択してもらう
出力先もボタンを押し、毎回ユーザーに選択してもらいます

以上どうぞよろしくお願いいたします。
自分の考えた方法ですが、まずはじめの、ファイルを複製する方法については、別投稿で質問させていただきました。

「複数ファイルのデータの統合について」の質問画像

質問者からの補足コメント

  • 訂正 ファイルのデータ部分、左上端はA3ではなくA4でした。

      補足日時:2022/05/14 12:10
  • 統合するデータの見出しイメージです。

    「複数ファイルのデータの統合について」の補足画像2
      補足日時:2022/05/14 13:45

A 回答 (12件中1~10件)

追伸:


sheet_namesの設定方法について
もし、あなたのマージ対象ブックの中に、
Sheet1,Sheet2,Shhet3,Shhet4
があり、それらすべてが、マージ対象なら、
sheet_names = Array("Sheet1", "Sheet2","Aheet3","Sheet4")
としてください。
Sheet2とSheet3だけがマージ対象なら
sheet_names = Array("Sheet2","Aheet3")
としてください。
sheet_names に登録されたシート名がマージの対象となります。
    • good
    • 1
この回答へのお礼

確認が遅くなりました。どうもありがとうございます。完璧に動きました。なんとお礼を申し上げたらよいのか。本当にありがとうございましたm(_ _)m

お礼日時:2022/05/16 00:56

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")
の誤りです。
失礼しました。
    • good
    • 0

>「インデックス有効範囲内にありません」とエラーが出てしまいます。



ワークシートがそのマージ対象ブック内に存在しないケースです。
添付図のように、黄色の行で止まるはずです。
sh_name(赤線で囲んだ箇所)にマウスをあてると、シート名が表示されます。そのシートが、マージ対象ブック内に存在しない為、エラーになります。
シート名は、
sheet_names = Array("Sheet1", "元データ", "元データ2")
の行で、あなたの環境にあわせて適切なシート名になっていなければいけません。
ここに登録したシート名が、全て、マージ対象ブック内に存在することを確認してください。
シート名は全角/半角、大文字/小文字を含めて全て一致させてください。
全角のSheet1と半角のSheet1は、一致しませんので、エラーなります。
「複数ファイルのデータの統合について」の回答画像10
    • good
    • 1
この回答へのお礼

どうもありがとうございます。。以下のご回答で先にご指摘いただいていたのに私が見落としておりました。大変申し訳ございません!直したところ、問題なく動きました!!

お礼日時:2022/05/16 00:54

1点、大切なことを忘れていました。


Public Sub 複数ブック統合()内の
sheet_names = Array("Sheet1", "元データ", "元データ2")
の行が、マージ対象となるシートのサンプルです。
この行をあなたの環境にあわせて、適切に修正してください。
例では
Sheet1
元データ
元データ2
のシートがマージ対象となります。
    • good
    • 1
この回答へのお礼

ありがとうございます!!今少しエラーが出ておりこちらのデータの不備だと思われ確認中です。

お礼日時:2022/05/14 18:12

以下のマクロを標準モジュールに登録してください。


尚、出力先に同じファイル名が存在した場合は、無条件に上書きされますのでご注意ください。
文字数オーバーなので下記URLにアップしました。
https://ideone.com/QiG2OU
    • good
    • 1
この回答へのお礼

ご連絡が遅くなり申し訳ございません。昨日から頂いたコードを試しているのですが、117行目 ”maxrow_src = wb.Worksheets(sh_name).Cells(Rows.count, "A").End(xlUp).Row ” 'A列 最終行を求める
「インデックス有効範囲内にありません」とエラーが出てしまいます。改善方法を探っているのですが未だわからず、、よろしければ何か確認する点をご教示いただけないでしょうか。

お礼日時:2022/05/15 13:48

仕様がほぼ確定しましたので、最終確認になります。


1.マージ元のフォルダは「管理」シートのB5に記入済みとする。
マージ元のフォルダ内の全ての*.xlsxを処理対象とする。
2.マージ先のフォルダは「管理」シートのB9に記入済みとする。
マージ先のフォルダへ統合後のファイルを出力する。
3.統合後のファイルは新規作成するものとし、ファイル名は
「マージ」+元のファイル名(拡張子を除く)の下3桁を削除したもの+.xlsxとする。

上記でよろしいでしょうか。
    • good
    • 1
この回答へのお礼

はい、大丈夫です!!

お礼日時:2022/05/14 16:46

フォルダの参照についてですが、以下のようにします。


以下のマクロを標準モジュールに登録してください。
フォルダ名を記入するシートのシート名は「管理」とします。
添付図参照
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
「複数ファイルのデータの統合について」の回答画像6
    • good
    • 1

No4の補足についてです。


>ありがとうございます。以下yyyymmddに当日の日付が入る形にできればと思います。
>マージ【AAA】売上管理表_yyyymmdd.xlsx

ということは、
「マージ」+ 元のファイル名(拡張子を除く)から下3桁を削除したもの + .xlsx
で良いでしょうか。

例1 元のファイル名=【AAA】売上管理表_20220420_02.xlsxの場合
ファイル名= マージ+売上管理表_20220420+.xlsx
     = マージ売上管理表_20220420.xlsx

例2 元のファイル名=【XYZABC】売上管理表_02.xlsxの場合
ファイル名= マージ【XYZABC】売上管理表.xlsx
    • good
    • 1
この回答へのお礼

ありがとうございます!はい大丈夫です。

お礼日時:2022/05/14 16:45

補足ありがとうございました。


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
のどれになるのでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。以下yyyymmddに当日の日付が入る形にできればと思います。
マージ【AAA】売上管理表_yyyymmdd.xlsx

お礼日時:2022/05/14 13:57

フォルダ選択についての補足要求です。


1.B5にファイルを選択してファイル名を設定していますが、
これは、マージ元のファイルでしょうか。
マージ元だとすると、ファイル数(20~30)の数分、マクロの実行を行うのでしょうか?
個人的には、B5にマージ元のファイルを格納してあるフォルダ名を設定するほうが
良いと考えますが、いかがでしょうか?
その場合、そのフォルダ内のすべての(*.xlsx)のファイルをマージ対象のファイルとして処理します。
    • good
    • 0
この回答へのお礼

ありがとうございます。仰る通りです。私はVBA初心者で、まずは一つのファイルを複製し、出力をするにはどうしたらいいかを考え、それができたら、フォルダ指定でどうしていくかを考えるつもりでおりました^^;

お礼日時:2022/05/14 13:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!