コンテンツへスキップ

Yamada's blog

メインメニュー
  • 汎用エクセルVBAツール
  • 動画マニュアル
  • ホーム
  • Excel・CSV
  • エクセルの複数シートをコピーして1つのシートに縦にまとめるVBA
  • Excel・CSV
  • VBA

エクセルの複数シートをコピーして1つのシートに縦にまとめるVBA

KINGKING007 2019年5月19日 2 分読み取り

エクセルの複数のシートを縦にまとめるエクセルVBAをご紹介します。

次のサンプルコードを使うと、

  • 「ファイルを開く」ダイアログを表示。
  • シートをまとめたいエクセルブックを選択。
  • 選択したエクセルブックに、集約用シートを追加。
  • エクセルブックに含まれる全シートをコピー、集約用シートにまとめる。

という作業を自動化します。

目次

  • 処理イメージ
  • 操作方法
  • サンプルコード
  • コードの特徴

処理イメージ

エクセルブック内にある複数シートをコピー、集約シートを追加して縦に貼り付けてまとめます。

操作方法

1、
下記サンプルコードを含むエクセルファイルを開き→「開発」→「マクロ」の順でクリック。
「Aシート縦に集約」→「実行」の順でクリック。

 

2、
ファイルを開くダイアログが表示されるので、シートをまとめたい対象のエクセルブックをクリックして、「開く」をクリック

 

3、
マクロが実行されます。
「集約シート」を追加、各シートをコピーして、
「集約シート」に各シートのデータを縦向きに貼り付けます。

 

完了です。

サンプルコード

Default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
Sub Aシート縦に集約()
Dim sWS As Worksheet 'データシート
Dim dWS As Worksheet '集約用シート
Dim s_row As Long 'データシートの最終行数
Dim d_row As Long '集約用シートの最終行数
Dim OpenFileName As String
'ファイルを開くダイアログを表示
OpenFileName = Application.GetOpenFilename("Excelファイル,*.xls*")
'キャンセル時の処理
If OpenFileName = "False" Then
'メッセージ表示
MsgBox "キャンセルされました。処理を終了します。"
End
Else
Workbooks.Open OpenFileName
End If
 
 
'画面更新停止
Application.ScreenUpdating = False
'確認ダイアログ停止
Application.DisplayAlerts = False
'集約シートがあるか確認
For Each sh In Sheets
If sh.Name = "集約シート" Then
flag = True
Exit For
End If
Next sh
If flag = True Then
Dim rc As Integer
'メッセージ表示
rc = MsgBox("シート「集約シート」を上書きしますか?" & Chr(13) & "※この処理は戻せません", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
'画面更新停止
Application.ScreenUpdating = False
'シート選択
Worksheets("集約シート").Activate
'シート削除
ActiveSheet.Delete
 
'画面更新停止
Application.ScreenUpdating = True
'メッセージ表示
MsgBox "処理前のシート「集約シート」は削除済みです"
'シート追加
Worksheets.Add before:=Worksheets(1)
'シート名変更
ActiveSheet.Name = "集約シート"
'シート選択
Worksheets("集約シート").Activate
 
 
 
Set dWS = Worksheets("集約シート")
'ブックを上書き保存
ActiveWorkbook.Save
'集約用シートの最終行数に1を代入
d_row = 1
'各シートにコードを実行
For Each sWS In Worksheets
'sWSとdWSのシート名が一致しない場合
If sWS.Name <> dWS.Name Then
With sWS.UsedRange
'シートsWSをアクティブにする
sWS.Activate
'シートの最終セルを選択する
ActiveCell.SpecialCells(xlLastCell).Select
'最終セルの行を取得、変数に代入
s_row = ActiveCell.row
'最終行から1行目までを選択
Rows(1 & ":" & s_row).Select
'最終行から1行目までをコピー
Selection.Copy
'集約用シートを選択
dWS.Activate
'行を選択
Rows(d_row).Select
'コピーしたデータを貼り付け
ActiveSheet.Paste
'シートの最終セルを選択する
ActiveCell.SpecialCells(xlLastCell).Select
'最終セルの行を取得、変数に代入
d_row = ActiveCell.Offset(1, 0).row
End With
End If
Next sWS
Else
'メッセージ表示
MsgBox "キャンセルされました。処理を終了します。"
End If
Else
'シート追加
Worksheets.Add before:=Worksheets(1)
'シート名変更
ActiveSheet.Name = "集約シート"
'シート選択
Worksheets("集約シート").Activate
 
Set dWS = Worksheets("集約シート")
'集約用シートのセルを全削除
Worksheets("集約シート").Cells.Select
Selection.Delete Shift:=xlUp
'ブックを上書き保存
ActiveWorkbook.Save
'集約用シートの最終行数に1を代入
d_row = 1
'各シートにコードを実行
For Each sWS In Worksheets
'sWSとdWSのシート名が一致しない場合
If sWS.Name <> dWS.Name Then
With sWS.UsedRange
'シートsWSをアクティブにする
sWS.Activate
'シートの最終セルを選択する
ActiveCell.SpecialCells(xlLastCell).Select
'最終セルの行を取得、変数に代入
s_row = ActiveCell.row
'最終行から1行目までを選択
Rows(1 & ":" & s_row).Select
'最終行から1行目までをコピー
Selection.Copy
'集約用シートを選択
dWS.Activate
'行を選択
Rows(d_row).Select
'コピーしたデータを貼り付け
ActiveSheet.Paste
'シートの最終セルを選択する
ActiveCell.SpecialCells(xlLastCell).Select
'最終セルの行を取得、変数に代入
d_row = ActiveCell.Offset(1, 0).row
End With
End If
Next sWS
End If
End Sub

コードの特徴

  • 「ファイルを開く」ダイアログを表示した後、キャンセルをクリックした場合、
    キャンセル処理される様に対応しています。
  • セル、行、列に空白がある場合でも、
    シート毎のデータが含まれる最終行からA行までをコピーして集約します。
  • 集約用にシート「集約シート」を作成します。
    同名シートが既にある場合、同名シートを削除するかの確認ダイアログを表示させ、
    削除するかどうかを選択可能です。

投稿ナビゲーション

前: メールを効率化する7つの方法(その1)初めに趣旨(結論)を書く
次へ: エクセルのシート名を一括取得するVBA

関連記事

2046_000
  • Excel・CSV
  • VBA

【エクセルVBA】指定列で指定文字列を含む、セル個数を集計するVBA

KINGKING007 2025年2月22日 0
2016_000
  • Excel・CSV
  • VBA

【エクセルVBA】特定の文字列を含むセルへ、一括で色を付けるVBA

KINGKING007 2025年2月22日 0
1978_000
  • Excel・CSV
  • VBA

【エクセルVBA】選択範囲の数式を一括で絶対参照にするVBA

KINGKING007 2022年10月10日 0

検索

最近の投稿

  • 【WordPress】スマホで表を横スクロールさせる方法|Gutenberg対応CSSを解説
  • 【エクセルVBA】指定列で指定文字列を含む、セル個数を集計するVBA
  • 【エクセルVBA】特定の文字列を含むセルへ、一括で色を付けるVBA
  • 【エクセルVBA】選択範囲の数式を一括で絶対参照にするVBA
  • 【Excel】ブック全体から文字列を検索する方法

中の人

山田太郎111

自分向けの備忘録も兼ねて、
業務効率化に繋がる情報を投稿中です。

カテゴリー

  • Chrome (2)
  • Excel・CSV (22)
  • Google (1)
  • PDF (2)
  • Power Automate Desktop (1)
  • PowerPoint (3)
  • VBA (20)
  • Word (1)
  • WordPress (1)
  • スプレッドシート (1)
  • バッチファイル (1)
  • メール術 (1)
  • 単語登録 (1)
  • 考え方 (1)

アーカイブ

当サイトについて

  • プライバシーポリシー
  • 免責事項

スポンサーリンク

スポンサーリンク

関連記事

20260208サムネイル_【WordPress】スマホで表を横スクロールさせる方法|Gutenberg対応CSSを解説
  • WordPress

【WordPress】スマホで表を横スクロールさせる方法|Gutenberg対応CSSを解説

KINGKING007 2026年2月8日 0
2046_000
  • Excel・CSV
  • VBA

【エクセルVBA】指定列で指定文字列を含む、セル個数を集計するVBA

KINGKING007 2025年2月22日 0
2016_000
  • Excel・CSV
  • VBA

【エクセルVBA】特定の文字列を含むセルへ、一括で色を付けるVBA

KINGKING007 2025年2月22日 0
1978_000
  • Excel・CSV
  • VBA

【エクセルVBA】選択範囲の数式を一括で絶対参照にするVBA

KINGKING007 2022年10月10日 0
Copyright © All rights reserved. | MoreNews by AF themes。