- 公開日:
エクセルで複数シートを縦に並べる方法
この記事では、エクセルで複数シートを縦に並べる方法をご紹介します。
複数のシートを縦に並べることで、データが見やすく比較しやすくなります。
「複数シートを1シートに縦に並べてまとめる方法」「複数ウィンドウを上下に並べて各シートを比較しやすくする方法」を画像を用いて説明しています。
エクセルで複数シートを縦に並べる方法
エクセルで複数シートを縦に並べる方法を「複数シートを1シートに縦に並べる方法」「複数ウィンドウを縦に並べる方法」に分けてご紹介します。
複数シートを1シートに縦に並べる方法
複数シートを「1シート」に縦に並べる方法を4つご紹介します。
- VSTACK関数を使用する
- VBAを使用する
- INDIRECT関数を使用する
- パワークエリを使用する
VSTACK関数を使用する
VSTACK関数は、配列を垂直方向に順番に結合して、大きな配列として返す関数です。
書式は「=VSTACK(array1,[array2],...)」のように記述します。
VSTACK関数を使って、複数シートを「1シート」に縦に並べる方法は以下のとおりです。
今回は、「Aチーム」「Bチーム」「Cチーム」シートのデータを「プロジェクト進行状況」シートのA列~E列に縦に並べて表示します。
まず、各シートのデータをまとめるシート(例:「プロジェクト進行状況」シート)を用意します。
元データの書式は反映されないため、罫線や色などを設定しておきます。
また、各シートの表には「テーブル1」「テーブル2」「テーブル3」という名前でテーブルが作成されています。
テーブルにすることで、表にデータを追加しても反映されるようになります。STEP 8、STEP 9を参照ください。
各シートのデータを縦に並べたいセル(例:A3セル)に「=VSTACK(」と入力します。
元データの範囲を指定します。
「テーブル1,」と入力して、配列1を指定します。
配列2、配列3を指定します。「テーブル2,テーブル3)」と入力してEnterを押します。
各シートのデータを縦に並べて表示することができました。
元データと連動しているので、試しに元データにデータを追加してみます。
①「Cチーム」シートを選択し、②最終行にデータ(例:追加)を入力します。
「プロジェクト進行状況」シートを選択して戻ると、入力したデータが反映されているのがわかります。
VSTACK関数を使って、複数シートを1シートに縦に並べることができました。
VBAを使用する
VBAを使って、複数シートを「1シート」に縦に並べる方法は以下のとおりです。
複数シートを1シートにまとめる作業が自動化できます。
今回は、「Aチーム」「Bチーム」「Cチーム」シートのデータを「プロジェクト進行状況」シートのA列~E列に縦に並べて表示します。
この方法であれば、元データの書式も反映され、テーブルを作成しなくても追加データが反映されるようになります。
VBAの設定には「開発タブ」が必要ですが、デフォルトでは表示されていないため下記の記事を参考に表示させましょう。
マクロを設定します。
①先頭シート(例:「プロジェクト進行状況」シート)、②開発タブ、③「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」ダイアログボックスが表示されます。
①「挿入」、②「標準モジュール」の順に選択します。
「標準モジュール」が開きました。
以下のコードをコピーして貼り付けてください。「2枚目以降のシートを順に結合して先頭シートにコピー&ペーストしていく」という意味のコードです。
Sub プロジェクト進行状況()
Dim ws As Worksheet
Dim destSheet As Worksheet
Dim lastRow As Long
Dim i As Long
' 結合先のシートを取得(シート1と仮定)
Set destSheet = ThisWorkbook.Sheets(1)
destSheet.Cells.Clear ' 既存のデータをクリア
' 各シートをループ
For i = 2 To ThisWorkbook.Sheets.Count
Set ws = ThisWorkbook.Sheets(i)
' コピー元のシートの使用範囲をコピー
ws.UsedRange.Copy
' 結合先シートの最終行を取得
lastRow = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row
' ペースト位置を設定
If lastRow > 1 Then
lastRow = lastRow + 2 ' 見やすいように空行を追加
End If
' 結合先シートにペースト
destSheet.Cells(lastRow, 1).PasteSpecial Paste:=xlPasteAll
' クリップボードをクリア
Application.CutCopyMode = False
Next i
' 列幅を自動調整
destSheet.Columns.AutoFit
End Sub
デフォルトでは先頭シート(Sheet1)にデータを結合しますが、任意のシートに変更できます。
例えば、結合先のシート名を「Summary」に変更したい場合は、8行目の「Set destSheet = ThisWorkbook.Sheets(1)」の”1”の部分を"Summary"に変更しましょう。
また、シート間に挿入する空白行の数を変更したい場合は、23行目の「lastRow = lastRow + 2」の"2"を任意の数字に変更してください。
コードを貼り付けたらマクロを保存します。
①ファイルタブ、②上書き保存の順に選択します。
「Microsoft Excel」ダイアログボックスが表示されます。
マクロを保存しようとしているExcelがすでに.xlsx拡張子で保存されている場合は、「次の機能はマクロなしのブックに保存できません」と表示されます。
マクロ有効ブックとして保存するので「戻る」ボタンを押します。
「名前を付けて保存」ダイアログボックスが表示されます。
①保存先(例:デスクトップ)を選択し、②ファイル名(例:プロジェクト進行状況)を入力します。③ファイルの種類でExcel マクロ有効ブックを選択し、④「保存」ボタンを押します。
以上でマクロの設定が完了しました。
シートに戻り、①開発タブ、②「マクロ」の順に選択します。
「マクロ」ダイアログボックスが表示されました。
①作成したマクロ(例:プロジェクト進行状況)を選択し、②「実行」ボタンを押します。
各シートのデータを縦に並べて表示することができました。
試しに元データにデータを追加してみます。
①「Cチーム」シートを選択し、②最終行にデータ(例:追加)を入力します。
「プロジェクト進行状況」シートを選択して再度マクロを実行すると、入力したデータが反映されます。
VBAを使って、複数シートを1シートに縦に並べることができました。
INDIRECT関数を使用する
INDIRECT関数を使って、複数シートを「1シート」に縦に並べることもできます。
INDIRECT関数は、セルの参照を文字列で指定する関数です。セルだけではなく、他のシートも参照することができます。
書式は「=INDIRECT(参照文字列,[参照形式])」のように記述します。
使い方については、以下をご参照ください。
ExcelのINDIRECT関数の使い方|セルや他のシートを参照する
上の画像はINDIRECT関数を使って、複数シートの同じセルを「プロジェクト進行状況」シートに縦に並べた例です。
B3セルには「=INDIRECT(A3&"!E1")」が入っており、「Aチーム」「Bチーム」「Cチーム」シートのE1セルのデータを表示しています。
パワークエリを使用する
パワークエリを使って、複数シートを「1シート」に縦に並べることも可能です。
パワークエリとは、データを集計したり整理整頓したりできるエクセルの機能です。
パワークエリの使い方については、以下の記事の「パワークエリを使って複数シート同セルを別シートで列に表示する方法」セクションをご参照ください。
上の画像はパワークエリを使って、複数シートのデータを別ブックの「Sheet1」シートにまとめた例です。
「Aチーム」「Bチーム」「Cチーム」シートを含むブックを取り込み、新しいブックにパワークエリを使って表示しています。
複数ウィンドウを縦に並べる方法
複数シートの「ウィンドウ」を縦に並べる方法をご紹介します。
各シートをウィンドウで開いて並べると、データを比較しやすくなります。
今回は「Aチーム」「Bチーム」「Cチーム」のシートを3つのウィンドウで開き、縦に並べて表示します。
Excelでブックを開きます。このブックが1つ目のウィンドウになります。
①2つ目のシート(例:「Bチーム」シート)、②表示タブ、③「新しいウィンドウを開く」の順に選択します。
2つ目のウィンドウが開きました。
①3つ目のシート(例:「Cチーム」シート)、②表示タブ、③「新しいウィンドウを開く」の順に選択します。
3つ目のウィンドウが開きました。
次に、ウィンドウを縦に並べます。①表示タブ、②「整列」の順に選択します。
「ウィンドウの整列」ダイアログボックスが表示されます。
①「上下に並べて表示」を選択し、②「OK」ボタンを押します。
複数シートをウィンドウごとに縦に並べて表示することができました。