Excelのピボットテーブルで「Issueあり/なし」の割合(%)を出し、名前・チーム別にどのIssueが多いかまで掘り下げる手順をまとめます。複数Issueを選べる入力設計と、Power Query/VBAの代案も解説します。
この記事でできるようになること
- ピボットテーブルでIssue(問題あり)とNone(問題なし)の比率を%表示できる
- 名前別/チーム別に、どのIssueが多いかをフィルターやドリルダウンで深掘りできる
- 入力側で「Issueを複数選択したい」要望に対して、集計が崩れにくい現実的なデータ設計を選べる
最初に押さえる:ピボットが強いのは「縦持ち(正規化)」のデータ
ピボットテーブルは、基本的に1行=1レコードの形(縦に積み上がるテーブル)で最も威力を発揮します。特に「Issueを複数選択したい」という要件がある場合、入力は楽でも、後段の集計が破綻しやすい形が存在します。
迷ったら、まずは次の考え方を採用すると失敗が減ります。
- 推奨:同じ人に複数Issueがあるなら行を分ける(1行=1Issue)
- どうしても1セルに「Late; Missing item」のように入れるなら、集計前にPower Queryで行に展開してからピボットする
推奨する入力テーブル例(1行=1Issue)
以下は、後で「Issueあり/なし割合」と「Issue内訳」を両立しやすい構成例です。Excelでは、範囲を選んで[挿入]→[テーブル]にしておくと、ピボットやPower Queryで扱いやすくなります。
| EntryID | Date | Team | Name | Issue |
|---|---|---|---|---|
| 2026-01-02_A01 | 2026/01/02 | Sales | Suzuki | None |
| 2026-01-02_A02 | 2026/01/02 | Sales | Sato | Late |
| 2026-01-02_A02 | 2026/01/02 | Sales | Sato | Missing item |
| 2026-01-02_A03 | 2026/01/02 | Support | Tanaka | Wrong data |
ポイント:同じ入力(同じ人・同じ日など)に対して複数Issueが付く可能性があるなら、EntryID(入力単位のID)を持たせておくのがおすすめです。後で「入力件数ベースのIssue率(あり/なし)」を出したいときに、重複を避けた集計ができます。
「None とそれ以外」を安定して分けるための列を追加する
ピボット上でグループ化(None以外をまとめてIssuesにする)でも実現できますが、後から新しいIssueが追加されたときにグループに入らず、意図せずバラけることがあります。最初から入力データ側に分類列を持たせると堅牢です。
| 追加する列名 | 例 | 狙い |
|---|---|---|
| IssueGroup | No Issue / Issues | Noneとそれ以外を固定のルールで分類 |
| IssueFlag | 0 / 1 | 割合計算をシンプルに(平均=発生率にしやすい) |
たとえば、テーブルの列として次のような式を入れます(列名は環境に合わせてください)。
- IssueGroup:No Issue / Issuesに振り分けたい場合
=IF([@Issue]="None","No Issue","Issues") - IssueFlag:Issueあり=1、なし=0にしたい場合(割合を平均で出す発想)
=IF([@Issue]="None",0,1)
ピボットで「Issueあり/なし」の割合(%)を出す基本手順
ここからは、Excelの標準機能だけで「Issueあり/なし」を%で見える化する手順です。最短で作るなら値フィールドを2回入れて、片方を%表示にします。
手順1:ピボットテーブルを作成する
- 入力データの表(テーブル)内の任意のセルを選択
- [挿入]→[ピボットテーブル]
- 配置先(新規シート推奨)を選んで作成
手順2:フィールド配置(%表示を作る型)
「Issueあり/なし」の比率を出すために、同じ項目(IssueGroupなど)を値に2回入れます。
| エリア | 入れるフィールド(例) | 意図 |
|---|---|---|
| 行(Rows) | IssueGroup(またはIssue) | IssuesとNo Issueを並べる |
| 値(Values) | IssueGroup(1つ目) | 件数(Count) |
| 値(Values) | IssueGroup(2つ目) | %表示用(同じ項目を再利用) |
手順3:2つ目の値を「%」にする(値の表示形式)
- 値エリアに入れた2つ目のフィールドを右クリック
- [値フィールドの設定](または[値の表示形式])を開く
- [値の表示形式]→「列集計に対する割合(% of Column Total)」を選択
- 表示名を「Percent」や「割合(%)」などに変更
- 必要に応じて、表示形式(数値の書式)で小数点以下の桁を調整
ここまでで、IssuesとNo Issueの件数と割合(%)が並びます。
手順4:Issueを「None」と「それ以外」に分ける方法は2通り
分け方は次の2通りです。長期運用や更新が多いならA(分類列)が安定します。
A. 入力データ側にIssueGroup列を作る(おすすめ)
- 入力テーブルにIssueGroup(No Issue / Issues)を追加
- ピボットの行(Rows)にIssueGroupを置くだけで完成
- 新しいIssueが増えても、None以外なら自動でIssues側に入る
B. ピボット上でグループ化する(すぐ試したい人向け)
- ピボットの行ラベルで、None以外のIssueをCtrlで複数選択
- 右クリック→[グループ化]
- 自動で「グループ」と「None」が分かれるので、グループ名をIssuesなどに変更
- None側をNo Issueなどに変更
注意点として、後から新しいIssue値が入力されると、グループ化が意図通りにならないことがあります。更新が多い運用では、Aの「分類列」を推奨します。
名前別・チーム別に「どのIssueが多いか」を掘り下げる
「Issueあり/なし(%)」だけでなく、誰にどのIssueが多いかを見たい場合は、ピボットの行階層を作っておくと、クリックで深掘りできます。
チーム別に「Team – Issues – Count – Percent」を出す配置例
チームで切ったときに比率が分かりやすい、定番の配置です。
| エリア | フィールド | 補足 |
|---|---|---|
| 行(Rows) | Team → IssueGroup | チーム内の「あり/なし」を見たい |
| 値(Values) | 件数(Count) | IssueGroupをCount |
| 値(Values) | 割合(Percent) | 「親行集計に対する割合」を使うとチーム内%になる |
チーム内の%を正しく出す設定(重要)
「列集計に対する割合」は、全体を基準にした%になりやすく、チーム別で見ると直感とズレることがあります。チームごとの内訳比率を見たいなら、Percent側は次を選びます。
- 値を右クリック →[値の表示形式]→「親行集計に対する割合(% of Parent Row Total)」
これで、各チームの中でIssueあり/なしが何%かが一目で分かります。
名前別まで掘り下げたい場合(Team → Name → Issue)
「チーム→名前→Issue内訳」まで見たいなら、行(Rows)を次の順で置くのが分かりやすいです。
- Team
- Name
- IssueGroup(Issues / No Issue)
- Issue(詳細)
この形にしておくと、普段はTeamやNameの階層だけを見て、必要なときだけIssueを展開して“どのIssueが多いか”を確認できます。
ドリルダウン(明細表示)で「その集計の中身」をすぐ確認する
ピボットの集計セルをダブルクリックすると、その集計に該当する元データだけが別シートに抽出されます。たとえば「SupportチームのLate」だけを抽出して、具体的な名前や日付をチェックするといった使い方ができます。
スライサーでフィルター操作を“レポートっぽく”する
現場で使うレポートは、フィルターの操作性が重要です。ピボットテーブルを選択して、次を試してください。
- [ピボットテーブル分析](または[分析])→[スライサーの挿入]
- Team、Name、IssueGroup、Issueなどを選択
- 複数のピボットがある場合は、スライサーを右クリック→[レポート接続]で同じスライサーに連動させる
「チーム別のIssue率」と「Issue内訳ランキング」を同時に置き、スライサーで切り替える構成にすると、会議や朝会でも使える“分析画面”になります。
ピボットの見た目がスッキリしないときの整形テンプレ
ピボットは初期状態だと、行ラベルが1列に詰まったり、小計や総計が多すぎたりして読みづらくなりがちです。次の設定で、レポートとして見やすい体裁に寄せられます。
| 場所 | 設定 | 効果 |
|---|---|---|
| [デザイン] | [レポートのレイアウト]→表形式で表示 | Team列、Name列…が分かれて見やすい |
| [デザイン] | [レポートのレイアウト]→すべてのアイテムラベルを繰り返す | 行が増えてもTeam/Nameが追える |
| [デザイン] | [小計]→必要に応じて表示/非表示 | 小計が多すぎるゴチャつきを解消 |
| [デザイン] | [総計]→必要に応じて行/列の総計をオフ | 「見せたい数字」だけに絞れる |
| 並べ替え | 値で降順ソート | 多いIssueを上に出せる |
特に「表形式で表示」+「ラベルを繰り返す」は、Team→Name→Issueのように階層を深くしたときの可読性が段違いです。
入力側で「ドロップダウンから複数Issueを選びたい」問題の整理
結論から言うと、Excelの標準のデータ入力規則(ドロップダウン)だけでは、1セルに複数の選択肢を保持する“複数選択ドロップダウン”は想定されていません。VBAなどの工夫で実現はできますが、集計や運用面で注意点があります。
まず決める:比率(%)の分母は「入力件数」か「Issue件数」か
複数Issueがある場合、集計の分母をどこに置くかで設計が変わります。
| 見たい指標 | 分母 | おすすめのデータ形 |
|---|---|---|
| Issueが発生した入力の割合(例:日報のうち何%が問題あり) | 入力件数(EntryIDの件数) | EntryIDを持たせて、重複しない件数で集計 |
| Issueの内訳(Lateが何件、Missing itemが何件) | Issueの件数 | 1行=1Issue(複数Issueは行を分ける) |
両方を同時にやりたいなら、1行=1Issueに正規化しつつ、元の入力単位を示すEntryIDを残しておくのが最も後悔しない設計です。
複数Issue入力を実現する現実的な4つの方法
方法1:推奨「1行=1Issue」にして、ドロップダウンは通常運用
最もトラブルが少なく、ピボットとも相性が良い方法です。入力者にとっても「同じ名前が複数行に出る」だけなので、教育コストが低いのが利点です。
- Issue列はデータ入力規則で単一選択(Late / Missing item / None …)
- 複数Issueがあるときは、同じEntryID・同じNameで行を追加してIssueだけ変える
- 「None」は、Issueが本当に無いときだけ1行で入力する(IssueがあるならNoneは入れない運用にする)
入力を楽にする小技
- テーブルの最終行でTabを押すと次行が追加される(Excelテーブルの機能)
- 同じ人の行をコピーしてIssueだけ変える
- TeamはNameから自動取得(VLOOKUP/XLOOKUP)にして入力ミスを減らす
方法2:チェックボックスや0/1列で入力し、後でPower Queryで縦持ち化
入力者が「複数を同時に選びたい」なら、Issueごとに列を作ってチェック(1)する設計が向きます。例えば次のような形です。
| Date | Team | Name | Late | Missing item | Wrong data |
|---|---|---|---|---|---|
| 2026/01/02 | Sales | Sato | 1 | 1 | 0 |
| 2026/01/02 | Sales | Suzuki | 0 | 0 | 0 |
この「横に広い入力」を、Power Queryで列のピボット解除(Unpivot)すると、ピボットが得意な「1行=1Issue」に変換できます。入力は複数選択しやすく、集計も崩れにくい折衷案です。
方法3:1セル複数選択(VBA)で実現する(ただし運用注意)
どうしても「ドロップダウンから複数選択して、1セルに溜めたい」場合は、VBAでWorksheet_Changeイベントを使って、選択値をセミコロン区切りで追記する実装が定番です。
注意:マクロを使うため、セキュリティ設定、Excel for the web非対応、共同編集との相性など、運用制約が出ます。さらに、このままではピボットが集計できないので、結局Power Queryなどで正規化が必要になります。
参考例(選択を「; 」区切りで追記し、重複は入れない簡易版):
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ExitHandler
Dim rng As Range
Set rng = Range("E2:E1000") 'Issue入力範囲(例)
If Intersect(Target, rng) Is Nothing Then Exit Sub
If Target.CountLarge > 1 Then Exit Sub
Application.EnableEvents = False
Dim newVal As String, oldVal As String
newVal = Target.Value
Application.Undo
oldVal = Target.Value
'空に戻す操作
If newVal = "" Then
Target.Value = ""
GoTo ExitHandler
End If
If oldVal = "" Then
Target.Value = newVal
Else
'重複チェック(完全一致)
If InStr(1, ";" & oldVal & ";", ";" & newVal & ";", vbTextCompare) = 0 Then
Target.Value = oldVal & "; " & newVal
Else
Target.Value = oldVal
End If
End If
ExitHandler:
Application.EnableEvents = True
End Sub
この方式を採用するなら、次の「Power Queryで行に展開」までをセットで考えると、レポートが安定します。
方法4:1セルに複数Issueを入れ、Power Queryで「行」に展開してからピボット
入力の都合で「Late; Missing item」のように1セルに溜めた場合でも、Power Queryで区切り文字で分割→行に展開すれば、ピボットに流せます。
Power Queryで「複数Issue」を行に展開する手順
ここでは、Issue列に「Late; Missing item」のような値が入っている前提で、ピボット向けに正規化する流れを紹介します(Excel 2016以降、Microsoft 365なら標準搭載)。
- 入力テーブル内を選択 → [データ]→[テーブルまたは範囲から](Power Queryを起動)
- Power QueryエディターでIssue列を選択
- [列の分割]→[区切り記号による分割]
- 区切り文字を「;」に設定し、詳細オプションで「行に分割」を選択
- 分割後、前後の空白が残る場合は、Issue列にトリム(空白の削除)を適用
- Noneと他Issueが同居する入力があるなら、ルールを決める(例:Noneを削除、またはIssueGroupで再分類)
- [閉じて読み込む]でシートに出力(またはデータモデルへ)
- 出力されたテーブルからピボットを作成
Power Queryにしておくと、入力が追加されても更新(Refresh)だけで同じ変換を繰り返せます。日次・週次のレポート運用ほど効果が大きいです。
「Issueあり/なし割合」を“入力件数ベース”で正しく出したい場合(上級)
複数Issueを行に展開すると、Issueの件数は正確に数えられます。一方で、「日報(入力)あたり何%がIssueありか」を出したい場合、同じEntryIDが複数行に増えるため、そのままCountすると分母・分子がズレます。
この場合は、次のどちらかが現実解です。
解決策A:EntryIDの「重複しない件数(Distinct Count)」で集計する
- ピボット作成時に「このデータをデータモデルに追加する」にチェック
- 値フィールドでEntryIDを追加し、集計方法をDistinct Count(重複しない個数)にする
- IssueGroup(Issues / No Issue)で行を分け、EntryIDのDistinct Countを出す
- 割合は「親行集計に対する割合」などで算出
これで、複数Issueがあっても「入力1件」は1件として数えられます。
解決策B:IssueFlagを入力単位に落とす(入力1件=1行の別テーブルを持つ)
「入力件数ベースのIssue率」と「Issue内訳」を同じピボットで全部やらないのも合理的です。
- 入力単位テーブル:EntryID / Date / Team / Name / HasIssue(0/1)
- Issue明細テーブル:EntryID / Issue(1行=1Issue)
前者はIssue率、後者は内訳分析に使う、と役割を分けると、説明もしやすく、集計もブレません。
よくあるつまずきと対処(チェックリスト)
%が想定と違う(全体%になってしまう)
- チーム内%を見たい → 「親行集計に対する割合」を選ぶ
- Name内%を見たい → Nameを親行にして同様に設定
Noneが空白になって集計がズレる
- 入力で空白が混じると、Countの対象外になりがちです
- Issue列は必須入力にするか、空白をNoneに置換する(Power Queryや入力ルール)
新しいIssueが増えたらグループ化が崩れた
- ピボット上のグループ化は新規値に追随しません
- IssueGroup列(No Issue / Issues)をデータ側で作ると安定します
名前の表記揺れで人別集計が割れる
- 入力は手打ちより、マスタ参照(XLOOKUPなど)で統一
- 可能なら社員IDなどのキー列を持つ(表示名と別に)
更新してもピボットに新データが入らない
- データ範囲を「テーブル」にしておく(自動拡張)
- Power Queryを使う場合は「すべて更新」を実施
まとめ:おすすめの最短ルート
Excelで「Issueあり/なしの割合(%)」と「名前・チーム別のIssue内訳」を両立させるなら、次の流れが最短で堅牢です。
- 入力はテーブル化し、Team列を必ず持つ
- Noneとそれ以外を分けるIssueGroup列(必要ならIssueFlagも)を用意
- ピボットは値を2回入れて「件数+%」を並べる
- %は目的に応じて列集計%/親行集計%を使い分ける
- 複数Issue入力は、可能なら1行=1Issueへ。難しければPower Queryで行展開を前提に設計する
この型を作っておけば、日々データが増えても「更新」だけでレポートが回り、チーム別の傾向や個人別の偏りもすぐ見えるようになります。

コメント