Excelでトレード記録を集計する関数|SUMIFSなどの式を、実際に計算して確かめた

トレード記録の集計は、SUM・COUNTIF・AVERAGEIF・SUMIF・SUMIFSの5つの関数でほぼ組めます。総損益、勝率、平均利益と平均損失、プロフィットファクター、銘柄別・月別の損益まで出せます。この記事の式は、架空の30件の記録で、実際のExcel(Microsoft 365 Excel、バージョン16.0、ビルド20430)に入力して計算し、筆者がPythonで別に計算した値と照合して、すべて一致しました。

サンプルの記録は乱数で作った架空のもので、実際の取引ではありません。式の型を覚えるためのものです。(確認日:2026年10月19日)

1. サンプルの記録(30件)

A列に決済日、B列に銘柄、C列に売買、D列にロット、E列に損益(円)を入れ、2行目から31行目までに30件を置きます。1行目は見出しです。

行 決済日 銘柄 売買 ロット 損益(円)
2 2026/08/05 EURUSD 売り 0.2 -8,000
3 2026/08/06 USDJPY 売り 0.2 6,000
4 2026/08/08 USDJPY 買い 0.2 12,000
5 2026/08/10 USDJPY 買い 0.2 -16,000
6 2026/08/12 EURUSD 買い 0.3 -12,000
7 2026/08/13 GBPJPY 売り 0.1 3,000
8 2026/08/15 GBPJPY 売り 0.3 17,000
9 2026/08/17 GBPJPY 買い 0.3 10,000
10 2026/08/18 USDJPY 買い 0.3 17,000
11 2026/08/19 EURUSD 売り 0.3 3,000
12 2026/08/20 EURUSD 売り 0.1 -9,000
13 2026/08/22 EURUSD 買い 0.3 -18,000
14 2026/08/24 GBPJPY 売り 0.1 4,000
15 2026/08/26 EURUSD 買い 0.2 5,000
16 2026/08/28 GBPJPY 売り 0.2 -10,000
17 2026/08/29 GBPJPY 売り 0.3 3,000
18 2026/09/01 USDJPY 売り 0.2 -18,000
19 2026/09/03 GBPJPY 売り 0.1 8,000
20 2026/09/05 USDJPY 売り 0.1 -4,000
21 2026/09/06 EURUSD 買い 0.1 11,000
22 2026/09/07 GBPJPY 買い 0.1 12,000
23 2026/09/08 USDJPY 売り 0.1 18,000
24 2026/09/09 EURUSD 買い 0.1 13,000
25 2026/09/11 USDJPY 買い 0.1 -5,000
26 2026/09/14 USDJPY 売り 0.3 6,000
27 2026/09/17 GBPJPY 売り 0.2 12,000
28 2026/09/18 EURUSD 買い 0.2 8,000
29 2026/09/19 GBPJPY 買い 0.1 13,000
30 2026/09/20 USDJPY 買い 0.2 -18,000
31 2026/09/22 USDJPY 買い 0.3 -6,000

2. 集計の式と、Excelで計算した結果

項目 式 結果
総損益 =SUM(E2:E31) 57,000
取引の数 =COUNT(E2:E31) 30
勝ちトレードの数 =COUNTIF(E2:E31,">0") 19
負けトレードの数 =COUNTIF(E2:E31,"<0") 11
勝率 =COUNTIF(E2:E31,">0")/COUNT(E2:E31) 0.6333…(63.3%)
平均利益 =AVERAGEIF(E2:E31,">0") 9,526.3…
平均損失 =AVERAGEIF(E2:E31,"<0") −11,272.7…
プロフィットファクター =SUMIF(E2:E31,">0")/-SUMIF(E2:E31,"<0") 1.4597…
銘柄別(USDJPY) =SUMIFS(E2:E31,B2:B31,"USDJPY") −8,000
銘柄別(EURUSD) =SUMIFS(E2:E31,B2:B31,"EURUSD") −7,000
銘柄別(GBPJPY) =SUMIFS(E2:E31,B2:B31,"GBPJPY") 72,000
月別(8月) =SUMIFS(E2:E31,A2:A31,">="&DATE(2026,8,1),A2:A31,"<"&DATE(2026,9,1)) 7,000
月別(9月) =SUMIFS(E2:E31,A2:A31,">="&DATE(2026,9,1),A2:A31,"<"&DATE(2026,10,1)) 50,000

プロフィットファクターは、利益の合計を、損失の合計(の絶対値)で割った値です。式の-SUMIF(…"<0")の先頭のマイナスは、負の合計を正にするためです。勝率が63.3%でも、平均損失(11,273円)が平均利益(9,526円)より大きいことが、式の結果から分かります。

3. 式を書く時の決まり

  • 条件は、ダブルクォーテーションで囲む:">0"のように、比較の記号と数値をまとめて文字列にします
  • 日付の条件は、比較の記号と、DATE関数を「&」でつなぐ:">="&DATE(2026,8,1)のように書きます。月の範囲は、「月初以上、翌月初未満」で指定すると、月末の日数を気にしなくて済みます
  • 範囲は、同じ行数にそろえる:SUMIFSでは、合計する範囲と条件の範囲の行数が合っている必要があります(上の式は、すべて2〜31行)
  • 行を足す予定なら、範囲を、E:Eのように列ごとにするか、テーブルにします

テーブルにすると、構造化参照で書ける

データの範囲を、[挿入]→[テーブル]でテーブルにして、名前を「Trades」とすると、次のように書けます。行を足すと、式の範囲が自動で広がります。次の式も、Excelで計算して、Pythonの計算と一致しました。

式 結果
=SUM(Trades[損益]) 57,000
=SUMIFS(Trades[損益],Trades[銘柄],"USDJPY") −8,000
=COUNTIFS(Trades[損益],">0",Trades[銘柄],"GBPJPY") 9
=AVERAGEIFS(Trades[損益],Trades[売買],"買い") 1,733.3…
=MAXIFS(Trades[損益],Trades[銘柄],"EURUSD") 13,000
=MINIFS(Trades[損益],Trades[銘柄],"EURUSD") −18,000

4. 合計が0になる時:数値が文字列になっている

取引履歴を書き出してExcelに貼ると、損益が「12,000」のような文字列になっていることがあります。筆者は、損益の列を文字列の書式にして、カンマ付きの文字列を入れ、確かめました。

式 結果
=SUM(E2:E31) 0
=COUNT(E2:E31) 0
=COUNTA(E2:E31) 30
=SUMPRODUCT(--ISTEXT(E2:E31)) 30(文字列のセルの数)
=SUMPRODUCT(VALUE(E2:E31)) 57,000(正しい合計)

文字列の数値は、SUMやCOUNTの対象にならず、エラーも出さずに0になることが分かります。合計が0だったり、数が合わなかったりしたら、COUNTとCOUNTAの差や、ISTEXTで、文字列を疑います。直し方は、VALUE関数で数値に変換する、または、文字列の列を数値の書式にして、入力し直す、などです。取引履歴の書き出しで損益が合わない原因はMT5の取引履歴を書き出す方法にまとめています。

5. 次に作るもの

まとめ

  • SUM・COUNTIF・AVERAGEIF・SUMIF・SUMIFSで、総損益・勝率・平均損益・プロフィットファクター・銘柄別・月別が出せる
  • 30件のサンプルで、Excelの計算結果は、Pythonの計算結果と、すべて一致した
  • 日付の条件は、「>=」&DATE(…)のように書く。月は「月初以上、翌月初未満」
  • テーブルにすると、行を足しても式の範囲が広がる
  • 合計が0になったら、数値が文字列になっていないか、COUNTとISTEXTで確認する