コールセンターの入電予測と必要人員をClaude for ExcelでErlang Cから試算する
過去の時間帯別入電数から曜日・時間帯の予測表を作り、Erlang Cの式で目標応答率に必要な席数を出し、離席分を上乗せして人員に戻す手順。Claude for Excelへの指示例と検算つき。
コールセンターの必要人員は、時間帯ごとの入電数を予測し、目標の応答率を満たす席数をErlang C(アーランC)の式で出し、離席や休憩の分を上乗せして決めます。入電予測と席数の計算は別の作業なので、表も2つに分けて組みます。
Claude for Excelは、開いているブックの数式を保ったまま表を組み、セル単位の出典つきで式を説明します。この記事では、実績シートから曜日×時間帯の予測表を作り、Erlang Cの式をセルに置いて必要席数を拾い、人員に戻すところまでを示します。最後に、結果を現場に渡す前の検算も挙げます。
試算の流れとClaude for Excelに任せる範囲
試算は4段階です。実績から予測入電数を出し、それを負荷(アーラン)に換え、Erlang Cで目標を満たす最小の席数を探し、最後に離席分を足して人員にします。
入電予測から必要人員までの4段
- 1
予測入電数
曜日と時間帯が同じ過去の実績を平均します。
- 2
負荷(アーラン)
予測入電数に平均処理時間を掛け、区間の秒数で割ります。
- 3
必要席数
目標の応答率を満たす最小の席数をErlang Cで探します。
- 4
必要人員
離席・休憩の割合を見込み、席数を人員に戻します。
Claude for ExcelはExcelのアドインで、Pro・Max・Team・Enterpriseの各プランで使えます。開いているブックについて質問するとセル単位の出典つきで答え、前提の値を変えるときは数式の関係を保ったまま下流のセルを更新します。複数タブのブックも扱えます。
対応するExcelは、Web版、WindowsのMicrosoft 365版(ビルド16.0.13127.20296以降)、Macのバージョン16.46以降です。Excel 2016と2019の永続ライセンス版、iPad、Androidでは動きません。
任せるのは、シートの骨組みづくり、式の組み立て、式のたどり直しです。目標応答率や平均処理時間の目標は、運用の責任者が決める前提です。決まった値を前提シートに入れ、Claudeには動かす側を頼みます。
実績シートを整える
最初に整えるのは実績シートです。1行を「ある日のある時間帯」にした縦持ちの表にします。
| 列 | 内容 | 例 |
|---|---|---|
| A | 内容日付 | 例2026-09-07 |
| B | 内容曜日番号 | 例1(月曜) |
| C | 内容開始時刻(30分刻み) | 例9:00 |
| D | 内容入電数 | 例182 |
| E | 内容除外フラグ | 例0 |
曜日番号はB列に =WEEKDAY(A2,2) と入れます。第2引数を2にすると月曜が1、日曜が7になり、表示言語に左右されません。
E列は予測から外す日を示します。祝日、システム障害で入電が欠けた日、大型キャンペーンの翌日などに1を立てます。除外の判断は現場の運用知識なので、Claudeに推測させず、人が立てます。
入電数は「受付数」か「放棄を含む着信数」かで意味が変わります。席数を出したいのは、応答に至らなかった呼も含めた需要です。ACDの出力から列を選ぶときは、放棄呼を含めた着信数を使います。
曜日×時間帯の予測表を作る
予測表も縦持ちにします。1行が「曜日と時間帯の組」で、7曜日×営業時間の区間数だけ行を並べます。
| 列 | 内容 |
|---|---|
| A | 内容曜日番号 |
| B | 内容開始時刻 |
| C | 内容予測入電数 |
| D | 内容平均処理時間(秒) |
| E | 内容負荷(アーラン) |
予測入電数は、同じ曜日・同じ時間帯の実績を平均し、前提シートの伸び率を掛けます。
=AVERAGEIFS(実績!$D:$D,実績!$B:$B,$A2,実績!$C:$C,$B2,実績!$E:$E,0)
*(1+前提!$B$2)前提!B2は、翌期間の入電の伸び率(0.05なら5%増)です。季節性やキャンペーンの影響は、この伸び率か、曜日ごとの補正列で明示します。平均に黙って混ぜると、後で理由を追えません。
直近の傾向を強く反映したいときは、平均の対象を直近4〜8週に絞る方法もあります。その場合は実績シートに週番号の列を足し、条件を1つ増やします。何週を使うかは前提シートのセルに置き、式に直接書きません。
Claudeへの指示は、シート名・列・参照先まで具体的に書きます。
実績・予測・前提の3シートを使います。
予測シートの2行目以降に、曜日番号1〜7と30分刻みの開始時刻
(9:00〜20:30)の全組み合わせを入れてください。
C列に、実績シートの同じ曜日・同じ開始時刻・除外フラグ0の
入電数の平均に、前提!B2の伸び率を掛けた式を入れてください。
手入力の数字は置かず、式の中に伸び率を直接書かないでください。実績に該当する行が1件もない組み合わせでは、AVERAGEIFSが #DIV/0! を返します。営業時間外の行を作ってしまった場合や、実績の取り込みが欠けた場合に出ます。Claude for Excelはエラーの原因を探って修正案を出す用途にも使えるので、次のように頼めます。
予測シートのC列で #DIV/0! が出ている行を挙げ、
実績シートに該当する行がない原因を、曜日番号と開始時刻で示してください。入電数を負荷(アーラン)に換える
負荷は「その区間に必要な、全員が休まず話し続けた場合の同時通話数」と読めます。単位はアーランです。
負荷A = 予測入電数 × 平均処理時間(秒) ÷ 区間の秒数30分区間の区間の秒数は1800です。予測入電数が180件、平均処理時間が300秒なら、負荷は180×300÷1800で30アーランになります。席数が30のとき、全員が常時通話中で、待ちが膨らみ続ける状態です。必要席数は30を上回ります。
平均処理時間は、通話時間に通話後の後処理時間を足した値を使います。通話時間だけで席数を出すと、後処理中の席を空きとして数えてしまいます。時間帯によって処理時間が違うなら、D列を時間帯ごとの実績平均にします。
E列は =C2*D2/前提!$B$5 とし、前提!B5に区間の秒数(1800)を置きます。
Erlang Cの式をセルに置く
Erlang Cは、待ち行列に並んだ呼が、空いた席を待つ状況のモデルです。席数をN、負荷をAとすると、「応答までに待たされる確率」と「目標の秒数以内に応答できる割合(サービスレベル)」が次の式で出ます。
待たされる確率 Pw = (A^N/N! × N/(N-A)) ÷ (Σ(k=0〜N-1) A^k/k! + A^N/N! × N/(N-A))
サービスレベル SL = 1 - Pw × EXP(-(N-A) × 目標秒数 ÷ 平均処理時間)条件はN > Aです。席数が負荷以下だと待ちが際限なく伸びるので、式の前提が崩れます。
階乗の項をそのまま書くと、席数が大きいときにExcelの桁があふれます。POISSON.DIST関数を使うと、同じ値を安全に出せます。A^k/k!はPOISSON.DIST(k,A,FALSE)×EXP(A)に等しく、EXP(A)は分子と分母で打ち消し合うためです。
したがって、Pwは次の形になります。
pn = POISSON.DIST(N, A, FALSE)
x = pn × N / (N - A)
Pw = x ÷ (POISSON.DIST(N-1, A, TRUE) + x)これを1つのセルに入れます。式が長いので、LETで名前を付けます。H2から右へ、席数の候補を「負荷を切り上げた値+オフセット」で並べ、オフセットを1行目に0〜10で置く構成です。
=IF(ROUNDUP($E2,0)+H$1<=$E2, 0,
LET(n, ROUNDUP($E2,0)+H$1,
pn, POISSON.DIST(n,$E2,FALSE),
x, pn*n/(n-$E2),
pw, x/(POISSON.DIST(n-1,$E2,TRUE)+x),
1-pw*EXP(-(n-$E2)*前提!$B$4/$D2)))前提!B4は目標の応答秒数(20など)です。外側のIFは、候補の席数が負荷以下の場合に0を返し、N > Aの条件を守らせます。LETを使わない環境では、pn・x・pwを補助列に分けて同じ計算を並べます。
候補を横に並べるのは、ExcelのWhat-If分析にあるデータテーブルをClaude for Excelが扱えないためです。マクロとVBAも対応外です。繰り返し計算は、通常の数式だけで組みます。
目標を満たす最小の席数を拾う
サービスレベルは席数が増えるほど上がります。したがって、候補の列を左から見て、目標を最初に満たす席数が必要席数です。
=IF($E2=0, 0,
IFERROR(ROUNDUP($E2,0)
+INDEX($H$1:$R$1, MATCH(TRUE, INDEX(H2:R2>=前提!$B$3,0), 0)),
"候補不足"))前提!B3は目標のサービスレベル(0.8など)です。入電が0件の区間は席数0にします。「候補不足」と出た行は、候補の幅(0〜10)を広げます。
計算例を見ます。平均処理時間300秒、80%を20秒以内に応答する目標で、30分あたりの入電数だけを変えた結果です。
| 30分の入電数 | 負荷(アーラン) | 必要席数 | その席数のSL | 席数を1減らしたSL |
|---|---|---|---|---|
| 30 | 負荷(アーラン)5.0 | 必要席数8 | その席数のSL86.3% | 席数を1減らしたSL71.6% |
| 90 | 負荷(アーラン)15.0 | 必要席数19 | その席数のSL81.3% | 席数を1減らしたSL70.4% |
| 180 | 負荷(アーラン)30.0 | 必要席数36 | その席数のSL85.8% | 席数を1減らしたSL79.6% |
| 240 | 負荷(アーラン)40.0 | 必要席数46 | その席数のSL82.2% | 席数を1減らしたSL75.6% |
180件の行では、36席で85.8%、35席で79.6%です。目標の80%にわずかに届かないため、36席が必要席数になります。席数は整数なので、必要席数のSLは目標を少し上回ります。
負荷30アーランに対して36席なので、占有率(負荷÷席数)は約83%です。負荷が大きいほど、席数に対する余裕の割合は小さくなります。同じ目標でも、入電が少ない時間帯のほうが席数の余裕率は大きく出ます。
占有率の上限と離席分を足して人員にする
Erlang Cが返すのは、通話を受けられる席の数です。実際の人員は、そこに休憩・研修・離席の分を足します。
| 項目 | 前提シートの置き場所 | 役割 |
|---|---|---|
| シュリンケージ(受付できない時間の割合) | 前提シートの置き場所B6 | 役割休憩・研修・会議・有給の見込み |
| 占有率の上限 | 前提シートの置き場所B7 | 役割席数が少なすぎて詰まるのを防ぐ上限 |
必要席数を、占有率の上限でもう一度確かめます。Erlang Cの席数は、SLが満たされていても占有率が高くなる場合があるためです。
最終席数 = MAX(必要席数, ROUNDUP(負荷 ÷ 占有率の上限, 0))
必要人員 = ROUNDUP(最終席数 ÷ (1 - シュリンケージ), 0)180件の行で、占有率の上限を85%、シュリンケージを30%とすると、次の計算になります。
- 負荷30÷0.85=35.3を切り上げて36席。Erlang Cの36席と同じなので最終席数は36
- 36÷(1-0.3)=51.4を切り上げて、必要人員は52人
240件の行は、占有率の上限85%で負荷40÷0.85=47.1を切り上げて48席になり、Erlang Cの46席を上回ります。この行は占有率の上限が席数を決めます。
必要人員は、その時間帯に「出勤している人数」です。シフト表に落とすときは、勤務の開始・終了と休憩の入れ方で時間帯ごとの人数が変わります。シフトの希望集計と労基法の点検はClaudeでシフト表を作成する手順に、人数が決まった後の人件費の組み方は要員計画の人件費シミュレーションにまとめています。
Claudeに指示を出す順番
一度に全部を頼むと、どこで式が間違ったかを追えません。段階ごとに頼み、各段階で結果を確かめてから次へ進みます。
- 前提シートを作る(目標SL、目標秒数、区間秒数、伸び率、シュリンケージ、占有率上限)
- 予測シートにAVERAGEIFSの式を入れる
- 負荷の列を入れる
- 候補席数のSL列を入れる
- 必要席数と必要人員の列を入れる
4段階目の指示は、式の形を指定します。
予測シートのH2:R2に、席数の候補ごとのサービスレベルを入れてください。
候補は「E2を切り上げた値」に、1行目のオフセット(0〜10)を足した値です。
式はPOISSON.DIST関数を使い、候補が負荷以下ならば0を返してください。
目標秒数は前提!B4、平均処理時間はD列を参照してください。書式の決まりごとは、アドインの設定画面のInstructionsに入れます。「前提セルは青字」「率は小数点以下1桁のパーセント表示」のような規約を毎回書かずに済みます。Instructionsの設定はExcel専用で、PowerPointやWordとは別です。
既存のデータがあるセルを上書きしそうなときは、Claudeが事前に警告します。ただし、編集をかけるブックは信頼できるコピーを先に作ってから始めます。
現場に渡す前の検算
席数の計算は、式が通っていても前提を取り違えると大きく外れます。Claude for Excelの利用上の注意でも、監査に耐える計算は検証なしに任せないことと、納品物は人のレビューを挟むことが挙げられています。次の5点を、自分の手で確かめます。
使う前に回す5つの検算
- 1行を手計算する。負荷が小さい行(例: 入電30件、負荷5アーラン、8席でSL約86%)を電卓や別の計算機で確かめる
- 席数を1減らしたSLが、目標を下回っていることを確かめる(最小の席数になっているか)
- 負荷が席数を超えた行がないことを確かめる(SLの列に0が出ていないか)
- 入電数の合計が、実績の週平均の合計と大きくずれていないことを確かめる
- 単位をそろえる。平均処理時間は秒、区間の秒数は1800、目標の秒数と同じ秒
Claudeに検算の手がかりを出させることもできます。
予測シートの水曜14:00の行について、C列からE列、必要席数までの
計算の流れを、参照しているセルを示して説明してください。回答のセル参照はクリックして該当セルへ移動できるので、式の読み違いを早く見つけられます。
モデルの前提と限界
Erlang Cは、待たされた呼が放棄せず、必ず順番に応答される前提です。実際には、待ちきれずに切る呼があります。放棄を考えないため、混み合う時間帯では席数が多めに出る傾向があります。放棄率が高いセンターでは、Erlang Cの結果を上限の目安として扱い、実績のSLと突き合わせて前提を調整します。
また、1席が1種類の呼だけを受ける前提です。電話とチャットを同じ人が兼務する、スキル別にキューが分かれているといった運用では、キューごとに表を分けます。
データの扱いとブックの取り込み
実績データには顧客の電話番号や契約情報が付いていることがあります。席数の計算に必要なのは、日付・時間帯・入電数だけです。個人を特定できる列は、ブックに取り込む前に落としておきます。
ブックに添付したファイルの内容は、会話の記録とあわせて、ブラウザのIndexedDBにローカル保存されます。保存は端末ごとで、別の端末とは同期されません。保存件数は、ユーザー・組織・Officeアプリごとの直近50会話です。バックエンドの入出力は、受信または生成から30日以内に削除されます。
ACDやCTIからエクスポートしたファイルは、外部から持ち込む入力です。Claude for Excelは、外部由来のファイルに隠れた指示で誘導される危険があるため、信頼できるスプレッドシートだけで使うよう注意されています。取り込むのは数値の実績に絞り、備考欄の自由記述は落とします。
CRMやBIツールの数値を呼び出したいときは、Claude for Excelのコネクタ機能を使います。ただし、ここで挙がっているコネクタは主に金融データ向けです。コールセンターの実績は、システムからCSVで出して取り込むほうが確実です。
よくある質問
入電が少ない時間帯でも、席数は最低1にすればよいですか
入電が1件でもあれば、Erlang Cの結果は1席以上になります。ただし、1席だけの時間帯は、その人が休憩に入ると応答できなくなります。最低配置人数は、Erlang Cとは別の運用ルールとして前提シートに置き、MAXで合わせます。
目標のサービスレベルを変えると、人員はどれくらい動きますか
前提シートのB3を変えるだけで、全行の必要席数が再計算されます。0.8と0.9を並べて比べたいときは、予測シートをコピーして目標だけ変えた2枚を用意し、比較シートで各時間帯の差を出します。データテーブルは使えないので、シートを分けるのが確実です。