ExcelピボットテーブルでIssueあり/なし割合(%)を集計し、名前・チーム別に内訳を分析する方法(複数選択入力も解説)

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で扱いやすくなります。

EntryIDDateTeamNameIssue
2026-01-02_A012026/01/02SalesSuzukiNone
2026-01-02_A022026/01/02SalesSatoLate
2026-01-02_A022026/01/02SalesSatoMissing item
2026-01-02_A032026/01/02SupportTanakaWrong data

ポイント:同じ入力(同じ人・同じ日など)に対して複数Issueが付く可能性があるなら、EntryID(入力単位のID)を持たせておくのがおすすめです。後で「入力件数ベースのIssue率(あり/なし)」を出したいときに、重複を避けた集計ができます。

「None とそれ以外」を安定して分けるための列を追加する

ピボット上でグループ化(None以外をまとめてIssuesにする)でも実現できますが、後から新しいIssueが追加されたときにグループに入らず、意図せずバラけることがあります。最初から入力データ側に分類列を持たせると堅牢です。

追加する列名例狙い
IssueGroupNo Issue / IssuesNoneとそれ以外を固定のルールで分類
IssueFlag0 / 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:ピボットテーブルを作成する

  1. 入力データの表(テーブル)内の任意のセルを選択
  2. [挿入]→[ピボットテーブル]
  3. 配置先(新規シート推奨)を選んで作成

手順2:フィールド配置(%表示を作る型)

「Issueあり/なし」の比率を出すために、同じ項目(IssueGroupなど)を値に2回入れます。

エリア入れるフィールド(例)意図
行(Rows)IssueGroup(またはIssue)IssuesとNo Issueを並べる
値(Values)IssueGroup(1つ目)件数(Count)
値(Values)IssueGroup(2つ目)%表示用(同じ項目を再利用)

手順3:2つ目の値を「%」にする(値の表示形式)

  1. 値エリアに入れた2つ目のフィールドを右クリック
  2. [値フィールドの設定](または[値の表示形式])を開く
  3. [値の表示形式]→「列集計に対する割合(% of Column Total)」を選択
  4. 表示名を「Percent」や「割合(%)」などに変更
  5. 必要に応じて、表示形式(数値の書式)で小数点以下の桁を調整

ここまでで、IssuesとNo Issueの件数と割合(%)が並びます。

手順4:Issueを「None」と「それ以外」に分ける方法は2通り

分け方は次の2通りです。長期運用や更新が多いならA(分類列)が安定します。

A. 入力データ側にIssueGroup列を作る(おすすめ)

  • 入力テーブルにIssueGroup(No Issue / Issues)を追加
  • ピボットの行(Rows)にIssueGroupを置くだけで完成
  • 新しいIssueが増えても、None以外なら自動でIssues側に入る

B. ピボット上でグループ化する(すぐ試したい人向け)

  1. ピボットの行ラベルで、None以外のIssueをCtrlで複数選択
  2. 右クリック→[グループ化]
  3. 自動で「グループ」と「None」が分かれるので、グループ名をIssuesなどに変更
  4. 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」だけを抽出して、具体的な名前や日付をチェックするといった使い方ができます。

スライサーでフィルター操作を“レポートっぽく”する

現場で使うレポートは、フィルターの操作性が重要です。ピボットテーブルを選択して、次を試してください。

  1. [ピボットテーブル分析](または[分析])→[スライサーの挿入]
  2. Team、Name、IssueGroup、Issueなどを選択
  3. 複数のピボットがある場合は、スライサーを右クリック→[レポート接続]で同じスライサーに連動させる

「チーム別の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)する設計が向きます。例えば次のような形です。

DateTeamNameLateMissing itemWrong data
2026/01/02SalesSato110
2026/01/02SalesSuzuki000

この「横に広い入力」を、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なら標準搭載)。

  1. 入力テーブル内を選択 → [データ]→[テーブルまたは範囲から](Power Queryを起動)
  2. Power QueryエディターでIssue列を選択
  3. [列の分割]→[区切り記号による分割]
  4. 区切り文字を「;」に設定し、詳細オプションで「行に分割」を選択
  5. 分割後、前後の空白が残る場合は、Issue列にトリム(空白の削除)を適用
  6. Noneと他Issueが同居する入力があるなら、ルールを決める(例:Noneを削除、またはIssueGroupで再分類)
  7. [閉じて読み込む]でシートに出力(またはデータモデルへ)
  8. 出力されたテーブルからピボットを作成

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で行展開を前提に設計する

この型を作っておけば、日々データが増えても「更新」だけでレポートが回り、チーム別の傾向や個人別の偏りもすぐ見えるようになります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次