複数のシートを自動でコピー(統合)するエクセルのマクロについて教えてください。
「毎月の売上明細シート」を別のエクセルファイルにコピー(統合)して「年間の売上明細シート」を作成したいです。
同じブック内でコピー(統合)するマクロは下記の「マクロ1」で想定通りに動くのですが、これを「毎月の売上明細シート(エクセルファイル)」はそのままで(要は加工できないエクセルです)、別のエクセルにマクロを組んで、そこに「年間の売上明細シート」を作成するマクロに変更したいのですが、素人なのでさっぱりわかりません。
同一ブック内で統合するマクロを別のエクセルに統合するマクロへの修正方法を教えてください。よろしくお願いいたします。
*当方、WINDOWS10でエクセル2016使用です。
*売上明細の中身は問題ではないと思いますが、、、日付ごとに売上商品、個数、合計単価が記載されている明細です。
「マクロ1」・・・同じブック内でコピー(統合)するマクロ
Sub マクロ1()
Dim sWS As Worksheet '毎月の売上明細シート(コピー元)
Dim dWS As Worksheet '年間の売上明細シート(コピー先)
Set dWS = Worksheets("AllData")
'年間の売上明細シートの2行目以降を削除
dWS.UsedRange.Offset(1, 0).Clear
'各シートの2行目以降のデータを、年間の売上明細シートの末尾にコピー
For Each sWS In Worksheets
If sWS.Name <> dWS.Name Then
With sWS.UsedRange
'コピー元シートにデータが1件以上ある場合
If .Rows.Count > 1 Then
.Offset(1, 0).Resize(.Rows.Count - 1).Copy _
Destination:=dWS.Cells(Rows.Count, 1). _
End(xlUp).Offset(1, 0)
End If
End With
End If
Next sWS
'年間の売上明細シートをA列で並べ替え
dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes
End Sub
No.3ベストアンサー
- 回答日時:
そうゆう事ですか、伝わりませんでしたね。
こちらでどうぞ
Sub Sample()
Dim dWS As Worksheet
Dim fileFll As String
Dim sh
Set dWS = ThisWorkbook.Worksheets(1)
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "毎月の売上明細シートがあるBookを選択してください"
.InitialFileName = CreateObject("WScript.Shell").SpecialFolders("desktop")
.Filters.Add "*", "*.xls*"
If .Show = 0 Then
MsgBox "キャンセルされました": Exit Sub
Else
fileFll = .SelectedItems(1)
End If
End With
dWS.UsedRange.Offset(1, 0).Clear
With Workbooks.Open(fileFll)
'毎月の売上明細シートがあれば、年間の売上明細シートの末尾にコピー
For Each sh In .Worksheets
If sh.Name <> "AllData" Then
sh.UsedRange.Offset(1).Copy _
Destination:=dWS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Next sh
.Close
End With
'年間の売上明細シートをA列で並べ替え
dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes
End Sub
ご質問よりコードを信じました。
新規ブック標準モジュールにコピペで
No.2
- 回答日時:
>途中で「毎月の売上明細シートのあるブックを選択してください」と出るので、そのシートを開いてみるのですが、何も起こりません。
>これは何のVBAなんでしょうか。
そうですか、、
検証してみました。
実行されましたが、、だめですか?
>途中で「毎月の売上明細シートのあるブックを選択してください」と出るので、そのシートを開いてみるのですが、何も起こりません。
コピー元ファイルに 毎月の売上明細シート シート名はありますか?もしかして、 毎月の売上明細 とかではないでしょうか?
同様に新規ブックに 年間の売上明細シート 名のシートはありますか? もしかして、 年間の売上明細 とかではないでしょうか?
これは、あなたにしか分かりません。
ご質問のコードでは、Set dWS = Worksheets("AllData") となっていますが、
説明文には、年間の売上明細シート となっています。
コード内のシート名 年間の売上明細シート 毎月の売上明細シート を該当シート名に書き替えてみてください。
しかしながら、この辺りで躓くと必要になるであろう条件定義を自力で行うのは、難しいかも知れませんね。
改めて
VBAは新規ブックの標準モジュールにコピペしましたか?
その新規ブックには、年間の売上明細シートはありますか?そこにコピーされます。
ダイアログが出て、毎月の売上明細シートのあるブックを選択してください の通りに
毎月の売上明細シートの入っているブックを選んで 開くボタンを押してください。
シート名があれば、このままでも実行されると思います?
毎月の売上明細のシート名は「1月」「2月」・・・です。ない月もあります(売上のない月はシートもない)。マクロ1はそのシート名関係なくちゃんとデータを自動で統合してくれました。
途中で追加作業が発生する手間のかかるマクロではなく、もっとシンプルに、それぞれのエクセル(毎月の売上明細シートと、年間の売上明細シート)を開いて、マクロを実行したら、年間の売上明細が自動で完成するようにできるとありがたいです。
マクロ1のように。。。
No.1
- 回答日時:
こんにちは、
>素人なのでさっぱりわかりません。うう
ご質問内容をちゃんと理解しているか分かりませんが、こんな感じでどうでしょう
Option Explicit
Sub マクロ1()
Dim dWS As Worksheet
Dim fileFll As String
Dim sh
Set dWS = ThisWorkbook.Worksheets("年間の売上明細シート")
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "毎月の売上明細シートがあるBookを選択してください"
.InitialFileName = CreateObject("WScript.Shell").SpecialFolders("desktop")
.Filters.Add "*", "*.xls*"
If .Show = 0 Then
MsgBox "キャンセルされました": Exit Sub
Else
fileFll = .SelectedItems(1)
End If
End With
With Workbooks.Open(fileFll)
'毎月の売上明細シートがあれば、年間の売上明細シートの末尾にコピー
For Each sh In .Worksheets
If sh.Name = "毎月の売上明細シート" Then
sh.UsedRange.Offset(1).Copy _
Destination:=dWS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Next sh
.Close
End With
'年間の売上明細シートをA列で並べ替え
dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes
End Sub
fileFll = .SelectedItems(1)に 毎月の売上明細シートの含まれているブックのフルパスを書けばmsoFileDialogは不要です。
新規ブックを作成
新規ブック内に年間の売上明細シート名のシートを作成
(一旦任意の場所に保存してください)
上記サンプルを標準モジュールに
エラー処理はしておりません。
.Closeなのでターゲットブックに=now()のような関数(又はVBA)があるとアラートが出るかと思いますが
条件などは適時変更、対応してください。
全く思い違いならすみません。
ご回答ありがとうございます。
下の方の説明が難しくて全くわからないのですが…
とりあえずマクロ作成(コピーしただけですが)してやってみたのですが、まったく何も起こりません。
途中で「毎月の売上明細シートのあるブックを選択してください」と出るので、そのシートを開いてみるのですが、何も起こりません。
これは何のVBAなんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで同一フォーマットのシー...
-
エクセルでファイルを開いたと...
-
Excelで同じシートのコピーを一...
-
スプレッドシートの関数VLOOKUP...
-
EXCELで1ヶ月分の連続した日付...
-
シート名が変わっても計算したい
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
VBA セルの値と同じ名前のシー...
-
EXCEL:同じセルへどんどん足し...
-
前の(左隣の)シートを連続参...
-
Accessのスプレッドシートエク...
-
【エクセルVBA】「インデックス...
-
スプレッドシートの関数で上か...
-
複数のピボットを同じフィルタ...
-
シート番号からシート名を取得する
-
Accessのマクロを使用してExcel...
-
VBAでシートコピー後、シート名...
-
日報をエクセルで作成したいの...
-
sumif関数を使って複数シートに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
前の(左隣の)シートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで1ヶ月分の連続した日付...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
EXCELで同一フォーマットのシー...
-
エクセルで前のシートを連続参...
-
エクセルで前シートを参照して...
-
VBAでシートコピー後、シート名...
-
Accessのスプレッドシートエク...
-
エクセルのシート名をリスト化...
-
複数シートの特定の位置に連番...
-
Excelのシートを、まとめて表示...
-
エクセル 計算式も入っていない...
-
スプレッドシートの関数VLOOKUP...
おすすめ情報
毎月の売上明細のエクセル名は「毎月の売上明細シート」で、そのエクセル内にはシート名が「1月」「2月」「4月」と各月の売上明細(販売日・商品名・販売額)のデータのあるシートがあります。ない月もありますが、シート名に関係なく、各月のデータを順番に拾ってほしいです。
質問文のマクロ1はこのエクセルの新しいシートで実行すると、各月のデータを統合してくれます。とても便利なマクロです。
今回の質問は、このエクセル「毎月の売上明細シート」はそのままで、別のエクセル「年間の売上明細シート」(そのエクセルのシート名も年間の売上明細シートでいいです)に統合したいということです。できれば、マクロ1はとてもわかりやすく使い勝手のよいマクロなので、ちょっと修正して使えるとありがたいです。