仮想通貨の確定申告でちょっと勉強する必要があり、勢い計算シートも作ってしまったので公開します。テストはしましたがなんか間違ってる可能性はあり、法的な正確性、妥当性も保証できません。使用は自己責任でお願い致します。
通貨ごとに別のシートを使用し、取得と売却のみ実装としてます。間に行を挿入すると式が崩れることがあるので、必要に応じて式を上からオートフィルするなどしてご対応ください。
総平均法の計算

総平均法の完成品のイメージはこのようになります。購入、売却を入力していくと、年度ごとの実現損益が自動で計算されます。枚数×単価は掛け算で求めます。

このまま使う場合、J1セル(2019年の総購入枚数)には
=SumIfs(C:C,B:B,
と記述します。B列が「買」かつ2020年未満2019年以上の日付のC列(枚数)のみカウントするという式です。
=SumIfs(C:C,B:B,
"
買"
,A:A,"
<2020/1/1"
,A:A,"
>=2019/1/1"
)と記述します。B列が「買」かつ2020年未満2019年以上の日付のC列(枚数)のみカウントするという式です。

J2は枚数×単価を合計し、上のセルの総購入枚数で割ることで、平均購入額を算出しています。
式としては
=(SumIfs(E:E,B:B,
となります。
式としては
=(SumIfs(E:E,B:B,
"
買"
,A:A,"
<2020/1/1"
,A:A,"
>=2019/1/1"
))/J1となります。

売却枚数は、購入枚数の式をコピーして「買」を「売」にすればOK。よって
=SumIfs(C:C,B:B,
のようになります。
=SumIfs(C:C,B:B,
"
売"
,A:A,"
<2020/1/1"
,A:A,"
>=2019/1/1"
)のようになります。

総売却額は枚数×時価のE列をカウントしたいので、
=SumIfs(E:E,B:B,
となります。
=SumIfs(E:E,B:B,
"
売"
,A:A,"
<2020/1/1"
,A:A,"
>=2019/1/1"
)となります。

総売却額 -(総売却枚数×平均購入額)=その年の実現損益となります。よって、式としては
=J4-(J3*J2)
で求められます。
=J4-(J3*J2)
で求められます。

持ち越し枚数は、最初の年は購入枚数-売却枚数、それ以降は昨年の持ち越し枚数⁺購入枚数-売却枚数で計算できます。

翌年以降は、概ね式中の年度を左右1ずつ上げればそのまま使い回せますが、上記の通り持ち越し枚数を修正するのと、

取得価額を修正する必要があります。式としては
=((J2*J6)+(SumIfs(E:E,B:B,
のようになります。最初のJ2*J6は前年度の取得価額×持ち越し枚数で、持ち越した分をその年の取得価額にも使用するための調整です。
=((J2*J6)+(SumIfs(E:E,B:B,
"
買"
,A:A,"
<2021/1/1"
,A:A,"
>=2020/1/1"
)))/(J8+J6)のようになります。最初のJ2*J6は前年度の取得価額×持ち越し枚数で、持ち越した分をその年の取得価額にも使用するための調整です。
移動平均法の計算

移動平均法はこんな感じです。左から行くと、

このへんは普通に入力して、枚数×取引価格を掛け算で求めています。

平均単価は最初だけ手打ちで入力し、

その下からは式で求めます。5行目の場合、
=If($B5 = “買”,($E5+(F4*($I5-$C5)))/$I5,F4)
となり、「買」の時だけ((今購入した価格×購入数)⁺(以前の平均単価×元の所次数))÷合計所持枚数、という計算をして、その時その時の平均単価を算出しています。
=If($B5 = “買”,($E5+(F4*($I5-$C5)))/$I5,F4)
となり、「買」の時だけ((今購入した価格×購入数)⁺(以前の平均単価×元の所次数))÷合計所持枚数、という計算をして、その時その時の平均単価を算出しています。

計算で使うので、平均単価×取引枚数も掛け算で求め、

売却時のみ取引損益を個別に算出します。
5行目であれば、=IF(B5=
のようになります。E5-G5は(枚数×取引額)-(枚数×平均取得単価)で、つまり売却差額を求めています。
5行目であれば、=IF(B5=
"
売"
,E5-G5,""
)のようになります。E5-G5は(枚数×取引額)-(枚数×平均取得単価)で、つまり売却差額を求めています。

所有枚数は最初の行だけ手打ち。その後は買った時は足し算、売った時は引き算で、5行目なら
=If(B5 =
のようにしてここでは求めています。
=If(B5 =
"
買"
,I4+C5,I4-C5)のようにしてここでは求めています。

右に移ります。


それをVlookUpして最終日の平均単価を求めています(翌年の計算に使用)。が、最終日に複数回取引をすると間違った数値になるので、ここは手打ちでもいいかもしれません。
最後の取引だけ時間をつけて、12/31 23:00とかして最大値にする方法もあります。
最後の取引だけ時間をつけて、12/31 23:00とかして最大値にする方法もあります。

総購入額はその年の枚数×平均単価の合計なので、
=(SumIfs(G:G,B:B,
=(SumIfs(G:G,B:B,
"
買"
,A:A,"
<2020/1/1"
,A:A,"
>=2019/1/1"
))、
購入枚数は
=(SumIfs(C:C,B:B,
のようにして求められます。
=(SumIfs(C:C,B:B,
"
買"
,A:A,"
<2020/1/1"
,A:A,"
>=2019/1/1"
))のようにして求められます。

実現損益は個別に出したのを合計すればいいので、
=(SumIfs(H:H,A:A,
となります。
=(SumIfs(H:H,A:A,
"
<2020/1/1"
,A:A,"
>=2019/1/1"
))となります。

翌年以降は年だけ増やせばそのまま使い回せます。
比較テスト

少し値を変えて、2019年に200万円ほど購入し、2021年にまとめて手放すものとしてみます。
どの程度変わるかと思ったんですが、
どの程度変わるかと思ったんですが、

総平均法でこれぐらい、

移動平均でこのぐらいで、ほぼ同一の値が出ます。

ありがちなのはこのように、高値で売買した後安値で購入した場合、

総平均法では未決済の買値も取得価額の平均に使われるので、実態は500万で買って400万で売ったのが平均300万で取得して400万で売った計算になり、100万円損失を出してるのに100万円利益を上げたことになります。
逆に言えば安値買いすることで、損失を翌年に繰り越すことが可能です。
逆に言えば安値買いすることで、損失を翌年に繰り越すことが可能です。

移動平均法ではその時その時の時価で清算するので、こういった事態は起こりにくいです。

やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
コメント