クロス集計とは、性別×購入商品のように2つのカテゴリを掛け合わせ、交差するマスに人数や割合を並べて傾向を読む集計手法です。1つの項目だけを数える単純集計では見えない「どの層がどう違うか」を1枚の表で示せるため、アンケート分析やマーケティングの定番手法になっています。この記事では、アンケートのクロス集計を進める順番に沿って、定義と単純集計との違い、表側・表頭や縦横パーセントの見方、単一回答(SA)と複数回答(MA)の集計の分け方、Excel・スプレッドシート・SQL・pandasでの作り方、差が偶然かどうかをカイ二乗検定で確かめる方法、そして集計を毎回手作業で続けるか仕組みにするかの判断までをまとめます。
まとめ:アンケートのクロス集計は設計・集計・検定・判断の4段で進める
- クロス集計は、2つ以上のカテゴリ変数を掛け合わせ、交差セルに度数(人数)や構成比を表示する集計方法。1変数を数える単純集計の一歩先にある。
- 表は表側(左の分析軸)と表頭(上の比較項目)で構成し、割合は原則「横パーセント(行方向)」で読む。各行のn数が小さいセルの割合は参考値にとどめる。
- アンケートでは、調査票を作る前に「どの設問をどの属性で切るか」を集計計画として決めておく。複数回答(MA)は選択率の合計が100%を超えるため、ベースを回答者数に置いて読む。
- 作成手段はExcel・スプレッドシートのピボットテーブルと
COUNTIFS関数、大規模データならSQLのGROUP BYやpandasのpd.crosstab。 - クロス集計で差が見えても偶然かもしれない。カイ二乗検定(Excelなら
CHISQ.TEST)でp値を確認し、有意差かを判断する。期待度数が5未満のセルが多い表では検定結果を鵜呑みにしない。 - 相関は因果ではない。シンプソンのパラドックスやn数の偏りに注意し、必要ならウェイトバック集計で補正する。
- 同じ調査を毎月・毎回くり返すなら、集計表づくりを人の手作業から切り離す段階に来ている。回収数と頻度、リアルタイム性の3条件で判断する。
以下で、定義・見方・アンケートでのやり方・作り方・実装・検定・注意点・仕組み化の判断の順に、具体的な手順とサンプルを見ていきます。
クロス集計とは何か:単純集計との違いとアンケートで使われる理由
クロス集計は、名義尺度や順序尺度のカテゴリ変数を2つ以上組み合わせ、交差するセルに該当する回答者数や構成比を配置する集計方法です。クロス分析やクロス表とも呼ばれます。たとえば「性別」と「商品の購入有無」を掛け合わせると、男女それぞれの購入率を並べて比較でき、全体の購入率だけでは埋もれていた層ごとの差が浮かび上がります。
| 性別 | 購入した | 購入しなかった | 行計(n) |
|---|---|---|---|
| 男性 | 60(40%) | 90(60%) | 150 |
| 女性 | 105(70%) | 45(30%) | 150 |
| 全体 | 165(55%) | 135(45%) | 300 |
全体の購入率は55%ですが、横パーセント(各行を100%として読む割合)を見ると男性40%・女性70%。女性のほうが購入に結びつきやすいと分かります。この「層ごとの差」を1枚で示せる点がクロス集計の価値です。アンケートは回答者の属性(性別・年代・地域・利用歴など)を必ずと言ってよいほど一緒に聞くため、設問の回答を属性で割るクロス集計と相性がよく、調査報告書の大半のページがこの形式で作られます。
クロス集計と単純集計の違い:掛け合わせる変数の数で分かることが変わる
単純集計は1つの変数だけを数える集計で、GT(グランドトータル)とも呼ばれます。「購入した人は全体で何人か」を出すのが単純集計、「購入した人は男女でどう違うか」を出すのがクロス集計です。3つ以上の変数を同時に掛け合わせる場合は多重クロス集計になり、切り口が細かくなる代わりに各セルのn数が急激に減ります。
| 集計方法 | 掛け合わせる変数 | 分かること |
|---|---|---|
| 単純集計 | 1つ | 全体の分布・傾向 |
| クロス集計 | 2つ | 層ごとの差 |
| 多重クロス集計 | 3つ以上 | 層を細分化した差 |
アンケート集計の実務では、まず単純集計で全設問の分布と無回答の量を確かめ、そのうえで気になった設問をクロス集計で掘る、という順に進めます。単純集計そのものの作り方は単純集計(GT集計)とは?集計表の見方とExcelでの作り方で、3重・4重に掛け合わせる読み方は多重クロス集計とは?3重・4重クロスの読み方とExcel・スプレッドシートでの作り方で詳しく扱っています。
属性クロスと設問間クロスの違い:表側に何を置くかで問いが変わる
クロス集計は、表側に置く軸によって大きく2種類に分かれます。属性クロスは、性別・年代・地域といった回答者属性を表側に置き、設問の回答を表頭に置く形です。もっとも一般的で、「どの層に響いたか」を見るのに向きます。一方の設問間クロスは、ある設問の回答を表側、別の設問の回答を表頭に置き、設問どうしの関係を見ます。たとえば「このサービスを知っているか」と「利用したことがあるか」を掛け合わせ、認知と利用の連動を確かめる、といった使い方です。属性で切っても差が出ないとき、設問間クロスに切り替えると回答者の行動の連鎖が見えることがあります。
クロス集計表の見方:表側・表頭と縦横パーセント、n数の読み方
クロス集計表は、数字を出すより「どこをどう読むか」でつまずきます。用語とパーセントの向き、そしてn数の3点を押さえれば、誤読はほぼ防げます。
表側・表頭・セル・ベースの用語:まず分母になるベースを確かめる
表側は表の左端に置く行の見出しで、分析の軸(多くは回答者属性)にあたります。表頭は上端に置く列の見出しで、比較したい項目を並べます。表側と表頭が交差するマスがセルで、ここに度数や割合が入る。ベース(n)は各行の回答者数で、割合の分母になる数字です。どのパーセントも「何を分母にした割合か」で意味が変わるため、表を読む前にベースを確認する習慣をつけると読み違いが減ります。
縦パーセント・横パーセント・全体パーセントの使い分けと読む向き
クロス集計表の割合には、行を分母にする横パーセント、列を分母にする縦パーセント、総数を分母にする全体パーセントの3種類があります。表側に分析軸(属性)を置いた一般的な表では、横パーセント(各行を100%とする)を読むのが基本です。先の例で「男性の40%が購入」と読むのがこれにあたります。縦パーセントは「購入者のうち何割が男性か」という逆向きの問いに答える割合で、目的が入れ替わると読む方向も入れ替わる。表に並ぶ数字の向きを取り違えると結論が反転するため、「知りたいのは行ごとの傾向か、列ごとの内訳か」を先に決めてから読み始めます。
信頼できるサンプルサイズ(n数)の目安と、小さいセルの扱い方
クロス集計は層を細かく切るほど、各セルのベースが小さくなります。目安として、1セルのnが30を下回ると1人の増減で割合が大きく動くため、その割合は参考値として扱い、断定を避けます。多重クロスで「20代女性かつ首都圏かつ会員」のように条件を重ねると、母数が一桁になることも珍しくありません。nが一桁のセルが並ぶ多重クロスは、割合がぶれすぎるため施策判断の根拠にはしない、と割り切るのが安全です。分析前に必要なサンプルをどう割り振るかはサンプル割付とは?アンケート調査の割付方法・決め方を解説が、回答者構成の偏りを母集団に合わせて補正する方法はウェイトバック集計とは?計算式・やり方と有権者構成への補正が参考になります。
アンケートのクロス集計のやり方:調査票の設計から集計表の完成まで5手順
アンケートのクロス集計は、回答が集まってから考え始めると手戻りが大きくなります。どの属性で切るかが決まっていないと、年代の区切りが細かすぎてn数が足りない、比較したい属性をそもそも聞いていない、といった事態が起きるためです。実務では次の5手順で進めます。
- 集計計画を立てる:調査の目的から「どの設問を、どの属性で切るか」を表の一覧(集計仕様)にしておく。表側候補は性別・年代・地域・利用頻度など3〜5軸に絞る。
- 調査票に分析軸を組み込む:表側にする属性を必ず設問に入れ、選択肢の区切り(10歳刻みか20歳刻みかなど)を想定回収数から逆算する。各層のnが30を割らない区切りにする。
- ローデータを整える:1行1回答者・1列1設問の形にそろえ、無回答・矛盾回答・回答時間が極端に短い回答の扱いを決める。
- 単純集計で全体を確かめる:分布の偏りと無回答の多さを見て、クロスをかける設問を選ぶ。
- クロス集計表を作り、差を検定する:横パーセントで層ごとの差を読み、気になる差はカイ二乗検定で偶然かどうかを確かめる。
手順3でつまずきやすいローデータの形はローデータ(raw data)とは?日本語の言い換えとアンケートの形式、Excelでの扱い方で、無回答を集計から外すか残すかの判断は無回答バイアスとは?無回答誤差・未回答との違いと集計での扱い方で扱っています。
単一回答(SA)と複数回答(MA)でクロス集計表のベースを変える
アンケートの設問は、選択肢から1つだけ選ぶ単一回答(SA)と、当てはまるものをいくつでも選ぶ複数回答(MA)に分かれ、クロス集計表の読み方がここで変わります。SAは各行の割合を足すと100%になるので、横パーセントをそのまま比較できます。MAは1人が複数選ぶため、行の合計が100%を超えるのが正常です。MAのベースは「選択肢の延べ数」ではなく「その層の回答者数」に置き、「20代の何%がSNSを選んだか」という選択率として読みます。延べ数を分母にすると、たくさん選ぶ層ほど1項目あたりの割合が小さく見え、層どうしの比較が歪みます。
| 設問形式 | 行の合計 | 割合の分母 |
|---|---|---|
| 単一回答(SA) | 100% | 層の回答者数 |
| 複数回答(MA) | 100%を超える | 層の回答者数 |
| 制限つき複数回答(LA) | 上限数×100%まで | 層の回答者数 |
選択数に上限をつけるLA(リミテッドアンサー)を含めた設問形式の違いはLA(リミテッドアンサー)とは?3LAの意味とSA・MAの違い・集計の注意が詳しく、MA設問にカイ二乗検定をそのままかけると独立性の前提が崩れる点も押さえておくと安心です。
5段階評価(満足度など)はTOP2ボックスにまとめてからクロスにかける
「満足・やや満足・どちらでもない・やや不満・不満」のような5段階評価をそのまま5列でクロス集計すると、セルが細かく割れてn数が不足しがちです。実務では、上位2段階を足した「TOP2ボックス(満足計)」と下位2段階の「BOTTOM2ボックス(不満計)」にまとめてから層別に比べる方法がよく使われます。年代別の満足計を1列に並べると、どの層で満足度が落ちているかが一目で分かる形になる。1〜5点のスコアとして平均値を比べる方法もあるものの、「どちらでもない」に回答が集中する調査では平均の差が小さく出やすいので、TOP2ボックスと併用すると読み誤りを減らせます。同じ尺度の設問を並べるマトリクス形式の作り方はマトリクス形式(マトリクス設問)とは?アンケートでの作り方と行列数の目安・スマホ対策を参照してください。
Excel・スプレッドシートでクロス集計表を作る手順とCOUNTIFS関数の使い方
少量から中規模のデータなら、ExcelやGoogleスプレッドシートで十分にクロス集計表を作れます。手早く作るならピボットテーブル、表の形を固定して繰り返し使うならCOUNTIFS関数が向きます。
Excelピボットテーブルで横パーセントのクロス集計表を作る手順
- 回答データを1行1回答の形(表側にする属性、表頭にする設問がそれぞれ1列)に整える。
- データ範囲を選び、「挿入」→「ピボットテーブル」を選ぶ。
- 行に表側の項目(例:性別)、列に表頭の項目(例:購入有無)、値に「個数」を配置する。
- 値フィールドの設定→「計算の種類」→「行集計に対する比率」を選ぶと、そのまま横パーセントの表になる。
ピボットテーブルは元データを書き換えても更新ボタンひとつで再集計できるため、回答が追加される調査と相性が良い方法です。ただしMA設問を「テレビ,SNS」のように1セルへまとめて入れていると、選択肢ごとに数えられません。MAは選択肢ごとに1列(選んだら1、選ばなければ0)へ展開してから集計します。
COUNTIFS関数で表のレイアウトを固定したクロス集計を作る方法
表のレイアウトを自分で決めて固定したいときは、COUNTIFS関数で各セルの度数を数えます。表側と表頭の条件を並べて指定するだけで、交差セルの人数が求まります。
=COUNTIFS(性別の列, "男性", 購入有無の列, "購入した")
この式を表の各セルにコピーし、行計で割れば横パーセントになります。条件が固定された定型レポートを毎月作るなら、関数方式のほうがレイアウト崩れが起きにくく管理しやすくなります。
Googleスプレッドシートのピボットテーブルとクエリ関数で集計する
Googleスプレッドシートでも手順はExcelとほぼ同じで、「データ」→「ピボットテーブル」で行・列・値を設定する流れです。COUNTIFS関数もそのまま使えるほか、QUERY関数(Google ドキュメント エディタ ヘルプ)を使えばSQLに近い記法で集計軸を柔軟に組み替えられます。pivot句を付けると、表頭の値ごとに列が分かれたクロス集計表がそのまま返ります。
=QUERY(A1:C301, "select B, count(A) where B is not null group by B pivot C", 1)
この例は、A列が回答者ID、B列が性別、C列が購入有無のシートを想定したもの。Googleフォームの回答シートにこの式を置いておけば、回答が増えるたびに表が自動で更新されます。クラウド上でリアルタイムに共同編集できるため、複数人で同じ集計表を見ながら分析を進めるチームに向いています。
SQL・pandasで数万件のアンケート回答をクロス集計する実装例
数万件を超えるログやデータベース上の回答をExcelに貼るのは現実的ではありません。データがデータベースやPython上で直接扱えるなら、SQLやpandasでそのままクロス集計したほうが速く、集計条件もコードとして残せます。マーケティングリサーチ系の解説では触れられないことが多い実装面を、ここで具体化します。
SQLのGROUP BYとCASE式で度数と構成比を1本のクエリで出す
標準SQLでは、GROUP BYで表側の軸をまとめ、表頭の値ごとにCASE式で数え分けることでクロス集計表を作ります。構成比も同じクエリで計算できます。
SELECT
gender AS 性別,
COUNT(CASE WHEN purchased = 'yes' THEN 1 END) AS 購入した,
COUNT(CASE WHEN purchased = 'no' THEN 1 END) AS 購入しなかった,
COUNT(*) AS 行計,
ROUND(100.0 * COUNT(CASE WHEN purchased = 'yes' THEN 1 END) / COUNT(*), 1) AS 購入率
FROM survey
GROUP BY gender;
SQL ServerやOracleにはPIVOT句もありますが、CASE式なら方言に依存せずどのデータベースでも動くため、まずはこの形を覚えておくと応用が利きます。100.0と小数で掛けているのは、整数どうしの割り算で小数点以下が切り捨てられるデータベースがあるためです。集計軸を増やしたいときはGROUP BYに列を足すだけで多重クロスに拡張できます。
pandasのpd.crosstabで横パーセントと合計行を一度に出す
Pythonで分析するなら、pandasのpd.crosstabが最短です。表側と表頭にする列を渡すだけで度数の表が返り、引数を足せば割合や合計も同時に出せます。
import pandas as pd
# 度数のクロス集計表
pd.crosstab(df["gender"], df["product"])
# 横パーセント(行方向の構成比)と行・列合計を付与
pd.crosstab(df["gender"], df["product"],
normalize="index", margins=True)
pandas.crosstabの公式リファレンス(2026年9月時点でpandas 3.0系)のとおり、normalizeは"index"で横パーセント、"columns"で縦パーセント、"all"またはTrueで全体パーセントに切り替わり、margins=Trueで合計行・列が付きます。
複数回答(MA)の設問をpandasのexplodeで展開して選択率を出す
MA設問の回答が「テレビ,SNS,店頭」のように1列にカンマ区切りで入っている場合は、DataFrame.explodeで1選択肢1行に展開してから数えます。分母は展開後の行数ではなく、層ごとの回答者数に置き直すのがポイントになります。
import pandas as pd
# "テレビ,SNS" の形を選択肢ごとの行へ展開する
ma = df.assign(channel=df["channels"].str.split(",")).explode("channel")
# 年代×選択肢の度数(延べ数)
counts = pd.crosstab(ma["age_group"], ma["channel"])
# 分母は年代ごとの回答者数(延べ数ではない)
base = df["age_group"].value_counts()
rate = counts.div(base, axis=0).mul(100).round(1)
print(rate) # 行の合計が100%を超えるのがMAの正しい姿
集計後にテキストマイニングやトピック分析まで進める場合は、Pythonでアンケート分析|集計・共起ネットワーク・LDAの実装コードで自由回答の処理まで含めた実装を紹介しています。前処理前の生データの形は、手順3で触れたローデータの解説も合わせて確認してください。
カイ二乗検定でクロス集計の差が偶然かどうかを判定する方法と数値例
クロス集計で男性40%・女性70%のような差が出ても、それが本当の差なのか、たまたまのばらつきなのかは、表を眺めるだけでは判断できません。ここで使うのがカイ二乗検定(独立性の検定)です。手順は、まず「性別と購入は無関係」と仮定したときに期待される人数(期待度数)を求め、実測との食い違いの大きさをカイ二乗値として数値化し、そこからp値を計算します。
期待度数は「行合計×列合計÷総計」で求め、自由度は「(行数−1)×(列数−1)」です。Excelなら実測度数の表と期待度数の表を用意し、CHISQ.TEST関数(Microsoft サポート)でp値を直接求められます。
=CHISQ.TEST(実測度数の範囲, 期待度数の範囲)
Pythonでは、scipy.stats.chi2_contingency(2026年9月時点でSciPy 1.18系)にクロス集計表を渡すだけで、カイ二乗値・p値・自由度・期待度数がまとめて返ります。
from scipy.stats import chi2_contingency
table = [[60, 90], # 男性:購入した、購入しなかった
[105, 45]] # 女性:購入した、購入しなかった
chi2, p, dof, expected = chi2_contingency(table)
print(chi2, p, dof) # p が 0.05 未満なら有意差ありと判断する
冒頭の性別×購入の表では、期待度数は購入した82.5人・購入しなかった67.5人(男女とも)。この表を計算すると、補正なしのカイ二乗値が約27.27、p値は約1.8×10-7で、0.05を大きく下回るため「性別と購入には関連がある」と判断できます。ここで1つ注意があり、scipyのchi2_contingencyは自由度が1(2×2の表)のとき既定でイェーツの連続性補正をかけるため、同じ表でもカイ二乗値は約26.07、p値は約3.3×10-7と、Excelの計算式(補正項を含まない)の結果と少しずれる。値をそろえたいときはcorrection=Falseを指定します。
p値が有意水準(一般に0.05)を下回れば「無関係」という仮定を棄却し、性別と購入には統計的に意味のある関連があると判断します。どのセルが差に効いているかまで見たいときは、調整済み残差が手がかりになる。なお、SciPyとMicrosoftのドキュメントはどちらも、各セルの期待度数が5以上であることを検定が妥当に働く目安として挙げています。層を細かく切りすぎて期待度数が5を下回るセルが並ぶ表は、選択肢をまとめるか、フィッシャーの正確確率検定に切り替えるのが無難です。差を見つけたら、まず検定で裏を取る。この一手間が、思い込みでの施策決定を防ぎます。
クロス集計の注意点:相関と因果の混同、シンプソンのパラドックスの誤読
クロス集計は直感的に読める分、誤った結論に飛びつきやすい手法でもあります。特に次の2点は、分析の質を左右します。
相関と因果の混同への注意:表が示すのは関連であって原因ではない
クロス集計が示すのは変数どうしの関連(相関)であって、因果関係ではありません。「雨の日に傘が売れる」という表が出ても、「雨だから売れた」のか「セールを重ねていた」のかは、この表だけでは決められません。関連が見えたら、それは仮説の出発点であって結論ではない。この姿勢で次の検証に進みます。
シンプソンのパラドックスへの注意:全体と層別で傾向が逆転する理由
全体で見ると傾向Aなのに、層別に分けると全ての層で逆の傾向が出る——これがシンプソンのパラドックスです。たとえば全体ではA施策の反応率が高く見えても、年代別に割るとどの年代でもB施策のほうが高い、という逆転が起こり得ます。原因は、層ごとにサンプルの構成比が偏っていることにあります。全体の1枚だけで意思決定せず、重要な属性で層別クロスをかけて逆転が起きていないか確かめるのが安全です。回答者の構成そのものが母集団とずれている場合は、ウェイトバック集計で補正してから読むと、偏りによる誤読を減らせます。
クロス集計を手作業で続けるか、集計の仕組みを作るかの判断基準
クロス集計そのものはExcelで作れますが、集計後に「どの層で差が出たか」を読んで施策に移すまでの時間は、表を作る作業にどれだけ手を取られるかで大きく変わります。調査の規模と頻度に応じて、手段を次のように切り替えるのが現実的です。
| 状況 | 向く手段 | 見送る場面 |
|---|---|---|
| 年数回・数百件の単発調査 | Excelのピボット | 定型表を毎回作り直す |
| 毎月の定点調査・数千件 | 関数やクエリの定型化 | 表が数十枚に増える |
| 常時回収・数万件以上 | 集計システムの構築 | 調査が1回限りで終わる |
採用の条件ははっきりしています。同じ調査を毎月以上の頻度でくり返し、集計表が数十枚に及ぶ、または回答をリアルタイムで部署に共有したいなら、クロス集計を人の手作業から切り離す段階です。集計仕様(どの設問をどの属性で切るか)を一度定義すれば、回答が入るたびに同じ表が自動で並び、担当者は差の解釈と検定に時間を使えます。反対に、年に数回の単発調査で表も10枚程度なら、仕組み化の費用は回収できないので、Excelやスプレッドシートで十分です。判断に迷うときは、「集計表づくりに毎回かかっている人の時間×年間の回数」を見積もると答えが出やすくなります。
アンケートツールごとの集計機能や、Excel集計から切り替える目安はアンケートシステムとは?機能・料金相場と選び方、Excel集計から切り替える判断基準を解説で比較しています。既製ツールの集計画面では自社の属性区分や社内データとの突き合わせができない場合は、回収から集計・クロス分析・レポート出力までを自社の業務に合わせて作るアンケート管理システム開発という選択肢もあります。
よくある質問
アンケートのクロス集計はどんな手順で進めればよいですか?
集計計画を立てて分析軸を決め、調査票に属性の設問を組み込み、回収後にローデータを整えてから、単純集計で全体を確かめ、最後にクロス集計表を作って差を検定する、の順で進めます。回収してから軸を考えると、比較したい属性を聞いていない事態が起きやすくなります。
クロス集計と単純集計の違いは何ですか?
単純集計は1つの変数だけを数える集計(全体の分布)で、クロス集計は2つの変数を掛け合わせて層ごとの差を見る集計です。単純集計で全体像を、クロス集計で内訳の違いをつかむ、という役割分担になります。
クロス集計と多重クロス集計はどう違いますか?
2変数を掛け合わせるのがクロス集計、3変数以上を同時に掛け合わせるのが多重クロス集計です。多重にすると切り口は細かくなりますが各セルのn数が小さくなります。詳しくは多重クロス集計とは?3重・4重クロスの読み方とExcel・スプレッドシートでの作り方を参照してください。
Excelでクロス集計に使う関数は何ですか?
各セルの人数を数えるならCOUNTIFS関数、有意差を確かめるならカイ二乗検定のCHISQ.TEST関数を使います。表を手早く作るだけならピボットテーブルが便利で、GoogleスプレッドシートならQUERY関数のpivot句でもクロス集計表を作れます。
設問間クロスとは何ですか?
ある設問の回答を表側、別の設問の回答を表頭に置き、設問どうしの関係を見るクロス集計です。属性(性別・年代など)で切る属性クロスに対し、回答の連動(認知と利用など)を確かめたいときに使います。