STEP 40:What-If分析

🔮 STEP 40: What-If分析

「もし〜だったら?」という仮定のシミュレーションを行おう

📋 このステップで学ぶこと

  • What-If分析の概念と3つの問いかけ
  • Excelのゴールシーク機能(目標値探索)
  • データテーブルの活用(2変数分析)
  • シナリオマネージャーの使い方
  • 価格設定最適化への応用

🔍 1. What-If分析とは

What-If分析の基本概念

What-If分析は、日本語で「もし〜だったら分析」と訳せます。ビジネスでは、「もしこの条件が変わったら、結果はどうなる?」という問いを分析することが非常に重要です。

📌 What-If分析の3つの問いかけ

① 順方向の問い(Forward)

「入力が変わったら、結果はどうなる?」

例:
・価格を10%上げたら、利益はいくらになる?
・広告費を100万円増やしたら、売上はどうなる?
・人員を5人増やしたら、生産量は?

→ これは感度分析・シナリオ分析(STEP 39で学習済み)

② 逆方向の問い(Backward)★今回のメイン

目標を達成するには、入力をいくらにすべき?

例:
・利益を500万円にするには、価格はいくら?
・売上目標1億円を達成するには、販売数量は?
・ROI 20%を達成するには、投資額はいくらまで?

→ これがゴールシーク(目標値探索)

③ 複数変数の組み合わせ

「2つの変数を同時に変えたら、結果はどうなる?」

例:
・価格と販売数量を同時に変化させたら、利益は?
・広告費とコンバージョン率を変えたら、売上は?
・金利と借入期間を変えたら、返済額は?

→ これがデータテーブル(2変数分析)

感度分析との違い

💡 感度分析 vs What-If分析(ゴールシーク)

感度分析(STEP 39):
「価格を1,000円から1,100円に上げたら、利益はいくらになる?」
入力 → 結果(順方向)

ゴールシーク(今回):
「利益を300万円にしたい。価格はいくらに設定すべき?」
結果 → 入力(逆方向)

ポイント:ゴールシークは「目標から逆算」する点が異なる!

ExcelのWhat-Ifツール

Excelには、What-If分析のための3つの便利な機能が用意されています。

機能 できること 使いどころ
ゴールシーク 目標値から逆算して
1つの入力値を自動計算
損益分岐点の計算
目標利益達成の条件
データテーブル 1〜2変数を変化させた
結果を一覧表示
最適な組み合わせ探索
マトリックス分析
シナリオマネージャー 複数のシナリオを保存
ワンクリックで切り替え
楽観/標準/悲観の比較
プレゼン用資料作成

🎯 2. ゴールシーク(目標値探索)

ゴールシークとは

ゴールシーク(Goal Seek)は、「目標の結果を得るために、入力値をいくらにすべきか」を自動計算する機能です。

📌 ゴールシークの考え方

例:利益300万円を達成したい

現状:
価格:1,000円
販売数量:10,000個
原価:600円
固定費:200万円
利益:(1,000−600)×10,000−200万 = 200万円

質問:
「利益を300万円にするには、価格をいくらにすべき?」

ゴールシークの答え:
価格 = 1,100円
(1,100−600)×10,000−200万 = 300万円 ✅

Excelでのゴールシーク操作

【Excelでゴールシークを使う手順】 ■ Step 1: データを準備 A列 B列 ───────────────── 価格 1000 販売数量 10000 原価 600 固定費 2000000 利益 =(B1-B3)*B2-B4 ■ Step 2: ゴールシークを開く 1. 結果のセル(B5:利益)を選択 2. データ → What-If分析 → ゴールシーク ■ Step 3: 設定を入力 ・数式入力セル: $B$5(利益のセル) ・目標値: 3000000(目標の300万円) ・変化させるセル: $B$1(価格のセル) ■ Step 4: OKをクリック → Excelが自動計算して、価格セルが変わる ■ 結果 価格が 1,100円 に変わる → この価格なら利益300万円を達成!
⚠️ ゴールシークの注意点

① 変化させるセルは「値」が入ったセルのみ
数式が入ったセルは指定できない

② 数式入力セルは「数式」が入ったセルのみ
変化させるセルと関連している必要がある

③ 解が見つからない場合もある
目標が非現実的だと「解なし」になる

④ 結果はセルに直接反映される
元の値に戻したい場合は、Ctrl+Z(元に戻す)

Pythonでゴールシークを実装

Pythonでゴールシークを実装するには、scipy.optimizeライブラリを使います。方程式を解く機能を利用して、目標値に到達する入力値を探索します。

Step 1:準備と基本的な利益計算

# ============================================ # ライブラリの読み込み # ============================================ import numpy as np # 数学計算用 import pandas as pd # データ処理用 import matplotlib.pyplot as plt # グラフ描画用 # scipy.optimize: 最適化・方程式を解くためのライブラリ # fsolve: 非線形方程式を解く関数 from scipy.optimize import fsolve # 日本語フォント設定 plt.rcParams[‘font.sans-serif’] = [‘Arial Unicode MS’, ‘Yu Gothic’, ‘Hiragino Sans’] plt.rcParams[‘axes.unicode_minus’] = False # ============================================ # 利益を計算する関数 # ============================================ def calculate_profit(price, quantity, cost, fixed_cost): “”” 利益を計算する関数 利益 = 売上 – 変動費 – 固定費 = (価格 × 数量) – (原価 × 数量) – 固定費 “”” revenue = price * quantity # 売上 variable_cost = cost * quantity # 変動費 profit = revenue – variable_cost – fixed_cost # 利益 return profit # パラメータ設定 quantity = 10000 # 販売数量(固定) cost = 600 # 原価(固定) fixed_cost = 2000000 # 固定費(固定) # 現状の利益を確認 current_price = 1000 current_profit = calculate_profit(current_price, quantity, cost, fixed_cost) print(“【現状の利益】”) print(f”価格: {current_price:,}円”) print(f”販売数量: {quantity:,}個”) print(f”原価: {cost:,}円”) print(f”固定費: {fixed_cost:,}円”) print(f”利益: {current_profit:,}円”)
# 出力結果 【現状の利益】 価格: 1,000円 販売数量: 10,000個 原価: 600円 固定費: 2,000,000円 利益: 2,000,000円

Step 2:ゴールシークの実装

# ============================================ # ゴールシーク:目標利益を達成する価格を探索 # ============================================ # 目標利益を設定 target_profit = 3000000 # 目標:300万円 # 方程式を定義する関数 # fsolveは「f(x) = 0」となるxを探す # 「利益 – 目標利益 = 0」となる価格を探す def equation(price): “”” この関数が0になる価格を探す 利益 – 目標利益 = 0 → 利益 = 目標利益 となる価格を見つける “”” profit = calculate_profit(price, quantity, cost, fixed_cost) return profit – target_profit # これが0になる価格を探す # fsolve(): 方程式を解く関数 # 引数1: 方程式の関数 # 引数2: 初期推定値(探索の出発点) # 戻り値: 解(配列形式なので[0]で取り出す) initial_guess = 1000 # 初期推定値 optimal_price = fsolve(equation, initial_guess)[0] print(“【ゴールシークの結果】”) print() print(f”目標利益: {target_profit:,}円”) print(f”必要な価格: {optimal_price:,.0f}円”) print() # 結果を検証 actual_profit = calculate_profit(optimal_price, quantity, cost, fixed_cost) print(“【検証】”) print(f”価格{optimal_price:,.0f}円での利益: {actual_profit:,.0f}円”) print(f”目標との差: {abs(actual_profit – target_profit):,.2f}円”)
# 出力結果 【ゴールシークの結果】 目標利益: 3,000,000円 必要な価格: 1,100円 【検証】 価格1,100円での利益: 3,000,000円 目標との差: 0.00円
📝 fsolve関数の仕組み

fsolveは「f(x) = 0となるxを探す」関数です。

今回の場合:
f(価格) = 利益 − 目標利益

この関数が0になる = 利益が目標利益に等しい
→ その時の価格が答え!

初期推定値は、探索の出発点です。
現在の価格(1,000円)を指定しておくと、
そこから探索を始めて効率的に解を見つけます。

Step 3:複数の目標利益でゴールシーク

# ============================================ # 複数の目標利益でゴールシーク # ============================================ # 様々な目標利益に対して、必要な価格を計算 target_profits = [1000000, 2000000, 3000000, 4000000, 5000000] results = [] for target in target_profits: # 方程式を定義(targetごとに新しく作成) def eq(price): return calculate_profit(price, quantity, cost, fixed_cost) – target # ゴールシークを実行 price = fsolve(eq, 1000)[0] # 結果を保存 results.append({ ‘目標利益(万円)’: target // 10000, ‘必要な価格(円)’: price, ‘価格変化(%)’: (price / current_price – 1) * 100 }) df_results = pd.DataFrame(results) print(“【目標利益別:必要な価格】”) print() print(df_results.to_string(index=False))
# 出力結果 【目標利益別:必要な価格】 目標利益(万円) 必要な価格(円) 価格変化(%) 100 900.0 -10.0 200 1000.0 0.0 300 1100.0 10.0 400 1200.0 20.0 500 1300.0 30.0
📌 ゴールシーク結果の読み方

利益100万円:価格900円(現状から−10%)
利益200万円:価格1,000円(現状維持)
利益300万円:価格1,100円(現状から+10%)
利益400万円:価格1,200円(現状から+20%)
利益500万円:価格1,300円(現状から+30%)

発見:利益を100万円増やすには、価格を100円上げればOK!
(このケースでは線形の関係)

損益分岐点の計算

ゴールシークの代表的な活用例が損益分岐点の計算です。「利益 = 0」となる価格を探します。

# ============================================ # 損益分岐点の計算 # ============================================ # 利益 = 0 となる価格を探す def breakeven_equation(price): “””利益 = 0 となる価格を探す””” return calculate_profit(price, quantity, cost, fixed_cost) # ゴールシーク実行 breakeven_price = fsolve(breakeven_equation, cost)[0] print(“【損益分岐点分析】”) print() print(f”損益分岐点価格: {breakeven_price:,.0f}円”) print(f”原価: {cost:,}円”) print(f”必要なマークアップ: {breakeven_price – cost:,.0f}円”) print(f”マークアップ率: {(breakeven_price – cost) / cost * 100:.1f}%”) print() print(“【解釈】”) print(f”価格を{breakeven_price:,.0f}円より高くすれば黒字”) print(f”価格を{breakeven_price:,.0f}円より低くすれば赤字”)
# 出力結果 【損益分岐点分析】 損益分岐点価格: 800円 原価: 600円 必要なマークアップ: 200円 マークアップ率: 33.3% 【解釈】 価格を800円より高くすれば黒字 価格を800円より低くすれば赤字

📊 3. データテーブル(2変数分析)

データテーブルとは

データテーブルは、1つまたは2つの変数を様々な値に変化させて、結果を一覧表示する機能です。最適な組み合わせを探すのに便利です。

💡 データテーブルの2つのパターン

① 1変数データテーブル
1つの変数だけを変化させる
例:価格を800〜1,200円まで変化させて、各価格での利益を一覧表示

② 2変数データテーブル
2つの変数を同時に変化させる
例:価格(行)と販売数量(列)を同時に変化させて、各組み合わせの利益をマトリックス表示

最適な価格×数量の組み合わせが一目で分かる!

Excelでのデータテーブル作成

【Excelで2変数データテーブルを作る手順】 ■ Step 1: データを配置 ・左上のセル(A7): 利益の計算式 =B10(結果セルへの参照) ・1行目(B7〜F7): 価格の値(900, 1000, 1100, 1200, 1300) ・1列目(A8〜A12): 販売数量の値(8000, 9000, 10000, 11000, 12000) ■ Step 2: 範囲を選択 A7:F12(数式と変数値を含む全範囲) ■ Step 3: データテーブルを作成 データ → What-If分析 → データテーブル ■ Step 4: 設定を入力 ・行の代入セル: $B$1(価格のセル) ・列の代入セル: $B$2(販売数量のセル) ■ Step 5: OKをクリック → マトリックス形式で結果が自動計算される ■ 完成イメージ 900円 1000円 1100円 1200円 1300円 8000個 400,000 1,200,000 2,000,000 2,800,000 3,600,000 9000個 700,000 1,600,000 2,500,000 3,400,000 4,300,000 10000個 1,000,000 2,000,000 3,000,000 4,000,000 5,000,000 …

Pythonでデータテーブルを作成

Step 1:2変数の範囲を設定

# ============================================ # データテーブル(2変数分析)の作成 # ============================================ # 価格と販売数量を同時に変化させて、利益を計算 # 変数の範囲を設定 prices_range = [900, 1000, 1100, 1200, 1300] # 価格 quantities_range = [8000, 9000, 10000, 11000, 12000] # 販売数量 # 固定パラメータ cost = 600 fixed_cost = 2000000 print(“【データテーブルの設定】”) print(f”価格の範囲: {prices_range}”) print(f”販売数量の範囲: {quantities_range}”) print(f”原価: {cost}円(固定)”) print(f”固定費: {fixed_cost:,}円(固定)”)

Step 2:データテーブルを計算

# ============================================ # 2重ループでデータテーブルを作成 # ============================================ # 結果を格納する2次元配列 # np.zeros((行数, 列数)): ゼロで埋めた配列を作成 profit_table = np.zeros((len(quantities_range), len(prices_range))) # 2重ループで全ての組み合わせを計算 for i, q in enumerate(quantities_range): for j, p in enumerate(prices_range): # 各組み合わせでの利益を計算 profit = calculate_profit(p, q, cost, fixed_cost) profit_table[i, j] = profit # DataFrameに変換(見やすく整形) df_table = pd.DataFrame( profit_table, index=quantities_range, # 行ラベル:販売数量 columns=prices_range # 列ラベル:価格 ) # 列名と行名を分かりやすく df_table.index.name = ‘販売数量’ df_table.columns.name = ‘価格’ print(“【データテーブル:価格 × 販売数量 → 利益】”) print() print(df_table.to_string())
# 出力結果 【データテーブル:価格 × 販売数量 → 利益】 価格 900 1000 1100 1200 1300 販売数量 8000 400000.0 1200000.0 2000000.0 2800000.0 3600000.0 9000 700000.0 1600000.0 2500000.0 3400000.0 4300000.0 10000 1000000.0 2000000.0 3000000.0 4000000.0 5000000.0 11000 1300000.0 2400000.0 3500000.0 4600000.0 5700000.0 12000 1600000.0 2800000.0 4000000.0 5200000.0 6400000.0

Step 3:最適な組み合わせを見つける

# ============================================ # 最大利益とその条件を特定 # ============================================ # 最大値を取得 max_profit = df_table.max().max() # 最大値の位置を特定 # df_table.stack(): 2次元を1次元に変換 # idxmax(): 最大値のインデックスを取得 max_position = df_table.stack().idxmax() optimal_quantity = max_position[0] # 最適な販売数量 optimal_price = max_position[1] # 最適な価格 print(“【最適な組み合わせ】”) print() print(f”最大利益: {max_profit:,.0f}円”) print(f”最適な価格: {optimal_price:,}円”) print(f”最適な販売数量: {optimal_quantity:,}個”) print() # 条件付き分析:利益200万円以上の組み合わせを抽出 print(“【利益200万円以上の組み合わせ】”) threshold = 2000000 count = 0 for q in quantities_range: for p in prices_range: profit = df_table.loc[q, p] if profit >= threshold: count += 1 if count <= 5: # 最初の5つだけ表示 print(f"価格{p:,}円 × 数量{q:,}個 → 利益{profit:,.0f}円") print(f"... 合計 {count}通りの組み合わせ")
# 出力結果 【最適な組み合わせ】 最大利益: 6,400,000円 最適な価格: 1,300円 最適な販売数量: 12,000個 【利益200万円以上の組み合わせ】 価格1,100円 × 数量8,000個 → 利益2,000,000円 価格1,200円 × 数量8,000個 → 利益2,800,000円 価格1,300円 × 数量8,000個 → 利益3,600,000円 価格1,000円 × 数量10,000個 → 利益2,000,000円 価格1,100円 × 数量9,000個 → 利益2,500,000円 … 合計 17通りの組み合わせ
💡 データテーブルの重要な発見

このデータテーブルの場合:
価格が高く、数量も多い「右下」ほど利益が大きい

⚠️ でも現実は違う!

このデータテーブルは「価格と数量が独立」と仮定しています。
現実では、価格を上げると需要(販売数量)が減ります。
これを「価格弾力性」といいます。

→ 次のセクションで、価格弾力性を考慮した分析を学びます!

💰 4. 価格設定最適化への応用

価格弾力性を考慮した最適価格

現実の市場では、価格を上げると需要が減るという関係があります。この関係を「価格弾力性」といいます。

📌 価格弾力性(Price Elasticity)

定義:
価格が1%変化したとき、需要が何%変化するか

例:価格弾力性 = −2 の場合
価格が10%上がると → 需要は20%減る
価格が10%下がると → 需要は20%増える

一般的な目安:
・必需品(水、米など):−0.5〜−1(非弾力的)
・一般消費財:−1〜−2
・贅沢品:−2〜−4(弾力的)
・代替品が多い商品:−3以下

Pythonで最適価格を求める

Step 1:需要関数の定義

# ============================================ # 価格弾力性を考慮した需要関数 # ============================================ def demand_function(price, base_price=1000, base_quantity=10000, elasticity=-2): “”” 需要関数:価格弾力性を考慮して需要を予測 引数: price: 設定する価格 base_price: 基準価格(現在の価格) base_quantity: 基準需要(現在の販売数量) elasticity: 価格弾力性(通常は負の値) 計算式: 需要 = 基準需要 × (価格 / 基準価格) ^ 弾力性 例:弾力性=-2、価格が10%上昇(1.1倍)の場合 需要 = 10000 × (1.1)^(-2) = 10000 × 0.826 = 8264個 “”” # (price / base_price)のelasticity乗を計算 quantity = base_quantity * (price / base_price) ** elasticity # 需要は0未満にならない return max(quantity, 0) # 動作確認 print(“【需要関数のテスト(弾力性=-2)】”) print() test_prices = [800, 900, 1000, 1100, 1200] for p in test_prices: q = demand_function(p) print(f”価格{p:,}円 → 需要{q:,.0f}個”)
# 出力結果 【需要関数のテスト(弾力性=-2)】 価格800円 → 需要15,625個 価格900円 → 需要12,346個 価格1,000円 → 需要10,000個 価格1,100円 → 需要8,264個 価格1,200円 → 需要6,944個
📝 需要関数の結果の解釈

価格弾力性=-2の意味:

・価格1,000円(基準)→ 需要10,000個
・価格1,100円(+10%)→ 需要8,264個(−17%)
・価格1,200円(+20%)→ 需要6,944個(−31%)

発見:価格を上げると需要は大きく減る!
では、利益を最大にする価格はいくら?

Step 2:最適価格を探索

# ============================================ # 最適価格の探索 # ============================================ # 価格を変えて、利益が最大になる点を探す cost = 600 fixed_cost = 2000000 # 価格の範囲を細かく設定 prices_opt = np.arange(600, 2000, 10) # 600〜2000円を10円刻み # 各価格での利益を計算 profits_opt = [] quantities_opt = [] for p in prices_opt: # 需要関数で販売数量を予測 q = demand_function(p) # 利益を計算 profit = calculate_profit(p, q, cost, fixed_cost) profits_opt.append(profit) quantities_opt.append(q) # 最大利益とその価格を特定 max_profit_idx = np.argmax(profits_opt) optimal_price = prices_opt[max_profit_idx] optimal_quantity = quantities_opt[max_profit_idx] max_profit = profits_opt[max_profit_idx] print(“【価格弾力性を考慮した最適価格】”) print() print(f”価格弾力性: -2.0″) print(f”原価: {cost:,}円”) print(f”固定費: {fixed_cost:,}円”) print() print(f”最適価格: {optimal_price:,}円”) print(f”予想販売数量: {optimal_quantity:,.0f}個”) print(f”最大利益: {max_profit:,.0f}円”)
# 出力結果 【価格弾力性を考慮した最適価格】 価格弾力性: -2.0 原価: 600円 固定費: 2,000,000円 最適価格: 1,200円 予想販売数量: 6,944個 最大利益: 2,166,667円

Step 3:現状との比較

# ============================================ # 現状との比較 # ============================================ current_price = 1000 current_quantity = demand_function(current_price) current_profit = calculate_profit(current_price, current_quantity, cost, fixed_cost) print(“【現状との比較】”) print() print(” 現状 最適化後 変化”) print(“-” * 50) print(f”価格 {current_price:>8,}円 {optimal_price:>8,}円 {optimal_price – current_price:>+6,}円”) print(f”販売数量 {current_quantity:>8,.0f}個 {optimal_quantity:>8,.0f}個 {optimal_quantity – current_quantity:>+6,.0f}個”) print(f”利益 {current_profit:>8,.0f}円 {max_profit:>8,.0f}円 {max_profit – current_profit:>+6,.0f}円”) print() print(f”利益増加率: {(max_profit / current_profit – 1) * 100:+.1f}%”)
# 出力結果 【現状との比較】 現状 最適化後 変化 ————————————————– 価格 1,000円 1,200円 +200円 販売数量 10,000個 6,944個 -3,056個 利益 2,000,000円 2,166,667円 +166,667円 利益増加率: +8.3%
💡 価格最適化の重要な発見

驚きの結果:
価格を20%上げて、販売数量が31%減っても、利益は8.3%増加

なぜこうなるのか:
・価格を上げると、1個あたりの利益(貢献利益)が増える
・販売数量は減るが、単価アップの効果の方が大きい
・特に弾力性が低い(-2程度)場合にこの傾向がある

実務への示唆:
・「たくさん売る」より「適正価格で売る」方が利益は増えることがある
・価格弾力性の把握が最適価格設定の鍵
・値下げ競争に巻き込まれると利益が激減する可能性

📝 STEP 40 のまとめ

✅ このステップで学んだこと

1. What-If分析の3つの問いかけ

  • 順方向:入力を変えたら結果はどうなる?(感度分析)
  • 逆方向:目標を達成するには入力をいくらに?(ゴールシーク)
  • 複数変数:2つの変数を同時に変えたら?(データテーブル)

2. ゴールシーク(目標値探索)

  • 目標から逆算して必要な入力値を求める
  • 損益分岐点の計算に便利
  • Pythonではscipy.optimizeのfsolveを使用

3. データテーブル(2変数分析)

  • 2つの変数の組み合わせを一覧表示
  • 最適な組み合わせを視覚的に発見
  • マトリックス形式で分かりやすい

4. 価格最適化

  • 価格弾力性を考慮した需要予測
  • 利益最大化価格の決定
  • 「たくさん売る」より「適正価格で売る」
💡 What-If分析の実務活用ポイント

ゴールシークを使うべき場面:
・目標利益を達成する価格を知りたい
・損益分岐点を計算したい
・ROI目標を達成する投資額を知りたい

データテーブルを使うべき場面:
・価格と販売数量の最適組み合わせを探したい
・複数のシナリオを一覧で比較したい
・条件付き書式で利益エリアを可視化したい

次のSTEP 41では、「意思決定ツリー」を学びます。複数の選択肢とその結果を構造化して、最適な意思決定を行う方法を習得しましょう!

🎯 次のステップの予告

STEP 41では、「意思決定ツリー」を学びます。「新製品を発売する/しない」「投資する/しない」といった複雑な意思決定を、ツリー構造で整理し、期待値を計算して最適な選択を行う方法を習得しましょう!

📝 練習問題

問題 1 基礎

ゴールシークを使って、以下の目標を達成する価格を求めてください。

条件:
・販売数量:8,000個
・原価:750円
・固定費:150万円
・目標利益:200万円

必要な価格はいくらですか?

【解答】

ゴールシークの考え方:

利益 = (価格 − 原価)× 販売数量 − 固定費

目標:200万円 = (価格 − 750)× 8,000 − 150万

計算手順:
200万 + 150万 = (価格 − 750)× 8,000
350万 = (価格 − 750)× 8,000
価格 − 750 = 350万 ÷ 8,000
価格 − 750 = 437.5
価格 = 750 + 437.5
価格 = 1,187.5円

検証:

売上 = 1,187.5 × 8,000 = 9,500,000円
変動費 = 750 × 8,000 = 6,000,000円
貢献利益 = 9,500,000 − 6,000,000 = 3,500,000円
利益 = 3,500,000 − 1,500,000 = 2,000,000円 ✅

実務での設定:
端数を考慮して 1,190円 に設定するのが現実的
問題 2 基礎

損益分岐点価格を求めてください。

条件:
・販売数量:5,000個
・原価:400円
・固定費:100万円

利益がゼロになる価格はいくらですか?

【解答】

損益分岐点の計算:

利益 = 0 の条件を求める

0 = (価格 − 原価)× 販売数量 − 固定費
0 = (価格 − 400)× 5,000 − 1,000,000

1,000,000 = (価格 − 400)× 5,000
価格 − 400 = 1,000,000 ÷ 5,000
価格 − 400 = 200
価格 = 400 + 200
価格 = 600円

解釈:

損益分岐点価格 = 600円

・600円より高く売れば黒字
・600円より安く売れば赤字

マークアップ = 600 − 400 = 200円
マークアップ率 = 200 ÷ 400 = 50%

→ 最低でも原価の50%をマークアップしないと赤字
問題 3 応用

データテーブルを作成し、最適な組み合わせを見つけてください。

条件:
・原価:600円
・固定費:200万円

価格の候補:900円、1,000円、1,100円
販売数量の候補:8,000個、10,000個、12,000個

9通りの組み合わせで利益を計算し、最大利益の組み合わせを特定してください。

【解答】

データテーブルの作成:

利益 = (価格 − 600)× 販売数量 − 2,000,000

         900円      1,000円     1,100円
8,000個   400,000   1,200,000   2,000,000
10,000個 1,000,000   2,000,000   3,000,000
12,000個 1,600,000   2,800,000   4,000,000

計算例(価格1,100円 × 数量12,000個):

売上 = 1,100 × 12,000 = 13,200,000円
変動費 = 600 × 12,000 = 7,200,000円
貢献利益 = 13,200,000 − 7,200,000 = 6,000,000円
利益 = 6,000,000 − 2,000,000 = 4,000,000円

最適な組み合わせ:

最大利益:4,000,000円
価格:1,100円
販売数量:12,000個

※ ただし、これは「価格を上げても数量が減らない」という前提。
現実では価格弾力性を考慮する必要がある。
問題 4 実践

価格弾力性を考慮して最適価格を求めてください。

条件:
・現在の価格:1,000円
・現在の販売数量:10,000個
・原価:500円
・固定費:300万円
・価格弾力性:−1.5

利益を最大にする価格はいくらですか?
(ヒント:価格を900円、1,000円、1,100円、1,200円で比較)

【解答】

需要関数:

需要 = 基準需要 × (価格 / 基準価格)^弾力性
需要 = 10,000 × (価格 / 1,000)^(-1.5)

各価格での計算:

■ 価格900円
需要 = 10,000 × (0.9)^(-1.5) = 10,000 × 1.17 = 11,700個
利益 = (900−500)×11,700 − 3,000,000 = 4,680,000 − 3,000,000 = 1,680,000円

■ 価格1,000円
需要 = 10,000 × (1.0)^(-1.5) = 10,000個
利益 = (1000−500)×10,000 − 3,000,000 = 5,000,000 − 3,000,000 = 2,000,000円

■ 価格1,100円
需要 = 10,000 × (1.1)^(-1.5) = 10,000 × 0.87 = 8,700個
利益 = (1100−500)×8,700 − 3,000,000 = 5,220,000 − 3,000,000 = 2,220,000円

■ 価格1,200円
需要 = 10,000 × (1.2)^(-1.5) = 10,000 × 0.76 = 7,600個
利益 = (1200−500)×7,600 − 3,000,000 = 5,320,000 − 3,000,000 = 2,320,000円

結果まとめ:

最適価格:1,200円(最大利益:232万円)

価格900円 → 利益168万円
価格1,000円 → 利益200万円
価格1,100円 → 利益222万円
価格1,200円 → 利益232万円 ← 最大!

発見:
価格を20%上げて需要が24%減っても、利益は16%増加!
→ 弾力性-1.5では、値上げが有利な戦略

❓ よくある質問

Q1: ゴールシークで「解が見つかりません」と出た場合は?
いくつかの原因と対処法があります。

原因1:解が存在しない
例:「利益1億円を達成する価格」→ 非現実的な目標
対処:目標値を現実的な範囲に修正

原因2:変化させるセルが数式
ゴールシークは「値」が入ったセルしか変えられない
対処:値が入力されたセルを指定

原因3:セルが関連していない
結果セルと変化させるセルが数式で繋がっていない
対処:数式の構造を確認

原因4:反復計算の上限
対処:ファイル → オプション → 数式 → 反復計算の最大回数を増やす
Q2: 価格弾力性はどうやって調べればいいですか?
いくつかの方法があります。

① 過去データからの推定
・過去の価格変更と販売数量の変化を分析
・弾力性 =(数量変化率)÷(価格変化率)

② A/Bテスト
・一部の顧客に異なる価格を提示
・反応の違いから弾力性を推定

③ 業界の目安を使う
・必需品:−0.5〜−1
・一般消費財:−1〜−2
・贅沢品:−2〜−4

④ 顧客アンケート
・「この価格なら買いますか?」を複数価格で質問
・Van Westendorp法など

推奨:まずは−1.5〜−2あたりで仮定し、実績を見ながら調整
Q3: データテーブルの計算が遅い場合の対処法は?
計算を高速化する方法があります。

① 自動計算をオフにする
数式 → 計算方法の設定 → 手動
F9キーで必要な時だけ計算

② 範囲を小さくする
変数の刻み幅を大きくする
例:10円刻み → 50円刻み

③ 揮発性関数を避ける
NOW(), RAND(), OFFSET() などは毎回再計算される

④ 条件付き書式を減らす
データテーブル範囲には最小限に

⑤ Pythonを使う
大量計算が必要な場合はPythonの方が高速
Q4: ゴールシークとソルバー、どちらを使うべきですか?
状況によって使い分けます。

ゴールシークを使うべき場合:
・変化させる変数が1つだけ
・シンプルな目標値探索
・すぐに結果が欲しい

ソルバーを使うべき場合:
・複数の変数を同時に最適化したい
・制約条件がある(「価格は○円以上」など)
・最大化/最小化問題を解きたい
・線形計画法や非線形最適化が必要

例:
「利益300万円を達成する価格は?」→ ゴールシーク
「予算1000万円以内で利益を最大化する価格と広告費の組み合わせは?」→ ソルバー

📝

学習メモ

ビジネスデータ分析・意思決定 - Step 40

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE