Excelで売上データ、担当者別の一覧、部署別の記録などを管理していると、項目ごとに別シートへ分けて確認したくなる場面があります。
元データを複製して手作業で整理する方法もありますが、件数が増えるほど転記漏れや更新忘れが起きやすくなります。
関数、ピボットテーブル、VBAを使い分ければ、元データを生かしたまま項目別のシートを効率よく作成できます。
項目別にシートを分ける主な方法
・FILTER関数で条件に合う行を表示する方法
・ピボットテーブルで集計結果を項目ごとに展開する方法
・VBAで項目数に応じてシートを自動作成する方法
この記事では、1行目に見出しがある売上表を例にして、エクセルで項目別にシートを分ける実践的な方法を解説します。
それぞれの特徴を理解し、更新頻度やデータ量に合う方法を選びましょう。
関数で項目別にシートを分ける方法【FILTER関数】
それではまず、FILTER関数を使って項目別のデータを別シートに表示する方法について解説していきます。
| 日付 | 担当者 | 商品 | 売上 |
|---|---|---|---|
| 2026/10/1 | 東京 | A商品 | 12000 |
| 2026/10/2 | 大阪 | B商品 | 18500 |
| 2026/10/3 | 東京 | C商品 | 9800 |
FILTER関数は、条件に一致する行だけを別の場所へ抽出できる関数です。
Microsoft 365やExcel 2021以降では、数式を1つ入力するだけで抽出結果が自動的に広がります。
元データを編集したときに分割先の一覧も連動して更新したい場合は、FILTER関数が特に便利です。
元データ用シートと分類用シートの準備
最初に、元になる一覧を「データ」シートへ入力します。
サンプルでは、A列を日付、B列を担当者、C列を商品、D列を売上として使用します。
1行目は必ずヘッダーにし、途中に空白行を入れないことが大切です。
続いて、「東京」という名前のシートと「大阪」という名前のシートを作成します。
分類する項目を担当者ではなく部署、都道府県、商品分類にしたい場合でも、作り方は同じです。
分割先シートのA1セルからD1セルには、元データと同じ見出しを入力しておくと内容を把握しやすくなります。
シート名に使う文字と、抽出条件として入力する文字は一致させます。
たとえば元データが「東京支店」なら、条件セルにも「東京支店」と入力する必要があります。
余計なスペースが含まれていると抽出されない場合があるため、入力規則で選択式にする方法も有効です。
FILTER関数による抽出数式
続いては、東京シートに数式を入力して担当者が東京である行だけを表示する操作を確認していきます。
東京シートのA2セルを選択し、次の数式を入力します。
=FILTER(データ!A2:D1000,データ!B2:B1000=”東京”,”該当データなし”)
この数式では、データシートのA列からD列までを抽出対象にしています。
2つ目の引数であるデータ!B2:B1000=”東京”は、B列が東京と一致する行だけを残す条件です。
3つ目の「該当データなし」は、一致するデータがないときにエラーの代わりに表示する文字です。
FILTER関数の結果はスピル機能により自動展開されるため、A2セルより右側や下側を空欄にしておきます。

抽出先をコピーしてから並べ替えると、元の順序との連動が崩れることがあります。
並べ替えが必要な場合はSORT関数と組み合わせるか、元データ側で順序を整えると安全です。
セル参照で抽出条件を切り替える設定
続いては、数式内に東京と直接書かず、セルの値で抽出条件を切り替える方法を確認していきます。
たとえば東京シートのF1セルに東京と入力し、A2セルには次の数式を入力します。
=FILTER(データ!A2:D1000,データ!B2:B1000=F1,”該当データなし”)
この設定なら、F1セルの文字を大阪へ変更するだけで、表示する行を切り替えられます。
複数シートを作るときは、各シートのF1セルに該当する項目名を入力して、同じ数式をコピーすると作業を短縮できます。
数式中の条件をセル参照にすると、後から部署名や担当者名が変わっても修正箇所を見つけやすくなります。
【操作のポイント】FILTER関数は抽出結果を表示する方法であり、元データそのものを物理的に別シートへ移動する機能ではありません。
ピボットテーブルで項目別にシートを分ける方法
続いては、ピボットテーブルを利用して集計結果を項目別のワークシートへ展開する方法を確認していきます。
| 担当者 | 商品 | 売上 | 件数 |
|---|---|---|---|
| 東京 | A商品 | 12000 | 1 |
| 東京 | C商品 | 9800 | 1 |
| 大阪 | B商品 | 18500 | 1 |
ピボットテーブルは、多数の明細を担当者別、部署別、商品別などに集計したい場合に向いています。
明細を完全に複製する目的よりも、項目別の売上合計や件数を確認する目的で活用すると効果的です。
ピボットテーブルのレポートフィルターページ表示を使うと、フィルター項目ごとのシートをまとめて作成できます。
ピボットテーブルの作成
最初に、データシート内の表のどこか1つのセルを選択します。
挿入タブからピボットテーブルを選択し、テーブルまたは範囲が正しいことを確認します。
新規ワークシートを選んでOKを押すと、空のピボットテーブルとフィールド一覧が表示されます。
行エリアには商品、値エリアには売上を配置すると、商品ごとの売上集計が作成されます。
フィルターエリアには、シートを分ける基準となる担当者を配置します。

売上が件数として集計された場合は、値エリアのフィールド設定を開き、集計方法を合計へ変更します。
金額の見やすさを整えるため、値フィールドの表示形式から桁区切りや通貨表示を設定するとよいでしょう。
レポートフィルターページ表示による分割
続いては、担当者ごとのシートを自動で作成するレポートフィルターページ表示を確認していきます。
ピボットテーブル内を選択した状態で、ピボットテーブル分析タブを開きます。
オプションの一覧からレポートフィルターページの表示を選択します。
ダイアログが表示されたら、フィルターとして設定した担当者を選び、OKをクリックします。

東京、大阪など担当者フィールドに含まれる値ごとに、新しいワークシートが自動作成されます。
作成された各シートは同じピボットテーブルの形式を持ち、該当する担当者に絞り込まれた状態になります。
レポートフィルターページ表示で作成されるのは、ピボットテーブルの集計表です。
元の明細行をそのまま一覧化したいときは、FILTER関数またはVBAのほうが適しています。
元データ更新後の再集計
続いては、データを追加した後にピボットテーブルを更新する手順を確認していきます。
元データの範囲を通常のセル範囲で指定している場合、行を追加すると集計対象から外れることがあります。
この問題を避けるには、元データを選択してCtrlキーとTキーを押し、テーブル形式へ変換しておくと便利です。
テーブル化したデータを元にピボットテーブルを作ると、行の追加に追従しやすくなります。
更新時はピボットテーブル内を右クリックし、更新を選択します。
既に作成したレポートフィルターページのシートは、項目が増えた場合に作り直しが必要になることがあります。
【操作のポイント】ピボットテーブルは集計用に強く、項目ごとの詳細データを確認するには元データへのドリルダウンも併用します。
VBAで項目別にシートを自動作成する方法
続いては、VBAを使って項目別のシートを自動作成し、明細データを振り分ける方法を確認していきます。
| 分類項目 | 作成するシート | 転記内容 |
|---|---|---|
| 東京 | 東京 | 東京の全明細 |
| 大阪 | 大阪 | 大阪の全明細 |
VBAは、項目数が多い場合や、分類ごとに実データを別シートへコピーしたい場合に役立つ方法です。
マクロを実行すると、B列の担当者名を読み取り、同じ名前のシートを作成して該当行を転記します。
毎月同じ形式のファイルを処理する業務では、VBAによる自動化で作業時間を大きく減らせる可能性があります。
開発タブとVBEの表示
最初に、Excelのファイルタブからオプションを開きます。
リボンのユーザー設定で開発にチェックを入れると、リボンに開発タブが表示されます。
開発タブのVisual Basicをクリックするか、AltキーとF11キーを押すとVisual Basic Editorが開きます。
VBE内で挿入メニューから標準モジュールを選択し、表示されたコード画面へマクロを貼り付けます。
マクロを保存するブックは、Excelマクロ有効ブックの形式で保存してください。
通常のxlsx形式ではVBAコードを保存できません。
保存時にはファイルの種類をExcelマクロ有効ブックに変更し、拡張子をxlsmにします。
明細を担当者別シートへ転記するVBA
続いては、データシートのB列を基準にして、担当者別のシートへ明細を振り分けるコードを確認していきます。
Sub 項目別にシートを分ける()
Dim wsData As Worksheet
Dim wsTarget As Worksheet
Dim lastRow As Long
Dim i As Long
Dim itemName As String
Dim nextRow As Long
Set wsData = Worksheets("データ")
lastRow = wsData.Cells(wsData.Rows.Count, "B").End(xlUp).Row
For i = 2 To lastRow
itemName = wsData.Cells(i, "B").Value
On Error Resume Next
Set wsTarget = Worksheets(itemName)
On Error GoTo 0
If wsTarget Is Nothing Then
Set wsTarget = Worksheets.Add(After:=Worksheets(Worksheets.Count))
wsTarget.Name = itemName
wsData.Rows(1).Copy wsTarget.Rows(1)
End If
nextRow = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row + 1
wsData.Rows(i).Copy wsTarget.Rows(nextRow)
Set wsTarget = Nothing
Next i
End Sub
Set wsData = Worksheets(“データ”)の部分は、元データのシート名に合わせて変更します。
このサンプルでは、B列を項目の判定列として使用しています。
部署別に分ける場合は、部署名が入力されている列に合わせてBを変更します。
1行目は見出しとして扱い、2行目から最終行までを順番に判定してコピーする構成です。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 日付 | 担当者 | 商品 | 売上 |
| 2 | 2026/10/1 | 東京 | A商品 | 12000 |
| 3 | 2026/10/2 | 大阪 | B商品 | 18500 |
上のイメージでは、赤枠で示したB列の担当者を基準にしてシートを分けます。
マクロ実行前の注意点と再実行
続いては、VBAを実行する前に確認したい注意点を見ていきましょう。
同じ名前のシートが既に存在する場合、このコードは新規作成せず、そのシートの最終行へデータを追加します。
そのため、同じマクロを繰り返し実行すると、前回の内容に重複して転記される可能性があります。
再実行前には分割済みのシートを削除するか、データ部分を消去してから実行する運用が分かりやすいでしょう。
また、シート名には使用できない文字があります。
項目名にスラッシュ、疑問符、角かっこなどが含まれるとエラーになるため、必要に応じて文字を置換する処理を追加します。
【操作のポイント】VBAで分割する前に、必ず元ブックのコピーを作成しておくと、想定外の上書きや重複に備えられます。
Power Queryによるデータ整理と出力準備
続いては、Power Queryを利用して、項目別に分ける前のデータを整える考え方を確認していきます。
| 処理前の問題 | Power Queryでの対応 |
|---|---|
| 空白行が混ざっている | 空白行の削除 |
| 担当者名の表記ゆれ | 置換とトリム |
| 複数ファイルにデータがある | クエリによる結合 |
Power Queryはデータの取得と変換を行うExcelの機能です。
項目別のシートを直接多数作成する用途よりも、分割前の元データを正しく整備する用途で力を発揮します。
項目名の表記ゆれを直してからFILTER関数やVBAを使うと、分割漏れを防ぎやすくなります。
テーブル形式への変換
最初に、元データ内のセルを選択し、CtrlキーとTキーでテーブルを作成します。
先頭行をテーブルの見出しとして使用する設定を確認してOKを押します。
テーブル化すると、行の追加や数式の参照範囲を管理しやすくなります。
FILTER関数の参照先としても、セル番地ではなく列名を使えるようになります。
たとえば売上表という名前のテーブルなら、列参照を使った数式を組み立てられます。
担当者名の空白と表記ゆれの修正
続いては、分割基準になる項目の表記をそろえる重要性を確認していきます。
東京、東京支店、東京支店スペースというように表記が混在すると、Excelは別の項目として扱います。
手入力データでは、目に見えない前後の空白もよくある原因です。
TRIM関数で余分な空白を取り除くか、Power Queryのトリム機能を利用するとよいでしょう。
分割処理の前に項目列を並べ替えて確認すると、似た名称や空白を見つけやすくなります。
更新を前提にした分割方法の選択
続いては、更新作業を減らすための方法選びを確認していきます。
日々データが増え、常に最新の一覧を確認したいならFILTER関数が適しています。
月ごとの合計や構成比を部門別に見たいなら、ピボットテーブルが便利です。
提出用の個別ファイルや個別シートを一括作成する場合は、VBAを選ぶとよいでしょう。
データ更新中心の運用は関数
集計中心の運用はピボットテーブル
定型的な転記作業の自動化はVBA
【操作のポイント】分割の目的を先に決めると、作成後の修正が少なくなります。
項目別シート分割で起こりやすいエラーと対処
続いては、項目別にシートを分けるときに起こりやすいトラブルと対処法を確認していきます。
| 症状 | 主な原因 | 対処 |
|---|---|---|
| FILTERで抽出されない | 文字列の不一致 | 空白と表記を確認 |
| スピルエラー | 展開先に値がある | セルを空ける |
| VBAの実行エラー | 無効なシート名 | 項目名を確認 |
FILTER関数のスピルエラー
FILTER関数を入力してスピルエラーが出る場合、抽出結果が広がる範囲に文字や数式が残っている可能性があります。
数式を入力したセルの右側と下側を確認し、不要な入力を削除します。
結合セルが含まれている場合も、スピル機能は正しく動作しません。
抽出結果を表示するエリアには、結合セルを使わないことが基本です。
ピボットテーブルに新しい項目が出ないケース
新しい担当者を追加したのにピボットテーブルのフィルターに表示されない場合があります。
この場合は、元データの範囲が追加行を含んでいるか確認します。
次に、ピボットテーブルを右クリックして更新を実行します。
元データがテーブル形式でない場合は、データソースの変更から範囲を広げる必要があるかもしれません。
VBAでシート名エラーが出るケース
VBAでワークシート名を設定するとき、31文字を超える名前は使用できません。
また、スラッシュ、バックスラッシュ、角かっこ、コロン、アスタリスク、疑問符はシート名に使用できません。
項目名が取引先名などの場合は、名前を短くするか、利用できない文字を別の文字へ置換します。
同じ名前のシートが作られる可能性もあるため、項目値の重複と空白を事前に確認しましょう。
【操作のポイント】エラーが出たときは、まず分割基準の列に空欄、余分な空白、使用できない文字がないかを確認します。
まとめ エクセルで項目別にシートを分ける方法(VBA・ピボットテーブル・関数)
エクセルで項目別にシートを分ける方法は、データをどのように使いたいかで選ぶことが重要です。
元データと連動する一覧を作るならFILTER関数、項目別の集計を確認するならピボットテーブル、実データを自動転記するならVBAが適しています。
FILTER関数では、条件に一致するデータを別シートへ自動表示できます。
ピボットテーブルでは、担当者や部署ごとの集計シートを効率よく作成できます。
VBAでは、項目数が多い場合でもワークシートの作成と明細の転記を自動化できます。
まずは少量のサンプルデータで試し、元データをバックアップしてから本番のファイルへ適用しましょう。