海外証券会社の税制と確定申告【IB証券、Firstrade証券、他】

2021/07/06

海外証券会社 資産運用

個人が海外証券会社(海外証券口座)を利用して上場株式やデリバティブ(先物・オプション・FX・CFD等)取引を行った際の税制と確定申告の方法についてまとめます。
また、IB証券、ウィブル(Webull)証券、moomoo証券、サクソバンク証券などの国内口座が充実してきたことに伴い、国内口座用の税制の解説も加えています。
海外口座および国内口座の一般口座用に利用できる取引明細テンプレートも用意しました(※国内口座の外国株信用取引には対応していません)。

海外証券会社(海外口座)とは、国内で金融庁に登録して営業している業者(金融商品取引業者)以外の業者(の口座)を指します。Interactive Brokers証券(IB証券)の米国口座、Firstrade証券、海外FX業者などを指します。
IB証券の国内口座・サクソバンク証券・IG証券・ウィブル証券・moomoo証券などは国内業者(国内口座)となります。

まず注意点として、私は税制の素人であるため誤りがあるかもしれず、参考程度にして頂ければと思います。間違いがあればご指摘頂ければと思います。
本記事は長い記事になっていますが、必要な部分のみ読んで頂ければと思います。

目次

はじめに

基本的に海外の証券会社は、国内の証券会社よりも税制上不利になります。主な不利点として、損失の次年度への繰り越しが出来ない事などがあります。また、確定申告では株式の取引明細書を作る必要があります。

もしある程度の大金を運用するのであれば、資産管理会社として合同会社を設立し、そこで投資を行う選択肢もあります。そうすれば、デリバティブと株式で損益通算ができない・繰り越し控除ができない等の税制の不利点が無くなります。ただ、税理士費用などがかかります(自分で税関係を全て行う場合は税理士費用はかからない)。
この記事では、個人の確定申告について解説します。

投資収益の他に、ルール上は、証券会社に預け入れた外貨にかかる為替差益を申告する必要もあります。ただし一般的にはこれを自分で計算するのは困難です。殆どの人はこれが出来ているとは思えませんし、少額ならば税務署からの追及も無いだろうと思うところではあります(逆に言えば大金を動かしているのであれば税理士に頼むなどしてしっかりと申告したほうが良いです)。これに関しては国内証券会社を使用した外貨での取引についても同様に自分で計算する必要があるので、海外証券会社特有の問題という訳ではありません。
ただ、証券会社が口座内の全ての現金の動きを記載したレポートを発行しているなら、それを基に申告することが出来るかと思います。この場合の申告方法について、外貨の為替損益の計算方法で記述しています。

また、海外証券会社での所得は原則申告が必要ですが、所得税については以下の免除規定もあります(住民税にはありません)。

給与等の収入金額が2,000万円以下である給与所得者は、1か所から給与等の支払を受けており、その給与について源泉徴収や年末調整が行われる場合において、給与所得及び退職所得以外の所得金額の合計額が20万円以下であるときは、原則として確定申告を要しない

No.1900 給与所得者で確定申告が必要な人

まず前提知識として、現物・差金決済の区分と、譲渡所得・雑所得の区分について次に解説します。

現物・差金決済の区分

金融商品は現物取引のものと差金決済取引のものに分かれます。この区分で税の申告方法が変わる部分があります。

現物取引
金融商品を実際に受け渡しする取引です。購入時と売却時に、金融商品とその代金の受け渡しが発生します。
差金決済取引
金融商品の受け渡しをせずに、決済時にその取引の損益額のみを受け渡しする取引です。

取引明細書を作成するにあたって、現物取引の場合は購入時・売却時それぞれの代金について記載します。一方で差金決済の場合は、決済時の損益額のみを記載します。取引明細書の詳しい作成方法は後に記述します。
その他にもこの区分が影響する部分がありますが、これも後に記述します。
次に、各取引がどちらに該当するかについて説明します。

株式
現物取引となります。マージン口座(現金を借りて取引できる口座)での取引も現物取引です。
オプション
現物取引によるものと、差金決済によるもの両方があります。
米国の株式・指数オプションは現物取引で、米国の先物オプションも現物取引だと思われます(全てがそうかは分かりません)。米国外の先物オプションは差金決済が主だと思われます。これは権利行使時に差金決済されるか現物(原資産)の受け渡しが行われるかという問題とは別であり、オプション自身が現物方式か差金決済方式かの話であることに注意してください。
オプションの売買で実際に現金残高(株式口座と先物口座を合わせて)がオプション代金分増減する場合は現物取引です。またIB証券では、ステートメントにて「先物オプション(先物形式)」と表示されるものが差金決済方式で、「先物オプション」とのみ記載されているものが現物取引だと思われます。
FX
通常FX会社が提供するものは差金決済方式ですが、両替やIB証券のスポットFXなどは現物取引となります。
先物・CFD
差金決済方式です。

雑所得・譲渡所得の区分

株式・デリバティブの所得(配当除く)は譲渡所得・雑所得・事業所得のいずれかに分類されます。事業所得は事業規模で行う取引であり、税制上有利なのですが一般の個人には当てはまらないためこの記事では触れません。一般の個人は譲渡所得または雑所得として申告することになります。

譲渡所得
資産の譲渡にかかる所得(営利を目的として継続的に行われる取引にあたらない場合)
雑所得
譲渡所得にあたらない所得(営利を目的として継続的に行われる取引にかかる所得(事業規模を除く)や、資産の譲渡にあたらない差金決済方式による所得など)

雑所得では経費として認められる範囲が譲渡所得よりも広く、勉強のための書籍やセミナー代などを算入できる点があります。その他の違いについては後の項目で触れます。
また、これらの区分とは別に総合課税・分離課税の区分があります。
各取引がどの区分に当たるかについて説明します。

デリバティブ(先物・オプション・FX(差金決済)・CFD)
海外上場デリバティブおよび海外口座の店頭デリバティブは、雑所得(総合課税)となります。
国内上場デリバティブおよび国内口座の店頭デリバティブは雑所得(分離課税)になります。
店頭デリバティブとは業者との相対取引のもので、一般的なFXや、CFD、バイナリーオプション等が該当します。
参考:No.1522 先物取引に係る雑所得等の課税の特例
※上記ページにおいて「市場デリバティブ取引」というのは国内市場のデリバティブ取引のことです。外国市場であれば「外国市場デリバティブ取引」となります。
また、現物オプション取引の場合は資産の譲渡にあたるため譲渡所得になる可能性もあるのでは無いかと思いましたが、税務署としてはオプション取引は雑所得として扱っているようです。この辺りの精査はしていません。
FX(現物取引)・両替
FX(現物取引)と両替は実質的に同じ意味です。資産の譲渡には当たらず、雑所得(総合課税)となるという見解が一般的です。
株式の譲渡
「営利を目的とした継続的な取引」であれば雑所得(分離課税)、そうで無いなら譲渡所得(分離課税)となります。この基準は曖昧ですが、簡便法が示されており、所有期間が一年を超えるものは譲渡所得、一年以下のものは雑所得として良いという通達があります。→通達 株式等の譲渡に係る所得区分
ただ株式については確定申告時に雑所得か譲渡所得かを選択する訳ではないので、このどちらになるかを特別考えなくても申告は行えます。その場合は税優遇の少ない譲渡所得として考えることになります。

次に、上場株式およびデリバティブの税制をそれぞれ具体的に解説します。

上場株式

  • 譲渡益は、上場株式等にかかる申告分離課税として20%の税率になります(復興特別所得税除く)。
  • 海外口座では、譲渡損失の次年度以降への繰り越しが出来ません。国内口座では、損失は3年間まで繰り越すことができます。
  • 譲渡損益は、国内口座および海外口座の上場株式の譲渡損益と通算ができます。
  • 配当は、配当所得として総合課税(税率15%~55%)または申告分離課税(税率20%)で申告できます(税率は復興特別所得税除く)。→No.1331 上場株式等の配当等に係る申告分離課税制度 申告分離課税として申告することにより、国内証券会社での上場株式の譲渡損失と損益通算できます。総合課税として申告すると、日本株の配当の場合は配当控除が受けられますが(海外証券会社を通じての場合でも受けられるかは未確認)、外国株の配当については配当控除は受けられません。申告する上場株式の配当全てについて両方の申告方法を混在させることはできません。
  • 一方で、海外口座での譲渡損失を配当(国内口座・海外口座問わず)と損益通算することはできません。
  • 先物・オプション・FX・CFDなどとは損益通算ができません。
  • 外国所得には日本での課税とは別に、現地での源泉徴収税が課される場合があります。多くの国では株式の譲渡益には非課税ですが、配当には課税されることが多いです。米国では配当への源泉徴収税は基本的に30%ですが、海外口座の場合「W-8 BEN」を証券会社に提出することで10%に減免されます。国内口座の場合は既に10%に減免されているはずです。譲渡益に対する課税はありません※。外国での源泉徴収税は外国税額控除を申請することで一定程度日本での税額から控除できる可能性があります。
    ※追記:2023年から米国のIRC section 1446(f)により上場パートナーシップ(PTP)銘柄について売却代金(売却益では無い)に10%の源泉徴収が発生するようです。以下に参考URLを貼っておきます。PTP銘柄のリストも掲載されています。
    Withholding on Publicly Traded Partnerships under IRC Sec. 1446(f) (IB証券)
    これによると、"Qualified Notice"を発行しているPTPであれば源泉徴収が免除されるようです。ただしQualified Noticeの有効期限は発行から92日間です。Qualified Noticeを発行しているかどうかは銘柄のウェブサイトで確認します。
    国内口座ではそもそもPTP銘柄は取引できない可能性が高いと思われます。
  • 空売り株式について支払った貸株料は、当該株式の譲渡損益にかかる経費にできます。また、株式購入の際の借入金の利子については、当該株式の譲渡損益にかかる経費にできる以外に、配当所得の経費とすることもできます。
  • 債券は、「特定公社債」に当てはまるものは税制上上場株式と同じ扱いとなります。海外証券会社で購入できるものは通常これに当てはまると思われます。譲渡・償還による損益は申告分離課税となります。ただし利子は、総合課税が選択できず申告分離課税となります。利子は配当と同じく、国内証券会社での上場株式の譲渡損失と損益通算ができ、逆に海外証券会社での譲渡損失を利子と通算損益することはできません。

参考
No.1463 株式等を譲渡したときの課税(申告分離課税)
No.1474 上場株式等に係る譲渡損失の損益通算及び繰越控除

また、海外口座で取引した上場株式は税制上、非上場株式(一般株式)扱いになるという情報をネット上で見かけますが、その根拠が私には分からず、税務署に確認した限りにおいても上場株式になるということでした。もしご自分で税務署等に確認し、その結果非上場株式になると言われた場合は、その根拠もしっかりと聞いて判断することを薦めます。

次に確定申告の方法です。
確定申告では、決済された株式についての取得費と売却代金を申告します。空売りであれば、取得費は決済(買戻し)時の支出額、売却代金は新規建て時の収入金額になります。それぞれの額について、原則として取引日の為替レートにて日本円に換算します。
しかし、株式を雑所得(営利を目的として継続的に行われる取引)として申告する場合であれば、継続適用を条件に「月初または前月末の為替レート」や「一月内の平均レート」などを使用することができます。→通達 法第57条の3《外貨建取引の換算》関係
ただ、エクセル等の表計算ソフトを利用すれば一日ごとの為替レートを自動で適用させる事が出来るので、特別にこのようなレートを使う必要は無いかと思います。
譲渡損益にかかる為替レートは収入についてはTTB、支出についてはTTSを用います。→通達 外貨で表示されている株式等に係る譲渡の対価の額等の邦貨換算
この場合、TTMを用いるより節税になります。この通達の文面では、金融商品取引業者(つまり国内の証券会社)との取引を想定したものであるように見られますが、それに限定したものでは無いように読めますし、税務署に確認した限りでは海外証券会社にも適用できるようです。
配当については、国内口座ではTTBを用いますが、海外口座ではそのような規定が無いと思われるためTTMを用います。→通達 外国通貨で支払を受けた配当等を外国通貨で交付する場合の邦貨換算

譲渡損益を算出する際の計算方法として、基本的に「総平均法に準ずる方法」を用います。→No.1466 同一銘柄の株式等を2回以上にわたって購入している場合の取得費 これは取得単価について平均を用いる方法です。
一方で、「信用取引かつ差金決済(反対売買)の場合については「個別法」を用いる」という規定があります。→所得税法施行令 第百十九条 (信用取引等による株式又は公社債の取得価額) これは個別建玉ごとに損益を算出する方法です。
ただし海外口座におけるマージン口座(現金を借りて取引できる口座)での取引は金融商品取引法に規定する「信用取引」には当たらないと思われるため、この規定は適用しません。「総平均法に準ずる方法」について詳しくは後述します。
ただし、株式の空売りに関しては「個別法」を用いるという考え方もあると思います。法令では株式の「取得費」について「総平均法に準ずる方法」を用いるとあるため、空売りにおける新規建て(売却)額に「総平均法に準ずる方法」を用いるとは書かれていないためです。ただし株式のロングとショートで計算方法が違うのは不自然なため、ショートに関しても「総平均法に準ずる方法」を適用(準用)するのが自然だと思われます。

株式の譲渡についての取引明細は、確定申告書の「株式等に係る譲渡所得等の金額の計算明細書」の「特定口座以外で譲渡した株式等の明細」に記載するか、又は別途自分で作成した取引明細を印刷して添付します。取引数が多い場合は、自分で作成した取引明細を添付するほうが良いです。
なお、「特定口座以外で譲渡した株式等の明細」には金融商品取引業者等ごとにまとめて記載するようにアドバイスがあるため、国内業者であれば1取引ごとの明細を提出する必要は無く、業者ごとにまとめて記載しても良いと思われます。
一方で海外証券会社は「金融商品取引業者等」に当たらないため、1取引ごとの明細を提出する必要があるものと思われます(金融商品取引業者であれば支払調書が税務署に行っており税務署側で取引明細を確認できるが、海外証券会社の場合はそうでは無いという事情もあります)。
配当の明細に関しては確定申告書内に記載します。

先物・オプション・FX・CFD

  • 海外上場デリバティブおよび海外口座の店頭デリバティブは、雑所得(総合課税)となり、国内上場デリバティブおよび国内口座の店頭デリバティブは雑所得(分離課税)になります。現物FXは雑所得(総合課税)です。
  • 雑所得(総合課税)は損失の次年度への繰り越しが出来ません。雑所得(分離課税)は、3年までの損失の繰り越しができます。
  • 雑所得(総合課税)は、この区分以外との損益通算ができません。雑所得(分離課税)も、この区分以外との損益通算ができません。株式との損益通算は出来ません。

参考
No.1522 先物取引に係る雑所得等の課税の特例

差金決済のもの(先物・CFD・差金決済のオプション・差金決済のFX(通常のFX))は、決済損益のみを日本円に換算して記載します。現物取引のもの(現物取引のオプション(米国上場オプションなど)・現物FX(両替含む))は、新規建て時の受け渡し金額、決済時の受け渡し金額をそれぞれの時点の為替レートで日本円に換算して記載する必要があります。2つの差額が決済損益となります。
用いる為替レートですが、雑所得を生ずべき業務として申告する場合であれば、原則TTMである一方で継続適用を条件に収入をTTB、支出をTTSとすることができます。→通達 法第57条の3《外貨建取引の換算》関係 これにより節税になりえます。雑所得を生ずべき業務とは、雑所得となる取引かつ、営利を目的として継続的に行われる取引のことで、比較的短期的な取引を行う傾向にある先物・オプション・FX・CFDはこれに該当しやすいと思います。ただ、長期保有しているFX・CFDについては分かりません。また、上場株式の項でも触れましたがこの所得として申告する場合は月初レート等を適用する方法も取ることができます。

これら先物・オプション・FX・CFDについて業務による雑所得として申告する場合、この収入が300万円を超えると、2年後分の業務による雑所得について現金預金取引等関係書類(証券会社のステートメントや自分で作成した取引明細書など)の保存義務が課せられます。
また、業務による雑所得の収入が1000万円を超えると、2年後分の業務による雑所得について取引明細書の提出が必要になります。それ以外の場合については取引明細書を提出する必要が無く、合計収入および必要経費を確定申告書に記載すれば良いと思います。
参考:No.1500 雑所得
※「収入 - 経費 = 所得」です。収入とは、経費を差し引く前の金額です。

損益の計算方法としては、現物取引のオプション・FXについては「総平均法に準ずる方法」を用います。→所得税法施行令 第百十八条
この規定では有価証券について「総平均法に準ずる方法」を用いると定めていますが、現物取引のオプションは有価証券に当てはまるようです(※ただしこの辺りははっきりとした根拠は分かりません)。
一方、現物FXについては有価証券ではありませんが、それに準ずる扱いとすることになっています。次の判決が出ています→国税不服審判所 (平成28年6月2日裁決)
この判決では、有価証券ではない通貨についても、有価証券の規定である「総平均法に準ずる方法」を準用すべきだと言っています。
このことから、現物オプションについても、仮に有価証券に当てはまらないにしても「総平均法に準ずる方法」を採用しておくのが安全ではあると思います。
先物・CFDおよび差金決済のオプション・FXについては規定がありませんので証券会社のステートメントに従うことになります。

オプションについて、権利行使または割り当てによって原資産の受け渡しが行われるもの(米国上場の株式・先物オプションなど)については、権利行使または割り当ての際はオプション自身に損益は発生せず、オプションを新規建てした際の受け渡し金額(プレミアム+手数料)は、権利行使または割り当てによって取得した原資産ポジションの新規建て価額の中に算入されます。→上場株式については(金融商品取引法第28条第8項第3号ハに掲げる取引による権利の行使又は義務の履行により取得した上場株式等の取得価額)
一方で、権利行使または割り当てによって差金決済で終了するタイプのもの(指数オプションや一部の先物オプションなど)については、その損益は全てオプションにかかる損益になります。

取引明細書の作成方法

私の方法を紹介します。取引明細書のテンプレートファイルを作成しましたので、これを基に解説したいと思います。
これは海外口座および国内口座の一般口座用に使用できます。ただし国内口座の信用取引には使用できません。

株式・現物オプション・現物FXは総平均法に準ずる方法、先物・CFD・オプション(差金決済)・FX(差金決済)は証券会社のステートメントに従って計算します。
ただし国内口座の株式信用取引では「個別法」を使用するため、私のテンプレートは使用できません。
株式・現物オプション・現物FXについては、新規建て時と決済時の両方について取引を記載します。
証券会社を複数利用している場合は、シートを分けます。

現物FXに関しては、外貨の為替損益に含まれますので、外貨の為替損益の計算方法で解説します。

私は表計算ソフトとして無料のLibre Officeを使用しており、解説ではこれを基にしますがExcelやGoogleスプレッドシートでも基本は同じなので参考にできるかと思います。異なる部分があればなるべくその点は記述します。

取引明細テンプレートファイルは以下です。
ダウンロード - 取引明細雛形
※2023/09/06 更新

LibreOffice用(odsファイル)、Excel用(xlsxファイル)、Google SpreadSheet用(odsファイル)を用意しています。LibreOffice用以外は設定した書式が一部崩れている可能性があることご了承ください。

最近の主な更新履歴

(2023/09/05)

  • 「複数通貨対応版」において、日本円取引に対応しました。

(2023/01/08)

  • 為替レート表におけるTTS/TTB/TTM列の位置を「設定」シートで指定する形にしました。

(2023/01/03)

  • 複数通貨対応版を作成しました。
  • 為替レート表への参照範囲を「設定」シートで指定する形にしました。

単一通貨のみ対応の旧バージョンも残していますが、単一通貨しか扱わない場合でも複数通貨対応版で対応できます。

(2022/12/21)
「上場株式の譲渡明細」「オプション(現物)明細」について以下の更新を行いました。

  • 権利行使・割り当てのされた株式オプションの代金を、受け渡しされた株式の建て価額(約定代金)に自動で算入する(ただし制限あり)仕様を追加しました。
  • 期末残高を次年度の期首残高へ転記するための補助用の列を追加しました。
  • 銘柄ごとに行を色分けする仕様を追加しました(行色分けを煩く感じる場合は、一番右にある「行色分け用」列を削除するなどしてください)。

また、数式を全面的に簡潔な記載に見直しました。
今回の更新では、古いExcelでは動作しない関数も使用していますので、Excelを使用する場合は新しいものにするかオンライン版のExcelをご使用ください。
一応、更新前のファイルも残しています。
古い方の解説文も一応残しておきます→2022/02/14版 取引明細書 解説

(追記)指数オプションについては権利行使・割り当てで原資産の受け渡しが発生しないため決済として扱います。また、権利行使・割り当てのされたオプションの代金を原資産の建て価額に転記する仕様は株式オプション以外には対応していません。

ベージュ色の列は数式による自動計算列で、それ以外の列にデータを直接入力します。
数式列については、数式が未入力の行にはオートフィルで適用できます(方法は後述)。

為替レート表のシートには、三菱UFJから取得した為替レート表を貼り付けていますが、ここは必要な期間のものに変えて下さい。為替レート表への参照範囲は必要であれば変えて下さい(後述)。

株式の場合は少し厄介な点があり、確定申告では取得費の合計と売却代金の合計をそれぞれ記載しなければならない点です。空売りの場合は、新規建て時は売却代金、決済時は取得費の扱いになりますので、買建てと売建ての両方がある場合は、新規建て価額の合計と決済金額の合計をそれぞれ記載する訳では無いことに注意ください。ただしこの計算は表計算ソフトを用いれば何とかなります。

支出に記載する数値はマイナス、収入に記載する数値はプラスで記載する仕様にしています。

外貨を円貨換算した際は端数が出ますが、確定申告書に記載する数値に端数が出た際は納税者有利という原則に従って、収入の場合は切り捨て、支出の場合は切り上げにします。これは収入をプラス、支出をマイナスとしているのであればINT関数で実現できます。

その他、基本的な利用方法については「利用方法」シートにまとめていますが、詳しい仕様についてはこの記事で解説しています。

次に、取引明細の仕様を一から解説します(長いのでざっと読んで頂けるだけでも良いと思います)。また、計算の結果、不自然な値が算出されていないかどうかを確認してください。

表計算ソフトの前提知識

ここで表計算ソフトを使用する前提知識について触れます。
テンプレートの使用に際してオートフィルは必須ですが、それ以外の項目についてはテンプレートの解説文または仕様を理解するための知識なので、テンプレートを使用するだけであれば必要無いと思います。

オートフィル

オートフィルは、特定のセル範囲の内容を他の範囲にも自動適用する機能ですが、いくつか方法があります。
以下のように、選択したセル範囲の右下の黒い点を下にドラッグすることで、ドラッグ先の行に自動入力できます。または、黒い点をダブルクリックすることで、隣接列における入力済み範囲と同じところまで自動入力されます。
※「その他の金額(円)」が空白なので、これもまとめて選択しています。

もう一つは、行全体を選択して「下方向にコピー」する方法です。

自動入力したい範囲を行ごと選択(行番号上でドラッグ)し、選択範囲の一番上には数式適用済みの行が入るようにし、アイコンメニューから「行」→「下方向へコピー」を選択すればオートフィルできます。※上の画像では数式以外のデータも選択範囲に含まれており、それらもコピーされてしまうので消します。
オートフィルを行った後、その上からデータを入力します。
この方法は、数式の入った列が横に長く続いている場合に便利です。また、後述の株式明細およびオプション(現物)明細では「条件付き書式」を設定しており、これは数式列以外にも設定されているのでこれをコピーするためには行全体でのオートフィルを行うのが良いと思います。

絶対参照・相対参照

数式の中で、$が前につく列文字・行番号・シート名は絶対参照となり参照先が固定されます。$が前に付かないと相対参照となり、参照元のセルがオートフィルやコピー&ペーストによって他のセルにコピーされた際、参照先も同じように移動します。
列文字のみ固定しておけば、セルを横にオートフィルまたはコピー&ペーストしても数式内のセル参照が維持され、縦にオートフィルまたはコピー&ペーストした際は行番号が追従するため便利です。

ワイルドカード

関数の中には、ワイルドカードを使用できるものがあります。ワイルドカードとは「*」と「?」を特殊な文字として使うもので、「*」を0文字以上の任意の文字、「?」を1文字の任意の文字として使用できます。

為替レート表

まず為替レートを入手する必要がありますが、これには「電信売相場、電信買相場及び電信売買相場の仲値については、原則として、その者の主たる取引金融機関のものによることとするが、合理的なものを継続して使用している場合には、これを認める。」(法第57条の3《外貨建取引の換算》関係)という通達があります。
主たる取引金融機関が為替レートを公表していれば良いのですが、公表していないことが多い上にデータシートとしてダウンロードできなければ不便です。
私は、三菱UFJの公表している為替レート表を用いるのが良いと思います。→三菱UFJリサーチ&コンサルティング「1990年以降の為替相場」
このページの下部で、年ごとの為替レート表のファイルをダウンロードできます。
これを取引明細テンプレートの「為替レート表」シートに貼り付けるか、シートとして挿入するかしますが、以下の注意点があります。

基本的には申告する年分の為替レートのみ用意すれば良いと思いますが、もし複数年の為替レートが必要な場合は繋ぎ合わせます。例えば年始の取引で、銀行がまだ新年の為替レートの公表を行っていない日の場合は、前年末の為替レートを使用する必要があります。

日付は上から古い順に並べるようにします。vlookup関数(後述)で拾い上げられるようにするためです。複数年の為替レートを繋ぎ合わせる際はもちろん表の途中に余計な行が入らないようにします。

この三菱UFJの為替レート表は、休日の行も含まれており、休日の為替レートが空白になっています。vlookup関数を使用するにはこの空白行を削除する必要があります。
そうすることで休日の為替レートについてはその前営業日の為替レートを参照するようにします。
空白行を削除するには、フィルター機能を使い、為替レートの列を「空白でない」でソートし、その結果をコピーします。または空白でソートし、空白行を削除します。

また、この三菱UFJの為替レート表では左からTTS、TTB、TTMと並んでおり、テンプレートファイルではこの並び順を前提に計算しています。もしこの並び順が変わるようであれば数式も変更する必要があります。詳しくは約定代金(円)列の解説を参照ください。
(追記)2023/01/08版から、TTS/TTB/TTM各列の位置について「設定」シートで指定できる形にしました。

複数通貨対応版の場合

以下のように、通貨名の記載された見出し行を含んだ全体をコピーし貼り付けます。不要な通貨の列は削除して構いません。

通貨名の記載されたセルが、その通貨のTTS~TTM列の一番左の列(TTS列)にあることを確認してください。通貨名のセルがセル統合されている場合でも、表計算ソフトではその範囲の一番左のセルを通貨名セルと認識します。

次に「設定」シートにて、為替レート表への参照範囲を指定します。
指定する範囲は、「通貨名の見出し行の範囲」および「データ範囲」の2つです。

一番左に日付列を含むようにします。
列範囲(横の範囲)は2つの範囲で同じになるようにします。
ただし範囲の終了位置は余分に多く指定しても構いません。
指定は、以下のようにテキスト形式で記述してもらう形にしています。

既定では、データ範囲は「為替レート表.A4:CQ500」としています。「為替レート表」という名称の別シートの中を参照しています。ただしExcelおよびGoogleスプレッドシートでは別シート参照の式が異なります。LibreOfficeでは「シート名.セル範囲」ですが、ExcelおよびGoogleスプレッドシートでは「シート名!セル範囲」(為替レート表!A4:CQ500)となります。
また、既定では「データ範囲」について500行(約2年分)まで余分に指定しています。

(追記)2023/01/08版から、TTS/TTB/TTM列の位置についても「設定」シートで指定するようにしました。通貨見出し行において通貨名の記載された列を0とし、その右隣の列を1とした時、TTS/TTB/TTM各列の番号を記載します。

単一通貨対応版の場合

通貨の見出し行はあっても無くても構いません。一つの通貨(主に米ドル)のみ対応なので、その通貨の列以外は不要です。
「設定」シートにてデータ範囲をテキスト形式で指定します(※2023/01/03にこの方法に変更)。この範囲は「複数通貨対応版の場合」での「データ範囲」と同じく一番左に日付列を含むようにし、見出し行は含めません。

(追記)2023/01/08版から、TTS/TTB/TTM列の位置についても「設定」シートで指定するようにしました。参照範囲(データ範囲)における各列の列番号を指定します。日付列(一番左の列)が1となり、その右隣りの列は2となります。

その他注意点等は「複数通貨対応版の場合」と同様です。

2023/01/03以前の版で為替レート表の参照範囲を一括変更する方法

2023/01/03以前の版ではvlookup関数内で参照範囲を直接記述しています。この範囲を一括変更するには、「検索と置換」機能を利用します。以下はLibreOfficeのものですがExcelにも同等のものがあります。
2_20210718124201
既定では「$為替レート表.$A$2:$E$500」(ExcelとGoogleスプレッドシートでは「$為替レート表!$A$2:$E$500」)となっていますのでこれを検索し、置換先に新しい範囲を入力します。「すべてのシート」にチェックを入れ、「検索場所」を「数式」にします。置換処理後は正常に置換されているか確認してください。
また、LibreOfficeのバグなのか数式内に「$為替レート表.$A$2:$E$500」と入力してもいつの間にか「$為替レート表.$A$2:$為替レート表.$E$500」のように無駄に長い表記に変わっていることがありましたので、ご注意ください。

株式およびオプション(現物取引)の取引明細

ここでは株式およびオプション(現物取引)の取引明細について、私の作成方法を詳しく解説します。配当については、この後の項目で触れます。
株式の取引明細とオプション(現物取引)の取引明細は、権利行使・割り当てされたオプションの代金を転記する仕様に関連したものを除けば共通の仕様となっていますので、ここで一緒に解説します。

ここでは株式を想定した用語を用いますが、現物オプションの場合は「株式」を「オプション」、「株数」を「数量」、「空売り」を「ショート」などに読み替えて下さい。
「総平均法に準ずる方法」について説明します。以下は株式の購入を行う際の説明になりますが、株式の空売りの際は「取得」を「空売り」、「保有株数」を「空売り株数」、「売却」を「買戻し」などに読み替えて下さい。
同一銘柄の株式について、取得した都度、取得金額(円換算額)を足していき、取得金額の合計(円換算額)を算出します。そして「取得金額合計(円)÷保有株数」がその時点での取得単価となります。
そして、株式の売却を行った際に、「売却金額(円)-(売却株数×取得単価)」が決済損益となります。
この取引後の取得金額合計(円)は、「保有株数残り×取得単価」となります。そして新たな取得単価を「取得金額合計(円)÷保有株数」で算出します。
参考ページ:No.1466 同一銘柄の株式等を2回以上にわたって購入している場合の取得費

以下は私の作成したテンプレートの画像です。
株式明細

オプション明細

銘柄ごとに取引をまとめ、その中で取引を時系列に記載します。空売りと買建ての両建てが可能な証券会社の場合(Firstrade証券など)で、実際に両建てを行った場合は空売りと買建ては別銘柄としてまとめます。IB証券は両建てができないので別けません。
それぞれの列について説明します。まず株式とオプションで概ね共通している列について触れ、その後で権利行使・割り当てに関する列について触れます。

銘柄名
参考画像のように、銘柄名はその銘柄の欄の一行目、年度内初めの取引または期首残高(前年から持ち越された分)が記載された行のみに記載する方法か、または全行に記載する方法のどちらも取ることが出来ます。私の数式ではこの銘柄名セルを見て、当該銘柄における最初の取引または期首残高かを判定しています。
通貨(複数通貨対応版のみ)
通貨名を記載します。この通貨名を為替レート表で検索しますので、為替レート表に記載の表記と同じにします。(2023/09/05版から円建て取引に対応しました。円建て取引では「JPY」と入力します)
取引日
西暦を含めて日付を入力します。今年の場合は西暦は省略しても表計算ソフトが自動で補完してくれます。株式については基本は受け渡し日基準なのですが、約定日基準も選択できます。海外証券会社のステートメントの日付に合わせます。IB証券は約定日基準、Firstradeは受け渡し日(決済日)基準になっているようです。受け渡し日(決済日)基準の場合は、この列の名称も「決済日」に変えた方が良いかもしれません。
数量
買いはプラス、売りはマイナスの符号で取引株数を記載します。
約定代金
元々の通貨(外貨)での約定代金を入力します。収入はプラス、支出はマイナスです。
手数料
元々の通貨(外貨)での手数料を入力します。支出なのでマイナス表記となります。
権利行使 / 割り当て(オプション明細)・権利行使 / 割り当てにより取得(株式明細)
株式明細では、権利行使・割り当てによる取引である場合、ここに○を入れます。
オプション明細では、権利行使・割り当てで原資産の受け渡しが行われる取引の場合に○を入れます。
※株式オプション以外はオプション代金を原資産の建て価額へ自動で転記する仕様には対応していませんが、このセルには○を入れてください。この取引の損益を決済損益ではなく権利行使・割り当ての損益として表示しますので、これを手動で原資産の建て価額へ転記してください。
約定代金(円)
ここでvlookup関数を使い、「約定代金」を円に直します。数式は以下です。
= 約定代金セル * VLOOKUP( 取引日セル, 為替レート表の範囲, 為替レート表内でのTTMまたはTTB/TTS列を示す列番号 )
VLOOKUP関数は、引数に(検索値, データ範囲, データ範囲内での取得したいセルの列番号, 検索の型)を取ります。「検索値」を「データ範囲」の一番左の列から検索し、合致した行の「データ範囲内での取得したいセルの列番号」にあるセルの値を取得します。「検索の型」では近似一致か完全一致を指定しますが省略可能です(後述)。
(追記・・・2023/09/05版から、日本円取引の場合は約定代金セルをそのまま転記するための条件式を追加しました。)

為替レート表の範囲について
従来は直接記述していましたが2023/01/03版からは、「設定」シートで記述した範囲をINDIRECT関数で読み込む方法にしました。
INDIRECT関数では、テキスト形式で記述されたセル範囲を引数として受け取り、実際の参照として返します。
※従来方式(直接記述する方式)では、「$為替レート表.$A$2:$E$500」のように絶対参照で記述します。
為替レート表内でのTTMまたはTTB/TTS列を示す列番号について
複数通貨対応版の場合
まず、通貨セルに記載された通貨名を為替レート表内で探し、その列番号を取得します。「通貨の為替レート表内列番号」列でこの計算を行いますのでこれについては後述します。
為替レート表内で通貨名が記載された列はTTS列であることを前提にしています。その右にTTB列があり、更にその右にTTM列があることを前提にしています。
そのため、TTSを取得する場合の列番号は「通貨の為替レート表内列番号」で算出された列番号になり、TTBを取得する場合はそれに+1をした値、TTMは+2の値となります。TTS/TTB/TTMの並び順が異なる場合はこの計算を変更します。
(追記)2023/01/08版から、TTS/TTB/TTM各列の位置(通貨名が記載された列からの相対位置)を「設定」シートで指定する形にしました。これら指定された値と、「通貨の為替レート表内列番号」で算出された列番号を足せば、目的の列番号になります。
単一通貨対応版の場合
為替レート表が以下の画像の通りであればTTS列は3、TTB列は4、TTM列は5となります(青色の範囲が参照範囲)。

(追記)2023/01/08版から、TTS/TTB/TTM各列の列番号は「設定」シートで指定する形にしました。

次に、TTMを取得する場合はそのままTTM列の番号を記述しますが、TTB/TTSを取得する場合はどちらを取るかを条件式で判別するので以下のようになります。
IF( 約定代金セル<0, TTS列の番号 ,TTB列の番号 ) これで、約定代金が0未満(支出の場合)であればTTS列の番号を示し、そうで無い場合(収入の場合)はTTB列の番号を示します。
検索の型について
ここではvlookup関数で指定している値は3つですが、4つ目の値として検索の型というのがあります。これは省略またはTrueまたは1にします。このようにすれば、参照する取引日が為替レート表に存在しない場合(休日などで)はその直前の日付の為替レートを返してくれます。この方法を利用するには、為替レート表内の日付は上から古い順に並んでいる必要があります。
手数料(円)
手数料セルの値を日本円に変換します。上記の数式の、約定代金セルの部分を手数料セルに置き換えます。為替レートについて、手数料は約定代金と合算して受け渡しされるものなので、約定代金がTTBの場合に手数料がTTSということは出来ないと思います。そのため個人的に合理的だと思うTTMを採用しています。
その他の金額(円)
取引金額に算入するその他の金額が発生することがありますので、この項目を設けています。金利や貸株料などを想定していますが、これらはここに記載するのではなく別に計算したほうが良いかもしれません。
合計金額(円)
オプション明細では、約定代金(円)+手数料(円)+その他の金額(円)です。
株式明細ではそれに加え、オプション代金(円)(後述)を足します。
数量残
取引後の保有株数を示します。ここから数式が少し複雑になっています。
まず、その銘柄範囲の一行目かどうかを判定し、一行目の場合はそのまま今回取引された数量を数量残とします。一行目で無い場合、一行上の数量残セルと今回取引された数量を足します。
一行上のセル参照についてですが、そのまま指定すると、行の挿入や削除に伴ってセル参照が狂います。なのでそのような操作があっても常に一行上のセルを参照できるようにOFFSET関数を用います。基準セルの一行上のセルを参照する式は以下になります。
OFFSET(基準セル, -1, 0)
そして、その銘柄の一行目である判定を行う条件式については、補助計算用の列として「銘柄範囲の一行目判定」列をつくり、そこで判定するようにしていますのでこの列については後述します。

ここまでが基本なのですが、私の方法ではこれにエラー判定の条件文を加えています。ドテン注文という、一つの買い取引で売り建玉を決済すると同時に新規買建を行ったり、その逆を行ったりするものがあるのですが、このような取引を記載しようとすると、数式がもっと複雑なことになるのでこれを防ぐためにエラー判定の条件文を加えています。ドテン注文がある場合は、決済取引と新規取引に分けて記載します。手数料等も分けます。

数式は以下となります。IFS関数では、括弧内(引数)の1番目に「条件1」、2番目に「条件1が真の時に示す値」を入れ、3番目以降は任意になりますが、条件1が偽の場合に「条件2」、「条件2が真の時に示す値」...と続きます。分かりやすいように数式を整形しています。
= 数量セル + IFS(
銘柄範囲の一行目判定セル, 0,
(数量セル+一行上の数量残セル)*数量残の一つ上のセル<0, "エラー:ドテン注文は分けて記載してください", 1, 一行上の数量残セル
)
エラー判定式については、今回の数量残と前回の数量残の符号が逆の場合にエラーにするため、「今回の数量残×前回の数量残<0」の場合にエラーにするようにしました。
また、上記IFS関数の括弧内(引数)の最後の行にある"1"というのはTrue(真)を表す数字になります。今までの条件に当てはまらなかった場合、無条件で一行上の数量残セルの値を表示するということになります。
建て価額残(円)
各取引の建て価額を合計した残高(円)を示します。「建て価額」とはポジションの取得価額のことであり、新規取引時の「合計金額(円)」になります。つまりこの列では現在保有しているポジションの取得価額合計を示します。
※ポジションとは、株式などを買い(ロング)または空売り(ショート)して未決済のものを言います。株式を購入した場合は単に株式の取得・保有と言えば良いですが、空売りした株式については株式を取得・保有しているとは言えません。しかしポジションという言葉を使えば、空売りしたものについてもポジションを取得・保有していると言えます。
まずその行の取引が新規取引か決済取引(オプションの場合は権利行使・割り当てを含む)かで数式が異なるため、それを判断する条件式が必要です。これについては新たに列を作り(株式の場合は「決済」列、オプションの場合は「決済または権利行使 / 割り当て」列)、そこで判定を行うようにしていますので詳しくは後述します。
それ以前に、この行の取引がその銘柄の初めの場合は新規取引になります。
新規取引かつその銘柄の初めの取引の場合は、合計金額(円)が建て価額残(円)となります。
新規取引で前回取引がある場合は、前回の建て価額残(円)+今回の合計金額(円)となります。
決済取引(オプションの場合は権利行使・割り当てを含む)の場合は、平均建て単価×数量残となります。
数式は以下です。
= IFS(
銘柄範囲の一行目判定セル, 合計金額(円)セル,
決済セル(オプション明細では「決済または権利行使/割り当て」セル), 一行上の建て価額残(円)セル+合計金額(円)セル, 1, 数量残セル*平均建て単価セル
)
平均建て単価
建て価額残(円)を数量残で割ったものです。取引後の値となります。そのままだと数量残が0の場合はエラーとなるため、数量残が0の場合は何も表示しないようにする条件式を入れています。また、株式の取得にかかる平均取得単価の計算時には端数の切り上げをするという通達があるため(1単位当たりの取得価額の端数処理)、ここではINT関数を使用して切り上げを行っています。オプションの場合でもこれを適用して良いかと思います。数式は以下となります。
IF関数では、引数の1番目に条件式、2番目に条件が真の場合の値、3番目に条件が偽の場合の値を入れます。
= IF(
数量残セル=0,
"",
INT(建て価額残(円)セル/数量残セル)
)
決済
決済取引の場合に○を表示します。後ほど集計時に決済取引のみをフィルターで絞り込むのにも使います。
株式の場合は、保有ポジションの数量の符号と、今回取引の数量の符号が逆の場合(反対売買である場合)に、決済取引と判断します。
株式明細での数式は以下です。
= IFS(
その銘柄の一行目判定セル, "",
一行上の数量残セル*数量セル>=0, "", 1, "○"
)
オプション明細では、上記の条件判定では決済取引だけでなく権利行使・割り当てについても"○"になります。そのため、上記の判定に加えて、「権利行使 / 割り当て」セルに○が無い場合に決済取引と判断します。
まず「決済または権利行使 / 割り当て」列を新たに作り、そこに上記の数式を入れます。そして「決済」列には以下の数式を入れます。
= IF(
AND(決済または権利行使/割り当てセル, 権利行使/割り当てセル<>"○"),
"○",
""
)
建て価額(円)(列名一行目「決済」内)
決済されたポジションにかかる、建て価額(ポジション取得価額)を示します。決済の場合に「-1×取引数量×取引前の平均建て単価」を示します。数式は以下です。
= IF( 決済セル<>"○", "", -数量セル*一行上の平均建て単価セル) この式中の○について、決済セルの○と同じものであることを確認してください。記号と漢数字で異なります。
決済損益(円)
決済されたポジションにかかる損益(円)を表示します。決済の場合に合計金額(円)と建て価額(円)を足したものを表示します。数式は以下です。
= IF( 決済セル<>"○", "", 合計金額(円)セル+建て価額(円)セル)
建て価額(円)(列名一行目「権利行使 / 割り当て」内)(オプション明細のみ)
オプション明細では権利行使・割り当てのされたもの(かつ原資産の受け渡しが行われるもの)についての損益を表示するための列範囲「権利行使 / 割り当て」を作ります。ここで表示する損益は、決済されたとした場合の損益と同じです。なので基本としては列名一行目「決済」内の「建て価額(円)」および「決済損益(円)」の内容をベースにします。「権利行使 / 割り当て」セルに○が入力されているものの損益については「決済」欄の代わりにこちらに表示するようにします。

ただしそれに加え、一応エラー判定として「決済または権利行使 / 割り当て」セルに○が無い状態で「権利行使 / 割り当て」セルに○を入力したらエラーを表示するようにしています。建て価額(円)セルの数式は以下になります。
= IFS(
権利行使/割り当てセル<>"○", "",
決済または権利行使/割り当てセル<>"○", "エラー:権利行使/割り当てと判定できません",
1, -数量セル*一行上の平均建て単価セル
)
損益(円)(列名一行目「権利行使 / 割り当て」内)(オプション明細のみ)
決済損益(円)セルの内容をベースに、条件を「決済された際」ではなく「権利行使・割り当て(原資産が受け渡しされるもの)のあった際」に変更します。
このセルに表示される値を、受け渡しされた原資産の建て価額に転記します。株式オプションの場合はこれを自動で行う仕様(ただし制限あり)になっています。
= IF( 権利行使/割り当てセル<>"○", "", 合計金額(円)セル+建て価額(円)セル)

次に触れるのは、補助用(補助計算用)の列となります。

銘柄範囲の一行目判定
AND(TRIM(銘柄名セル)<>"", TRIM(銘柄名セル)<>TRIM(一行上の銘柄名セル))この条件式は、銘柄名をその銘柄の範囲の一行目にのみ記載する方法および全行に記載する方法に両対応した条件式となります(2022-02-13にこの方式へ変更)。
銘柄名(全行)
銘柄名をその銘柄範囲の一行目にのみ記載する方法を取っている場合のために銘柄名を全行に記載し直す列を作っています。この列は、期末残高を来年の期首残高へ転記する用、およびオプション損益を株式明細に転記する用に使用します。
= IF(
TRIM(銘柄名セル)="",
一つ上の銘柄名(全行)セル,
銘柄名セル
)
期末残高行
現時点での期末残高を表している行に○を表示します。
= IF(
AND(銘柄名(全行)セル<>一つ下の銘柄名(全行)セル, 数量残セル>0),
"○",
""
)
通貨の為替レート表内列番号(複数通貨対応版のみ)
通貨セルに記入された通貨名を、為替レート表から検索し、その位置の列番号を表示します。これを基にVLOOKUP関数で目的の為替レートを取得します。
検索するにはMATCH関数を使います。引数として(検索値, 検索範囲, 照合の型)を取り、検索値が検索範囲の中でどの位置にあるかを返します。「照合の型」では今回は完全一致にしたいので0を指定します。この部分の数式は以下です。
MATCH("*"&TRIM(通貨セル)&"*", 為替レート表における通貨見出しの範囲, 0)

MATCH関数ではワイルドカードを使用できるため(完全一致の場合)、通貨セルに記入されている値が「含まれる」セルを検索するようにしました。
また私のテンプレートではこの数式に加えてエラー判定文を入れています。通貨セルが空白の場合にエラー文を表示し(空白の場合だと誤ったセルが検索されてしまうため)、また、為替レート表で該当するものが見つからなかった場合にエラー文を表示するようにしています。最終的な数式は以下です。
=IF(
TRIM(通貨セル)="",
"エラー:通貨セルに入力してください",
IFNA(
MATCH("*"&TRIM(通貨セル)&"*", 為替レート表における通貨見出しの範囲, 0),
"エラー:当該通貨列が為替レート表内に見つかりません"
)
)

(追記・・・2023/09/05版から日本円対応したことに伴い、通貨セルにJPYと入力された場合は為替レートの検索を行わない条件式を追加しました。)

権利行使された株式オプションの代金を株式明細に転記するための仕様について解説します。(2023/09/05版から日本円対応しましたが、株式について自動で日本円へ両替される取引の場合は、この仕様の適用外になります。株式明細の「オプション代金(円)」へ手動で入力してください。)
まず、権利行使・割り当ての行われたものについて双方で識別子を作成し、互いに合致するかを確認します。識別子の内容は、「日付(時刻の入力があれば時刻も含む)」「株式名(原資産名)」「株式の約定単価(オプションの権利行使価格)」「受け渡しされる株式の買/売の別」です。
オプション明細での識別子の作成にあたっては、銘柄名セルに入力されているオプション銘柄名(例:AAPL 09DEC22 150 C)から各項目(原資産名・権利行使価格・コール/プットの別)を抽出する必要があります。私の方法では、各項目が空白で区切られていることを前提に、何番目に各項目が存在するかを指定してもらう方法を取っています。「設定」シートにて各項目の位置を指定してください。各項目が空白で区切られていない場合には対応できません。その場合は別の抽出方法を使います。一般的には正規表現を使用できる関数(LibreOfficeではREGEX関数)にて抽出できます。
合致する候補が複数見つかった場合(上述の条件がすべて等しい取引が複数見つかった場合)は、以下のようになります。
・オプション明細側で複数の候補がある場合には対応できません。その場合はエラーを表示しますので、手動で転記してください。
・株式明細側にのみ複数の候補がある場合には対応します。何らかの理由で一つの権利行使・割り当てによる株式ポジションの取得が、複数の株式取引に分割されて明細に記載されている場合が想定されます。
オプション明細側の候補が一つのみであることを確認後、次は、受け渡しされる株数の合致を確認します。
オプション明細側で算出した受け渡し株数が、株式明細側での株数合計と等しいことを確認します。オプションの1コントラクトは株式100株に対応していることが前提です。
これを確認後、オプション代金を株式明細の「オプション代金(円)」セルに転記します。
株式側の候補が複数の場合は、オプション損益はそれぞれの株式取引の株数に応じて割り当てます。

次に、具体的に関連の各列を見ていきます。
オプション明細と株式明細とで列が異なるため、それぞれ解説します。

オプション明細

識別子
識別子の作成にはオプション銘柄名から各項目(原資産名・権利行使価格・Call/Put)の抽出が必要です。オプション銘柄名を空白で切り分け、何番目に各項目があるかを指定してもらいます。
抽出に用いる関数ですが、現状、LibreOffice用、Excel用、Googleスプレッドシート用でそれぞれ異なる関数を用いています。共通で用いることのできる関数で適切なものが見つからなかったためです。
LibreOfficeでは正規表現でテキストを抽出できる関数を用い、ExcelとGoogleスプレッドシートではテキスト分割の関数を用いています。

例として「AAPL 01MAR22 150 C」が2022/03/01に割り当てされたものは「44621 AAPL 150 -」という識別子にしています。

まず日時はシリアル値という形で「44621」などとして記載していますが普通の日時形式でも良いです。TEXT関数で日時形式をテキスト形式に直しています。TEXT関数ではテキストの書式を第二引数で指定しますが、この辺りは適当にします(ただし株式明細での識別子の作成で用いる書式と同じにします)。この部分の数式は以下のようになります。
TEXT(取引日セル, "0.########") 次にオプション銘柄名から各項目を抽出しますが、LibreOfficeに関しては各項目は以下の関数で抽出できます。
REGEX(銘柄名(全行)セル, "[^\s]+", , 指定した位置番号) Excelでは以下の数式で抽出できます。
INDEX(TEXTSPLIT(銘柄名(全行)セル, " ", , 1), 1, 指定した位置番号) Googleスプレッドシートでは以下の数式で抽出できます。
INDEX(SPLIT(銘柄名(全行)セル, " "), 1, 指定した位置番号)
原資産名は、これらの関数で抽出するだけです。権利行使価格は、関数で抽出した後、TEXT関数で書式を整えます。小数点第一位まで記述するようにしています。
最後に+/-の符号ですが、これは受け渡しされる株式の買/売の別を表します。この算出は別の列(「株式符号」)で行いますので後述します。
これらの項目を空白を挟んで繋ぎ合わせれば識別子となります。
Put/Call
Put/Callを示すテキストを上述の関数で抽出します。
株式符号(+ / -)
受け渡しされる株式の買/売の別を符号で表します。
Callかつ数量セルがプラス(=ショートポジションの手仕舞い)の場合またはPutかつ数量セルがマイナス(=ロングポジションの手仕舞い)の場合は株式の売り取引が生じます。Callかつ数量セルがマイナスの場合またはPutかつ数量セルがプラスの場合は株式の買い取引が生じます。
ここではCOUNTIFS関数を用います。この関数の引数は(範囲1, 条件1, 範囲2, 条件2...)となり、全ての条件が満たされたデータの数を表示します。条件の中でワイルドカードを使用できるため、Putは"P*"、Callは"C*"として検索し、テキストの先頭にPかCどちらがあるかを判定しています。
= IFS(
権利行使/割り当てセル<>"○", "",
COUNTIFS(Put/Callセル, "C*", 数量セル, ">0")+COUNTIFS(Put/Callセル, "P*", 数量セル, "<0")=1, "-",
COUNTIFS(Put/Callセル, "C*", 数量セル, "<0")+COUNTIFS(Put/Callセル, "P*", 数量セル, ">0")=1, "+"
)
株数
受け渡しされる株数を表示します。オプションの数量に100をかけた数の絶対値に、株式符号セルで算出した符号をつけます。
ABS関数で絶対値を求めることができます。
=IF(
権利行使/割り当てセル<>"○",
"",
IFS(株式符号セル="+", 1, 株式符号セル="-", -1)*ABS(数量セル)*100
)
識別子と株数が合致
オプション明細の識別子および株数と、株式明細の識別子および株数を照合します。
株式明細で同じ識別子があるか検索し、該当する全ての株式取引における数量を取得し、その数量合計がオプション明細における株数セルの値と等しいかどうかを判定します。
SUMIFS関数を使用します。引数として(合計対象範囲, 条件範囲1, 条件1, 条件範囲2, 条件2...)と指定し(条件範囲2以降は任意)、全ての条件に合致する行または列にある、合計対象範囲内のセルの値を合計します。
=IF(
権利行使/割り当てセル<>"○",
"",
SUMIFS(株式明細における数量列, 株式明細における識別子列, 識別子セル)=株数セル
)

株式明細

識別子
日時はTEXT関数にてオプション明細と同じように、同じ書式で取得します。
銘柄名は、一応TRIM関数で余計な前後の空白を除去して取得します。
※ここの銘柄名と、オプション明細の識別子セルにおける原資産名が同じであることを確認してください。株式の両建て取引がある場合は取引明細ではロングポジションとショートポジションに分けて記載しますが、その際にショートポジションの銘柄名を「銘柄名(short pos.)」などのように改変している場合は、ここで元々の銘柄名に直して取得する必要があります。この場合SUBSTITUTE関数を使い、以下のようにすると良いと思います。
TRIM(SUBSTITUTE(銘柄名(全行)セル, "(short pos.)", ""))
約定単価(=オプションにおける権利行使価格)は、約定代金÷数量に-1をかける、または絶対値に直した値になります。
符号は、数量セルの符号になります。TEXT関数の第二引数で"+;-"とすると第一引数で指定した値が正なら+、負なら-と表示してくれます。
これらを空白を挟んで繋ぎ合わせます。
=IF(
権利行使/割り当てにより取得セル<>"○",
"",
TEXT(取引日セル,"0.########")&" "&TRIM(銘柄名(全行)セル)&" "&TEXT(-1*約定代金セル/数量セル,"0.#")&" "&TEXT(数量セル, "+;-")
)
識別子合致数
株式明細の識別子と同等のものがオプション明細でいくつ見つかるを検索します。
COUNTIF関数を使用しています。この関数はCOUNTIFS関数と比べると複数の条件を設定できない制限があるだけで他は同じです。
ここで2つ以上見つかった場合はエラーを表示し、手動転記してもらいます。
=IF(
識別子セル="",
"",
COUNTIF(オプション明細における識別子列, 識別子セル)
)
合致行番号
識別子合致数セルの値が1の場合に、株式明細において合致した行の番号を表示します。
MATCH関数を使用しています。この関数は、検索値が検索範囲の中でどの位置にあるかを表すものです。列全体を検索範囲とすることで、目的のセルの行番号を取得できます。
引数として(検索値, 検索範囲, 照合の型)と指定します。「照合の型」は、今回は完全一致にしたいので0を指定します。
= IF(
識別子合致数セル<>1,
"",
MATCH(識別子セル, オプション明細の識別子列, 0)
)
オプション代金(円)
最後に、「取引」(列名一行目)にある「オプション代金(円)」セルにオプション代金を転記します。
まず識別子合致数セルの値を見て0の場合および2以上場合それぞれにエラー文を表示させています。次に、識別子合致数が1の場合、オプション明細において合致した行の「識別子と株数が合致」セルがTrueであることを確認し、Falseであればエラー文を表示します。Trueの場合、オプション明細における同行の「権利行使 / 割り当て」(列名一行目)の「損益」の値に「株式明細における株数÷オプション明細における株数」をかけたものを表示します。
合致行から指定の列の値を取得するのにはINDEX関数を用いています。引数として(参照範囲, 行番号, 列番号)を取り、参照範囲内での行番号と列番号が交差したセルの値を表示します。
=IFS(
権利行使/割り当てにより取得セル<>"○", 0,
識別子合致数セル>=2, "エラー:オプション取引の候補が2つ以上あるため、手動入力してください",
識別子合致数セル=0, "エラー:オプション取引に該当するものがありませんでした",
INDEX(オプション明細における「識別子と株数が合致」列, 合致行番号セル, 1)=0, "エラー:オプション取引の候補が見つかりましたが株数が合致しません",
1, INDEX(オプション明細における「権利行使/割り当て」(列名一行目)の「損益(円)」列, 合致行番号セル, 1)*数量セル/INDEX(オプション明細における「株数」列, 合致行番号セル, 1)
)

これで一通りテンプレートは完成しました。

期首残高(前年から持ち越された分)がある場合は、その銘柄範囲の初めの行の「残高」各列(「数量残」「建て価額残(円)」「平均建て単価(円)」)に手動で入力し、そこには数式は入れません。その他の列には入力不要です。

オプションの権利行使について改めてまとめます。
権利行使によって原資産の受け渡しが発生するタイプのものについて権利行使が行われた際は、「権利行使 / 割り当て」セルに○を入れます。そうすることで、決済扱いにせず「権利行使 / 割り当て」(列名一行目)の「損益(円)」セルにオプション代金を表示しますのでこれを原資産の明細へ転記します。株式オプションの場合は、基本的に自動で転記を行います。
権利行使によって差金決済で終了するタイプのもの(指数オプションなど)については、「権利行使 / 割り当て」セルに○は入れず、通常通りの決済取引とし、約定代金には差金決済損益を記入します。

決済損益合計などを計算する時はSUM関数を使います。「=SUM(合計したいセルの範囲)」で求められます。
株式の場合、取得費の合計と収入金額(売却金額)の合計を確定申告書に記載する必要がありますが、これらはフィルター機能を使って計算できます。
フィルターで「決済セル=○」かつ「合計金額(円)セル>0」で絞った結果の合計金額(円)と、「決済セル=○」かつ「建て価額(円)セル(列名一行目「決済」内)>0」で絞った結果の建て価額(円)を足した合計が収入金額合計となります。

取得費についても同じ要領で、「決済セル=○」かつ「合計金額(円)セル<0」で絞った結果の合計金額(円)と、「決済セル=○」かつ「建て価額(円)セル(列名一行目「決済」内)<0」で絞った結果の建て価額(円)を足した合計が取得費合計となります。

フィルター機能以外ではSUMIFS関数やDSUM関数でも算出できます。
テンプレートでは「集計」シート内でSUMIFS関数を用いて算出しています。
ただし確定申告書には「譲渡のための委託手数料」を記載する項目があり、つまり売却時の手数料を別に申告するようになっているのですが、空売り取引があるとその計算は複雑なことになってしまうため、この項目は使わないで良いと思います。税額の計算には影響しません。
払った貸株料や金利などは、必要経費として記載します。
確定申告書に記入する際はマイナスの符号は除きます。
オプションの場合は、決済損益を合計したものを雑所得(総合課税)として申告するだけで良いと思いますが、決済時の手数料について経費として分けて申告することも出来ます。
※オプションの場合も株式と同じように収入金額合計と取得費合計を算出し、収入金額合計をそのまま収入金額として、取得費合計を経費として申告するのがより正しい方法かもしれません。

上場株式の取引明細に関しては、確定申告書に添付します(提出用紙である「株式等に係る譲渡所得等の金額の計算明細書」内に全て記載するのであれば別途添付は不要)。別途添付する場合で、e-Taxで申告する場合もこの取引明細は別途印刷して提出する必要があります。
印刷するにあたり、印刷する際の書式は「書式」→「ページスタイル」で変更できます。

デリバティブ(差金決済)の取引明細

差金決済方式による先物・オプション・FX・CFDに関しては決済時の取引のみ記載すれば良く、簡単です。
ただし、現物取引の先物オプションの権利行使・割り当てによって取得したポジションの決済に関しては、ステートメントに記載の決済損益(オプション代金算入済み)をそのまま記載せず、算入するオプション代金についてはオプション(現物)明細にある当該オプション損益(円)から転記します。

列については、株式明細およびオプション(現物取引)明細の中の、「銘柄名」~「合計金額(円)」列を転用し、「取引日」の名称を「決済日」、「約定代金」の名称を「決済損益」に直せば良いと思います。
申告の際には、経費である「手数料(円)」と、収入である「決済損益(円)」に分けて申告すると良いと思います。

以下は私のテンプレートの画像です。
Photo_20210710104101

または、証券会社の取引明細をCSVなどでダウンロードし、それを表計算ソフトにコピー&ペーストまたはシートとして挿入し、そこに数式を加えて計算する方法も出来ると思います。

配当の明細

株式の配当に関しては、確定申告では決められた書式に記載することになりますが、そのための元となる明細を作っておくと便利です。
私のテンプレートでは以下になります。
2_20210719022001

「配当額」には現地での源泉徴収税が課される前の配当額を記入します。
「現地源泉徴収税額」は、現地(外国)で課された税額です。
「差引収入額」は、「配当額」から「現地源泉徴収税額」を引いた、手取り収入です。
その後の列ではそれぞれの項目を円に直しています。
また、最後の「差引収入額(円)」はINT関数で納税者有利方向に切り捨てを行っています。
配当を申告する際は、この明細の「銘柄」「差引収入額(円)」を用います。
確定申告書作成コーナーを利用する時は、配当集計フォームにこれらをコピーすることができます。
この明細は外国税額控除に利用することもできます。

IB証券の場合、アクティビティステートメントに配当および源泉徴収税の欄がありますが、これは使わずに税金レポートにあるDividend Report(配当レポート)を使用したほうが良いです。こちらのほうが最終的で正確なレポートになっています。
年間アクティビティステートメントでは、配当または源泉徴収税の発生日ではなく、報告書基準日(金額が報告された日?)を基準として年度内の取引が記載されています。おそらく暫定的な金額が記載されており、年内の配当についても源泉徴収税は翌年のレポートになる場合があったり、源泉徴収税の金額の修正による還付の記載があったりと申告には使いづらいため、配当レポートを使用したほうが良いと思います。
ただし発行されるのが少し遅く、2月半ばに発行されています。

またこのレポートには、配当金の他に配当金相当額(Payment in Lieu)が記載されていることがあります。配当金相当額には、例えば空売り株式に関して支払う配当金相当額(日本の信用取引における配当落調整額に相当)や、貸し出した株式に関して受け取る配当金相当額があるようです。
空売り株式にかかる配当金相当額については配当所得として申告するのでは無く、株式の譲渡に係る所得(損失)または雑所得の損失として申告すると思われます(要確認)。貸し出した株式についての配当金相当額は雑所得のように思います(要確認)。ただあまり細かいことを気にしていても大変なので、こういう部分は適当で良いかもしれません。
またIBのマージン口座では、保有株式を貸し出す手続きを行っていなくてもPayment in Lieuに配当が記載されていることがあったのですが、IBのマージン口座の仕様として自動で貸し出されることがあるそうです。

コピー&ペーストで一括入力する方法

取引数が多く無ければ取引明細書に手入力していけば良いですが、取引数が多い場合は証券会社からダウンロードしたCSVファイルを元にコピー&ペーストすることも出来るかと思います。Firstrade証券の場合は少し難しく、IB証券の場合は割と簡単のように思います。
ここでは例として株式および現物オプションの取引明細をコピペで作成する方法を解説します。加えてIB証券の配当明細をコピペで作成する方法も解説します。
また、株式および現物オプションの取引明細について、前年の期末残高データを当年の期首残高へ転記する方法、そしてそれを当年の取引データと組み合わせる方法も後半で紹介します。
また、私の方法では表計算ソフト内で正規表現の置換機能を使用する部分があります。Excelだと標準では正規表現の置換機能が使えないようで、アドインをインストールする等の必要があるようです。LibreOfficeでは標準で使えますので、ここではそれを使っています。

目次

IB証券の取引データ作成方法

IB証券のアクティビティステートメントでは標準で銘柄ごとに時系列で取引がまとめられているため、そこは整形が必要ありません。※もし銘柄ごとにまとめられていない場合は、カスタムステートメントで銘柄ごとに取引をまとめる選択ができます。

年間アクティビティステートメントをCSVでダウンロードします。
開く際の設定では、以下のように区切り文字からセミコロンは除外します。


このCSVファイルをLibreOfficeで開くと、列幅がとても開いており見辛かったので、全選択して列アルファベット(A,B,C...)の部分を右クリック→「列幅」で列幅を調整します。
ここから、必要な行をコピーして新しいファイルに貼り付けます。ここでは例として取引行のみコピーします。諸経費の明細等もコピペする場合はそちらも行うことができます。


次に、合計行が不要なのでフィルターで除去します。Header列に「SubTotal」「Total」とある行を除去します。以下のようにこれらの行をフィルターします。

そして、フィルター結果の行を全て選択し(表を全選択した後、見出し行のみ「Ctrl+クリック」で選択解除)、左の行番号の表記部分を右クリック→「行の削除」を行います。

そしてフィルターを解除します。
※フィルターを解除しようとしてフィルターが再度かかってしまう場合は、そのまま再度フィルターボタンを押してフィルターを解除すれば上手く行くと思います。

また、不要な列も削除しておけば見やすくなります。「約定価格」「終値」「取得費」「実現損益」「評価損益」が不要です。
次に、「日時」列についてですがIB証券の場合「2021-01-04, 09:30:00」というような形式で書かれています。このままだと表計算ソフトに日時として認識してもらえない可能性が高いため、コンマを削除して「2021-01-04 09:30:00」という形式にします。そのためには日時列を選択し、「検索と置換」で「,」を空文字に置き換えます。

もしこれでも日時として認識しないようであれば、新しい列を1つ作ってVALUE関数で日時に変換します。

また、オプションの権利行使や権利割り当てがある場合は、「権利行使/割り当て」列を新たに作り、権利行使・割り当てによる取引行に○を入力します。
権利行使・権利割り当ては、コード列の値で判別します。
「A」が権利割り当て、「Ex」または「AEx」が権利行使のようです。コードが複数ある場合は、「;」で区切られています。
まずコード列に「A」のサインがある行をフィルターします。

このように、リストの候補から該当するものを選ぶのが早いと思います。絞ったら、「権利行使/割り当て」列を「○」で埋めます。
※漢数字の〇ではなく、記号の○を入力してください。この列を直接、取引明細テンプレートへコピペできるようにするため、文字を統一する必要があるためです。
そして次は同じように権利行使のサインである「Ex」または「AEx」がある行でフィルターし、○で埋めます。そしてフィルターを解除します。

これでコピー&ペーストの元となる明細が完成です。

前年からの繰り越し分がある銘柄の場合は、その期首残高行の下から貼り付けます。
これらについてもコピペで行う場合は、後半の項を参照ください。

IB証券の配当データ作成方法

IB証券の配当については別途、「Dividend Report(配当レポート)」が発行されているのでこれを基にコピペの元となるデータを作成します。これをCSVでダウンロードし、開きます。
以下のように「DividendDetail」の範囲の見出し行を選択してからフィルター機能をオンにします。

まず「DividendDetail」列で「DividendDetail」のみに絞ります。
配当金相当額(Payment in Lieu)についても抽出する場合は、「PILDetail」も絞り込み条件に加えてください。
次に「DataDiscriminator」列で「Summary」のみに絞ります。
これで必要な行のみに絞れたと思います。

次に日付についてです。日付は「ReportDate」と「ExDate」の2種類があり、おそらく、早い日付である「ExDate」を採用するのが良いと思います。配当レポートにはExDate基準で年度内となる取引が記載されています。一方で、年間アクティビティステートメントは報告書基準日を基準としているため、齟齬が生じます。

ReportDateまたはExDateは「20210610」のような形式で書かれており、このままでは表計算ソフトに日付形式と認識してもらえないので、「検索と置換」で置き換えます。ここでは正規表現を用います。
この範囲を選択し、「検索と置換」ウィザードを立ち上げ、検索対象は「(\d{4})(\d{2})(\d{2})」とし、置換先は「$1-$2-$3」とします。「正規表現」にチェックを入れます。

検索対象には(4桁の数字)(2桁の数字)(2桁の数字)を指定しており、()で囲まれた部分はそれぞれ$1~$3という名前の変数に入ります。そして置換先に$1~$3をハイフン区切りで並べています。

これでコピペの元となるデータが完成しました。
「Symbol」(銘柄)、「ExDate」(日付)、「Gross」(配当額)、「Withhold」(現地源泉徴収税額)各列の内容を上場株式の配当テンプレートへコピペします。
貼り付ける際は「形式を選択して貼り付け」ウィザードから「値のみ」を選択すると良いと思います。
また、仮に通貨の種類が複数ある場合(Currency列に複数の通貨がある場合)はそれぞれの通貨の為替レートで日本円に変換しなければならないのでご注意ください。

Firstrade証券の取引データ作成方法

Firstradeの場合は結構手間がかかります。
Firstradeでは、Account Historyから期間を指定してCSVファイルがダウンロードできます。

このファイルにはアカウント内の全ての履歴が記載されているため、必要なものを抜き出す必要があります。

不要な行をフィルターで除去

まず、どの明細作成にも不要だと思われるものが、Description列に「MARK TO MARKET」「XFER CASH TO MARGIN」「XFER MARGIN TO CASH」とあるものです。これらの行が何を表しているのかは正確には分かりませんが、「MARK TO MARKET」は時価評価(値洗い)のこと、「XFER...」についてはXFERとはTransferのことのようなのでマージン勘定とキャッシュ勘定間の資金の移行のことだと思われます。これらは私が株式のショートポジションを保有していたことで発生したものかもしれませんが良くは分かりません。
他にも、不要そうな行があればここで除去して良いです。
それには見出し行を選択してからフィルター機能をオンにします。以下のようにDescription列のフィルターにて、これらを除去します。

Symbol列の余計な空白を除去

「Symbol」列の各行について、余計な空白が入っていましたので、これを除去します。Symbol列を選択し、「編集」から「検索と置換」ウィザードを立ち上げます。ここでは正規表現で置換してみます。セル内の文字の最後尾から、空白文字が続く限りを検索して空文字に置換します。以下のように検索欄に「\s+$」と入力します。単純に半角スペースを検索して空文字に置換しても良いですが、それだと文字と文字の間にあるスペースまで除去されてしまいます。

そして、この結果の表全体をコピーして、新しいファイルに貼り付け、そちらで作業を継続します。

Amount、Commission、Fee各列について

AmountはCommissionとFeeが引かれた後の最終的な金額を表しているようです。Commissionは証券会社が自社の取り分として徴収する手数料で、Feeはそれ以外の手数料だと思われます。
取引明細書には、手数料が引かれる前の約定代金を記載しますので、約定代金列を新たに作ります。Amount列の右隣りに新しい列を挿入し、列名は「ContractPrice」などとします。また、手数料列が2つに分かれているのも不便なので一つにまとめます。
ContractPrice列の右隣りに新しく「TotalFee」などの名称の列を作ります。また、CommissionとFeeはプラス表記になっているのでTotalFee列でマイナス表記に変えます。TotalFeeセルの数式は「= -1 * (Commissionセル + Feeセル)」となり、
ContractPrice列の数式は「= Amountセル - TotalFeeセル」になります。
青文字のところはセル参照となり、Commissionセルであれば同じ行のCommission列のセルを参照します。
これらの数式を全行にオートフィルで適用します。オートフィルでは、選択したセルの右下の黒い点を下にドラッグすることで下の行に連続適用できますが、隣接する列が入力されている前提であれば黒い点をダブルクリックすることで即時にオートフィルが可能です。

TradeDate、SettledDate各列について

「TradeDate」は取引日、「SettledDate」は決済日(受け渡し日)です。税制上はどちらかを選択できますが、確定申告で提出するFirstradeのステートメント(月間ステートメント)は受け渡し日基準で作成されていますので、ここでは「SettledDate」を使用するのが良いと思います。
この列について、日付として認識されず文字列として認識されている可能性があります。日付表示のボタンを複数回クリックしてみてSettledDateセルに反応が無ければ日付として認識されていません。または、上部の数式表示欄で先頭に「'」が付いていると文字列として認識されています。以下のような状況です。※以下の画像ではTradeDateを選択していますがSettledDateを選択ください。

日付として認識されていない場合は、SettledDate列の隣に新しい列を挿入します。セルには「=VALUE(SettledDateセル)」と入れ、これを全行に適用します。これで新しい列では日付として認識されるはずです。
新しい列全体を選択し、一行目のセル(列名セル)だけ「Ctrl+クリック」で選択解除し、選択範囲をコピーして、SettledDate列の2行目のセルで右クリック→「形式を指定して貼り付け」→「形式を指定して貼り付け」からウィザードを立ち上げ、「日付と時刻」にチェックを入れて貼り付けます。

また、このデータはTradeDate基準で時系列に並んでいるため、SettledDate基準で時系列に並ぶように並び替える必要があります。それにはフィルターでSettledDate列を「昇順でソート」します。

取引行を抽出

ここから、ここでは例として株式や株式オプションの取引行を抽出していきます。
まずAction列についてBUYかSELLとあるものについては全てこれらの取引行だと思います。
他にも、Action列にOtherとあるものでも取引に該当するものがありました。配当の自動再投資(DRIP)の取引と、オプションの権利割り当ての行です。オプションの権利行使についても、私は行った経験がありませんがこれもOtherとして記載されるのではないかと思います。
他にも、取引に該当するものが無いかチェックしてみてください。
配当の自動再投資の行には、Descriptionに「REIN」という言葉がありました。オプションの権利割り当ての行には、Descriptionに「ASSIGNED」という言葉がありました。これらを基にフィルターで絞り込みます。今回は複数条件で検索します。LibreOfficeの場合は「標準フィルター」を使用します。以下のようになります。

これで取引行だけに絞れました。このフィルター結果もコピーして、別シートに貼り付けてそちらで作業を継続します。

オプションの権利行使・割り当てがある場合

もしオプションの権利行使または権利割り当てがある場合は、ここで「権利行使/割り当て」列を新たに作り、該当取引行に○を入力します。
※漢数字の〇ではなく、記号の○を入力してください。この列を直接、取引明細テンプレートへコピペできるようにするため、文字を統一する必要があるためです。
権利割り当てがある場合は、標準フィルターにて、Description列にASSIGNEDという言葉が含まれている場合で絞ります。そして「権利行使/割り当て」列を○で埋めます。
権利行使がある場合については、私はDescription列にどういう言葉が記載されるのかは分かりませんが、同じようにフィルターして、「権利行使/割り当て」列を○で埋めます。
そしてフィルターを解除します。
※フィルターを解除しようとしてフィルターが再度かかってしまう場合は、そのまま再度フィルターボタンを押してフィルターを解除すれば上手く行くと思います。

株式取引とオプション取引を分ける

次に、株式とオプションの取引両方がある場合はそれらを分ける必要があります。
また、オプションの行では以下のようにSymbol列が空白になっていることに気づきます。替わりにDescription列にオプションの名称が入っています。

ここは補完しなければならないのですが、取り敢えずはSymbol列が空白かどうかで株式とオプションを分けることが出来そうです。フィルターでSymbol列を空白と空白以外で絞り込み、それぞれの結果を別々のシートにコピーします。

株式のシート

まず株式のシートについて整形をしていきます。もし、同じ銘柄のロングポジションとショートポジションの両建てを行ったことが無ければ、それらを別銘柄として分ける必要は無いと思うので簡単です。
フィルター機能を使い、Symbol列を「昇順でソート」するだけで銘柄ごとに取引がまとまります。これで完成です。

次に、ロングとショートの両建て取引がある場合の方法を説明します。この場合はそれぞれを別銘柄として取引明細書に記載する必要があります。
ショートポジションの株式取引についてはDescription行に「SHORT.」という文言があるので判別できます。ショートカバーも「COVER SHORT.」となっています。
今回は、ショートポジションの取引の場合に、銘柄名の後ろに「(short pos.)」と入れるようにしてみます。
新しい列を、Symbol列の隣りに作成します。
列名は「NewSymbol」などとし、セルには

Symbolセル & IF(
      COUNTIF( Descriptionセル, "*SHORT.*" ) = 0,
      "",
      "  (short pos.)"
  )

と入力します。この数式を全ての行にオートフィルで適用します。
COUNTIF関数は、参照したセル範囲(第一引数)が指定した条件(第二引数)に合致した時に、合致したセル数を返します。条件として"*SHORT.*"と指定しており、ワイルドカードを使用しています。つまりこのCOUNTIF関数では、ショートポジションの取引の場合に1を返し、それ以外に0を返します。
そしてこの親のIF関数では、COUNTIF関数 = 0の時に空文字を返し、それ以外の時に「  (short pos.)」の文字を返します。そしてこのIF関数を、Symbolセルと連結しています。

フィルター機能を使い、NewSymbol列を「昇順でソート」します。これで銘柄ごとに取引がまとまり完成です。

オプションのシート

次に、オプションのシートについて整形していきます。
Description列からオプションの名称を抽出し、Symbol列に記入する必要があります。
まずSymbol列にDescription列の内容を丸ごとコピーします。それには、Description列全体を選択し、1行目の列名セルだけ「Ctrl+クリック」で選択解除します。そして選択範囲をコピーしてSymbol列の2行目のセルに貼り付けます。
そのままSymbol列の内容が選択された状態で「検索と置換」ウィザードを立ち上げます。
オプションの名称は「PUT  SLV    10/19/18    14.50」というように記述されていますので、これを検索します。また、文字の間の空白も空きすぎていると思われるので調整します。ここは正規表現を使います。
以下結構難解ですが、検索文字列は
.*(PUT|CALL)\s+(\w+)\s+(\d{2}/\d{2}/\d{2})\s+(\d+(?:\.\d+)?).*とし、置換先文字列は「$1 $2 $3 $4」とします。

検索文字列の正規表現では4つの()括弧が順番に、(PUTまたはCALL)、(銘柄名)、(日付)、(権利行使価格)に対応しています(内部が「?:」で始まる括弧は除く)。注意として、日付は(\d{2}/\d{2}/\d{2})としていますが、日付の書式が仮に将来変わるとこのままでは対応できないので、大雑把に(\S+)でも良いかもしれません。
置換先の「$1 $2 $3 $4」では、4つの()括弧で取得した内容を半角スペース区切りで並べています。もし文字間の余白がもっと欲しいなら「$1  $2  $3  $4」のようにできます。

また、オプションについても全く同一の銘柄でロングとショートの両建てをしたことがある場合はそれぞれに分ける必要がありますが、そうで無い場合はSymbol列を昇順でソートして完成です。

両建てがある場合について解説します。
オプションに関してはDescription列に、「OPEN CONTRACT」と「CLOSING CONTRACT」の記述があります。権利割り当ての場合は「ASSIGNED」の記述があります。そのため、ショートポジションの取引は以下のいずれかのケースです。
・Quantity列がマイナス(売りを表す)で、Description列にOPEN CONTRACTがある
・Quantity列がプラスで、Description列にCLOSING CONTRACTがある
・Description列にASSIGNEDがある

このケースに当てはまる場合に、Symbolセルに「  (short pos.)」という文言を加えることにします。それには株式シートの時と同じように数式を用いても良いですが、今回は条件が少し複雑なので、フィルター機能でショートポジションの取引を絞ってから、Symbol列の内容を書き換える方法を説明します。
見出し行全体を選択してからフィルター機能で「標準フィルター」ウィザードを立ち上げます。以下のように入力します。ただし最後の条件を画像で写せなかったのでそれも追加してください。最後の条件は、演算子「または」フィールド名「Description」条件「...を含む」値「ASSIGNED」です。

演算子(かつ・または)の優先順位が分かり辛いですが、基本的には「かつ」が優先されると思いますので恐らくこれで大丈夫だと思われます。
次に、Symbol列全体を選択し、一行目の列名セルのみ選択を解除してから「検索と置換」ウィザードを立ち上げます。以下のように検索文字列を「.+」とし、置換先を「$0  (short pos.)」とします。

そしてSymbol列を昇順でソートすれば完成です。

データが完成

これで、株式およびオプションについて、取引明細書に転記する元となるデータが完成しました。取引明細書に転記する列は「Symbol(またはNewSymbol)」(銘柄)、「Quantity」(数量)、「SettledDate」(決済日)、「ContractPrice」(約定代金)、「TotalFee」(手数料)、「権利行使/割り当て」(権利行使/割り当て)となります。
前年からの繰り越し分がある銘柄の場合は、その期首残高行の下から貼り付けます。
これらについてもコピペで行う場合は、次からの項を参照ください。

前年の期末残高を当年の期首残高へ転記する(株式および現物オプション)

この記事で紹介した「株式およびオプション(現物取引)の取引明細」について、前年の期末残高を当年の期首残高へ一括転記する方法について解説します。ただし銘柄数が少ない場合は、手入力したほうが早いと思います。
差金決済のデリバティブに関しては転記の必要はありません。

まず前年の取引明細書から、期末残高行を抽出します。
「期末残高行」列に○がある行でフィルターします。
※旧テンプレートファイルを使用し、期末残高行が備え付けられていない場合は、2022/02/14版 取引明細書 解説を参照ください。

フィルター後、「銘柄名(全行)」列および「残高」各列の内容を選択してコピーし、それぞれを当年の取引明細書(未入力のテンプレートファイル)の「銘柄」列と「残高」各列に貼り付けます。

当年の取引明細書に貼り付ける際、既にある数式を全部上書きして消してしまわないように、一行は残しておきます。
貼り付ける際は、以下のように右クリック→「形式を指定して貼り付け」→「形式を指定して貼り付け」でウィザードを立ち上げ、「値のみ」をクリックします。

次に、数式列をオートフィルやコピペで補完しますが、これら期首残高行に必要な数式列は、「補助用」各列と「行色分け用」のみです(「残高」各列を除いた数式列をすべて適用しても構いません)。
これでデータの転記が完了しました。

ここに当年の取引を追加していきます。取引を追加したいところへ行を挿入してデータを入力します。数式はコピペまたはオートフィルで適用します。
また、数式列だけでなく他の列にも「条件付き書式」を設定しているため、これをコピーするには、コピー元となる行(書式適用済みの行)を選択してコピーし、コピー先の行範囲を選択して「形式を指定して貼り付け」から「書式のみ」を指定して貼り付けることで書式を適用させることができます。

また、取引データの追加に関して、次項に解説する方法で当年の取引データを一括で挿入できます。

期首残高データに取引データを挿入する(株式および現物オプション)

期首残高データに、当年の取引データを一括で挿入する方法を解説します。取引データの作成方法はIB証券の取引データ作成方法またはFirstrade証券の取引データ作成方法で解説しています。

まず、以下のように、期首残高データが記入されたエリアの下(必ず下)に、取引データを貼り付けます。この時、同じ銘柄であれば期首残高データの「銘柄」と取引データの「銘柄」の内容が全く同一であることを確認してください(銘柄名が発行者によって変更されている場合もあるので注意してください)。貼り付ける際は、書式も一緒にコピーしないように「形式を選択して貼り付け」ウィザードにて「値のみ」を選択すると良いです。

次に、取引行について、取引明細テンプレートの数式を補完します。
※「補助用」列も含め全ての数式列を補完してください。

そして以下のように期首残高データおよび取引データ全体に加えて上に一行含んだ範囲を選択し、フィルターをオンにします。一行目を列の項目行とします。
(追記:上に一行含む必要は無く、代わりに、一行目を列の項目行とせずにフィルターすれば良いと思います。)

そして「銘柄」列を「昇順でソート」します。

これで期首残高データと取引データが組み合わさりました。
書式も全てに適用させるには、書式適用済みの行を選択してコピーし、コピー先の行範囲を選択して「形式を選択して貼り付け」から「書式のみ」を選択して貼り付けます。

銘柄名を全行に記載せず、銘柄範囲の一行目にのみ記載する方法を取る場合は以下のようにします。
銘柄列の隣に新しい列を作り、そこに以下の数式を入れ、全行に適用します。
= IF( 銘柄セル=一つ上の銘柄セル, "", 銘柄セル )この部分をコピーし、銘柄列の内容に上書きします。以下のように、貼り付ける範囲の一番上のセルで右クリック→「形式を指定して貼り付け」→「テキスト」を選びます。(追記:書式を上書きしないように、「書式設定されていないテキスト」または「値のみ」を選択してください)

そして新しく作った列を削除すれば完成です。完成したデータに不自然な点が無いかはご確認ください。

確定申告書の作成方法の要点

確定申告書の作成には、国税庁の確定申告書等作成コーナーを利用するのが便利です。
基本的にこのコーナーの手順に沿って入力をすれば良いのですが、分かりづらい部分について補足説明したいと思います。
また、海外口座での上場株式の譲渡損失がある場合で、国内口座での上場株式の譲渡益との損益通算後も損失が残る場合、このコーナーで作成した確定申告書を訂正する必要があります。この場合、印刷して訂正することになると思うのでe-Taxが使えません。

目次

配当

申告分離課税か総合課税かを選択します。違いは「上場株式」の項を参照ください。
配当の数が多い場合は、このコーナーでダウンロードできる配当フォームを利用すると便利です。
「銘柄」と「収入金額」以外は以下のようにオートフィルで連続入力できます。

数値の欄を連続入力する場合は、2行以上に同じ数値を入れてからその範囲をまとめて選択してオートフィルを行います。そうしないと数値が1ずつ足されながら連続入力されます。
各列の入力方法については上の画像を参考にできるかと思いますが、ここで説明します。

支払通知書の種類
「上場株式配当等の支払通知書」を選択
外貨建資産割合および非株式割合
「記載なし」でも良いですし、相当するものを選択しても良いと思います。ここでの選択によって、次の項目の「配当等の種類」の選択肢が決まるだけです。
配当等の種類
外国株であれば「配当控除(税額控除)の対象とならない配当等」
種目
「株式の配当」
銘柄等
作成した明細から一括でコピペできます。銘柄列の全行をコピーし、配当フォーム内の貼り付けたい範囲の一行目に貼り付ければ一括でコピペできます。貼り付ける際は「形式を選択して貼り付け」→「書式設定されていないテキスト」を選択すると良いと思います。
支払の取扱者の名称等
証券会社名を入力します。
収入金額
これも作成した明細から一括でコピペできます。おそらく、外国での源泉徴収税額が引かれた後の金額を記載するものだと思われます(国内での課税対象は外国税が引かれた後の金額であるため)。そのため、「差引収入額(円)」列の内容をコピーします。貼り付ける際は「形式を選択して貼り付け」→「数値」を選択すると良いと思います。
源泉徴収税額および配当割額控除額
源泉徴収された所得税および住民税について記載します。国内では源泉徴収されていないので、それぞれ0を入力します。
それ以降の項目
それ以降の項目は未入力で良いです。「通知外国税相当額」も、外国での源泉徴収税を記載する訳では無いので注意してください。

デリバティブ

以下の画像を参考にしてください。この画面で、雑所得(総合課税)となるデリバティブの所得合計を入力します。

「業務に該当しますか」という項目についてですが、業務とは「営利を目的として継続的に行われる取引」のことを言います。「先物・オプション・FX・CFD」の項で触れたように、多くのデリバティブ取引は業務に該当すると思われます。為替レートについてTTS/TTBを用いている場合は、業務として申告します。
「収入金額」と「必要経費」にそれぞれ記入し、「源泉徴収税額」には記入しません。
「所得の生ずる場所又は法人番号」は証券会社の住所で良いと思いますが、文字数制限がきついため適当な文字を省略すれば良いと思います。
「報酬などの支払者の氏名・名称」は証券会社の名称で良いと思います。

外国税額控除

外国税額控除は、外国で源泉徴収された税を一定の要件の下で日本での課税額から控除するものです。外国株の配当で源泉徴収されているものについて申告できます。
以下の画像を参考にしてください。

通貨ごとにまとめて記入すれば良いです。
「相手国での課税標準」に、外国での源泉徴収税が引かれる前の金額を、外貨および円表記で入力します。
「左に係る外国所得税額」に、外国での源泉徴収税を、外貨および円表記で入力します。

次の項目にある「調整国外所得」ですが、ざっくりと言うと、各種繰り越し控除を適用する前、国外所得内での損益通算を適用後の国外所得合計です。
No.1240 居住者に係る外国税額控除の「概要」→「申告・控除の内容」→(注3)を見ると詳細が書かれてあります。

「その年分の調整国外所得金額」とは、純損失または雑損失の繰越控除や上場株式等に係る譲渡損失の繰越控除などの各種繰越控除の適用を受けている場合には、その適用前のその年分の国外所得金額(非永住者については、国外所得金額のうち国内において支払われ、または国外から送金された国外源泉所得に係る部分に限ります。)をいいます。ただし、国外所得金額がその年分の所得総額に相当する金額を超える場合は、その年分の所得総額に相当する金額となります。

また、上で触れられている「国外所得金額」については、同ページの「概要」→「国外所得金額」に詳細があります。

国外所得金額は、次に掲げる国外源泉所得に係る所得の金額の合計額(その合計額が0円を下回る場合には、0円)となります。この国外所得金額につき、純損失または雑損失の繰越控除や上場株式等に係る譲渡損失の繰越控除などの各種繰越控除の規定を適用しないで計算した金額が、その年分の調整国外所得金額として所得税の控除限度額の計算の基礎となります。

なお、租税条約の適用を受ける居住者については、その租税条約において次の国外源泉所得に関して異なる定めがある場合には、その異なる定めによることとされています。

(1)国外事業所等帰属所得

(中略)

(2)その他の国外源泉所得

次の国外源泉所得((1)の国外事業所等帰属所得に該当するものを除きます。)をいいます。その他の国外源泉所得の金額は、その所得のみについて各年分の所得税を課するものとした場合に課税標準となるべきその年分の総所得金額、分離長(短)期譲渡所得の金額(特別控除前の金額)、一般株式等に係る譲渡所得等の金額、上場株式等に係る譲渡所得等の金額、申告分離課税の上場株式等に係る配当所得等の金額、先物取引に係る雑所得等の金額、退職所得金額および山林所得金額の合計額に相当する金額となります。

(以下略)

「(2)その他の国外源泉所得」を参照ください。
株式にかかる譲渡所得等、配当、雑所得など、この記事で触れている所得は全て当てはまります。国外所得のみで損益通算を行えるものについては行った後の金額になります。損益通算が不可能な損失分は0円として扱います。
例えば雑所得が1万円の損失で、株式の譲渡益が1万円であれば、これらは損益通算が出来ないので、これらの合計所得は1万円になります。
これで算出した国外所得を調整国外所得として入力すれば良いと思います(ただしこの金額は、「その年分の所得総額」が上限になります)。

確定申告書の訂正

海外口座での上場株式の譲渡損失がある場合で、国内口座での上場株式の譲渡益との損益通算後(配当との損益通算前)にも損失が残る場合、確定申告書等作成コーナーで作成した確定申告書を訂正する必要があります。
海外口座での上場株式の譲渡損失は繰り越し控除ができないのと、配当との損益通算ができませんが、確定申告書等作成コーナーではそれらが出来る前提で作成されていますので、その部分を訂正する必要があります。確定申告書を印刷後、訂正する部分について二重線を引き、訂正印を押印して訂正します。

まず初めに訂正する箇所は、付表(上場株式等に係る譲渡損失の損益通算及び繰越控除用)の1面です。

付表(上場株式等に係る譲渡損失の損益通算及び繰越控除用)の1面

赤線でマークしている部分です。
この5番には、配当所得(分離課税)との損益通算後の、上場株式にかかる譲渡損失の金額を記入します。正確な計算方法は以下です。
まず「(3番 - 海外口座での譲渡損失) - 4番」を算出し、これが0未満であれば0とし、この金額に海外口座での譲渡損失を足します。※海外口座での譲渡損失はプラス表記
また、この5番の欄の横に注釈として「繰越控除対象の譲渡損失の金額」も書いておくと良いかもしれません。これは5番の金額から海外口座での譲渡損失の金額を引いた金額です。
翌年の確定申告書における「前年から繰り越された上場株式等に係る譲渡損失の金額」(付表2面のC)には、5番の金額では無くこの注釈の金額を転記することになります。

次に6番ですが、ここには上記の損益通算後に残った配当所得(分離課税)の金額を記入します。正確な計算方法は以下です。
「4番 - (3番 - 海外口座での譲渡損失)」を算出し、これが0未満であれば0とします。

これらの欄を訂正したら、そこに書かれてある指示に従い、申告書第三表へ転記(そちらも訂正)します。

付表の2面

1面の6番(損益通算後の分離課税配当所得)の金額を訂正した場合、この2面のE、G、Iの金額が変更になる可能性があります。これらは、前年以前からの繰越損失があった場合に、その繰越損失を「損益通算後の分離課税配当所得」の金額から差し引く金額です。古い年の繰越損失から順番に差し引いていきます。この差し引く上限が1面の6番の金額になります。
E、G、Iが変更になったら、それに伴い7、8、10、12番が変更になります。これらについては欄に書かれてある計算式の通りに計算してください。

11番(翌年以後に繰り越される上場株式等に係る譲渡損失の金額)ですが、ここの計算式は正確には「(5番 - 海外口座での譲渡損失) + 7番 + 8番」になります。この計算式中の(5番 - 海外口座での譲渡損失)は、5番の欄の横に注釈として書いた金額になります。

訂正し終えたら、10、11、12番の欄については指示に従い、申告書第三表へ転記(そちらも訂正)します。

申告書第三表に移ります。ここからは、この表の79番が訂正された場合に変更が必要です。

申告書第三表「分離課税用」

ここの79番の金額が訂正された場合、87番の金額も変更になります。87番は、79番の金額に対し、上場株式にかかる申告分離課税の税率(20%)をかけた金額になります。
それに伴い91番も変更になります。
91番の金額を指示に従って申告書B第一表31番へ転記(そちらも訂正)します。

申告書B第一表

ここでは31番の変更に伴い、41、43、44、45、49、51、52の金額を変更します。

最後に確認を

これで訂正が完了だと思いますが、これで問題が無いかどうかは各自確認頂ければと思います。

外貨の為替損益の計算方法

証券会社に預け入れた外貨について、その外貨の支出を伴う取引(資産の購入・他通貨への転換・決済損・手数料払いなど)を行った時、その時点で為替損益が出たものと認識します。参考:所得税法 第五十七条の三(外貨建取引の換算)
この計算は複雑なので、一般的にはなるべく外貨の現金を持っておかず、債券ETFや債券などに変えて持っておくほうが良いと言えるかもしれません。株式や債券などの資産に生じる為替損益については、その資産の損益に含まれますので、為替損益として別途申告はしません。MMFがあれば楽なのですが、海外証券会社ではMMFは見かけません。
ただいくら頑張っても完璧に外貨保有をゼロにすることは出来ないので、完璧に申告しようとすれば為替損益の計算は必要になります。
私の意見としては、為替損益が大金にならなそうであればこの申告はしなくて良いと思います。ほとんどのケースではこの申告は現実的に不可能だからです。
ただ一応、証券会社から口座内の全ての現金の動きを記載したレポートが発行されている場合であれば申告は可能だと思われるので、その場合の申告方法(計算書の作成方法)について記載します。
ただし外貨の為替損益の計算方法は複雑なので、ここで紹介する計算方法の正確性については保証できません。この記事の内容を鵜呑みにせずご自身でも出来るだけ確認いただければと思います。

この為替損益は雑所得(総合課税)となります。複数通貨を扱っている場合はそれぞれについて計算する必要があります。
計算方法は、株式と同じく「総平均法に準ずる方法」を使用することになるようです。→国税不服審判所 (平成28年6月2日裁決)
計算対象の外貨について、その外貨の収入を伴う取引(資産の売却・円を含めた他通貨からの転換・決済益・配当など)が行われた時、その日の対円為替レート(原則TTM)をその外貨の取得レートとします。
外貨収入がある都度、その日の為替レートでの円換算額を足していき、円換算の残高を算出します。そして「円換算残高÷外貨残高」がその時点での平均取得レートとなります。
そして、その外貨の支出を伴う取引(資産の購入・他通貨への転換・決済損・手数料払いなど)を行った際に、「外貨支出額×(その日の対円為替レート(原則TTM)-平均取得レート)」を為替損益として認識することになります。
この取引後の円換算残高は、「外貨残高×平均取得レート」となります。そして新たな平均取得レートを「円換算残高÷外貨残高」で算出します。
参考サイトとして、外貨預金についての為替損益の計算方法を記したサイトですが挙げておきます。
外貨預金 損益状況(簡易集計) (ソニー銀行)

現物FX取引(通常のFXではなく現金を実際に為替取引するFX)を行っている場合も、ここで使用する、証券会社のキャッシュフローレポートに記載されていることを確認してください。ただし現物FXの手数料(スプレッド以外)が課されている場合、その手数料の損失分を申告するにはここでの為替損益計算ではできませんので、別に行う必要があると思います。用いる為替レートについては原則TTMですが、「営利を目的とした継続的な取引」(単なる両替では無く、FXでの利益を狙ったFX取引であれば、ほとんどこれに当てはまると思いますが)であればTTS、TTBを使用することが出来ると思われます(ただし一応税務署に確認してください)。

ちなみに、国内口座の特定口座内で行う外貨取引の場合は少し計算方法が異なるかもしれず(確かではありませんが)、特定口座内では同日中に同一銘柄の売りと買いが行われた時、常に買いが売りよりも先に行われているとみなすようです。ここでは海外口座についての申告方法になります。

エクセルやLibre Officeなどの表計算ソフトを使用します。私はLibre Officeを使用しており、それを利用した例も挙げますが関数の式などはほとんどエクセルと共通だと思います。
私は海外証券会社としてIB証券を使っていますが、IBでは資金収支報告書をCSVでダウンロードできます。また、Firstrade証券についてはAccount Historyを基にすることが出来るかと思いますが、こちらの場合は余計な項目も含まれているため整理する必要があるかと思いますので少し面倒です。ダウンロードしたファイルは表計算ソフトにシートとして挿入、または内容をコピー&ペーストします。
また、同期間に対応する為替レート表も用意します(休日行は削除)。為替レート表の用意の方法については「取引明細書の作成方法」内で説明しています。

IB証券のファイルでは、「基準通貨サマリ」の行がありますがこちらは他通貨の取引も基準通貨に直して表記しているもので、不要ですので削除します。JPYの行も削除し、USDなど目的の外貨の行のみにします。
このファイルには二種類の日付、報告書基準日と活動日が記載されています。恐らくは活動日が取引日であり、報告書基準日は金額が最終的に決定した日付であるようです。アクティビティステートメントに記載の日付は活動日と一致するようですので、活動日を採用したほうが良いかと思います。
ただし活動日は時系列に並んでいません。時系列に並べ替えるために、フィルターで活動日を昇順にします。それに伴い、「残高」列の値も狂うので、この「残高」列は使用しません。IBのデータにおける借方は支出、貸金は収入です。
活動日が前年の日付になっていることがありますが、これで良いと思います。私が確認した限りでは、当該取引は当年のアクティビティステートメントに前年の日付で記載されていましたのでアクティビティステートメントと整合性を取るなら活動日で良いかと思っています。ただし為替レートは前年分を少し入れる必要があります。
また、日付のセルが日付形式として認識されなかったので、その場合は、追加の列を挿入し、そこに「=VALUE(対象セル)」という数式を入れて日付形式の値を表示させます。
借方・貸金列について、空白セルに見える部分でも半角スペースが入力されていましたので、「検索と置換」などで空白に置き換えます。

FirstradeのAccount Historyについては、これもダウンロードできますがフィルターなどで不要な行を削除する必要があるかと思います。私の場合、「MARK TO MARKET」「XFER CASH TO MARGIN」「XFER MARGIN TO CASH」などのアクティビティが不要そうに思えました。

厄介な点は、仮に海外口座をマージン口座(現金を借りて取引できる口座)にしている場合、借入が発生して口座内の現金残高がマイナスになることがある点です。その場合、恐らくは、借入部分を除いて計算する必要があるのではないかと思います。
何らかの支出で残高がマイナスになる時、そのマイナス分については、元々保有していた外貨を支出したのではなく、借り入れた外貨で支出を行った部分になります。借入金も現金収入ではありますが、即座に支払いに充てられるため為替損益は0になると思います。
逆に何らかの収入によって残高のマイナス(負債)を解消する時、その収入は即座に負債の支払いに充てられていることになるので、負債の解消に充てられた分の収入については為替損益は0になると思います。ただし、その収入が入金によるものの場合は、その収入にかかる取得レートは以前のものとなるため、為替損益が発生します。このケースには別に対処するとして、基本的には以下のことが言えると思います。
残高がマイナスとなる外貨支出がある時は、残高が0になるまでの支出を支出額として認識し、逆に残高がマイナスの状態からプラスの状態になる外貨収入がある時も、残高がプラスになってからの収入を収入額として認識するべきかもしれません。また、残高がマイナス圏に留まる範囲での現金の動きは無視するべきかもしれません。
そのために、支出と収入については外貨残高がマイナスにある範囲のものを除くように調整し、計算に用いる円換算残高については外貨残高がマイナスの時は0になるように調整する必要があります。

2022-04-10追記―――
株式やオプションのショート取引がある場合、それらの取引に伴う為替損益は今回の計算から取り除く必要があると思います。これらの為替損益は株式やオプションの取引損益のほうに含まれています。しかしキャッシュフローレポートにもショート取引による外貨収入および買戻し時における外貨支出も記載されているはずなので、このままでは為替損益が二重計上されてしまうと思われます。
この場合、為替損益計算書から、ショート取引の買戻しの行における為替損益額を削除することで対処できるかと思います。取引行自体は削除しません。
―――

私の作成した計算書のテンプレートも用意しました。

ダウンロード - e782bae69bbfe6908de79b8ae8a888e7ae97e99b9be5bda22.ods
ダウンロード - e782bae69bbfe6908de79b8ae8a888e7ae97e99b9be5bda22.xlsx

odsファイルはLibreOffice用、xlsxファイルはExcel用です。
基本的に、オレンジ色のセルには数式を適用し、白色のセルには手動入力します。
為替レート表は必要な期間のものに変えて下さい。
為替レート表を参照するvlookup関数の内部も必要であれば変えて下さい(後述)。

以下はテンプレートの画像です。参考としてデータを記入してあります。
1600

このテンプレートに、証券会社からの「収入」「支出」のデータを貼り付けるのが早いと思います。複数の外貨がある場合はシートを分けるなどして別個に計算書を作ります。
この計算書の作成方法について一から解説します。テンプレートを利用する場合も、この解説を読んでください。
数式の結果として不自然な値が算出されていないことを確認してください。
外貨の支出はマイナス、収入はプラスで記載されているとします。
上記画像のように初めの行は年初における残高(期首残高)とし、「残高」「残高(円)」「平均取得レート」について手動で入力します。年初に残高が無かった場合、空白または0にします。この下の行から各列へ数式を記入します。
それぞれの列について解説します。
また、マージン口座を使わない場合は複雑な数式は必要ないため、非マージン口座用の計算書の作り方および数式も併記します。ただしテンプレートはマージン口座対応の計算書になっており、非マージン口座でもマージン口座対応の計算書を用いることが出来ます。

通貨
一つのシート内で複数の通貨の計算書を入れる場合はこの列があれば良いと思います。
取引日
証券会社からのデータを貼り付けますが、前述したように日付形式として認識しない場合はVALUE関数で日付形式に直します。
取引内容
証券会社からのデータを貼り付けます。
支出
外貨支出です。証券会社からのデータを貼り付けます。数値がマイナスである必要があります。同じ行の支出セルと収入セルには同時に値は入りません。
また、支出・収入が同じ列に記載されており符号で判断するようになっている書式の場合は、支出・収入列の代わりに収支列をつくります。
その場合、以後の数式内の支出セルをIF(収支セル < 0, 収支セル, 0)に置き換え、
収入セルをIF(収支セル >= 0, 収支セル, 0)に置き換えれば良いと思います。
または、支出列・収入列を別途作っても良いです。
収入
外貨収入です。数値はプラスとなります。その他注意点は上と同じです。
残高
支出または収入の取引後の外貨残高を表します。証券会社からのデータがあればそれを用いることもできますが、数式としては以下になります。
= 一つ上のセル + 支出セル + 収入セル収支列を用いている場合は以下になります。
= 一つ上のセル + 収支セル
支出(調整後)
残高がマイナス圏にある範囲の支出を除いた支出です。残高がマイナスの時のみ、支出セルの値と異なっていることを確認してください。分かりやすいように数式の一階層目を整形しています。
= IF(
残高セル < 0,
IF(残高セル <= 支出セル, 0, 支出セル - 残高セル),
支出セル
)
非マージン口座用・・・この列は作らず、以後、数式内の「支出(調整後)セル」を「支出セル」に置き換えてください。
収入(調整後)
残高がマイナス圏にある範囲の収入を除いた収入です。残高がマイナスの時またはマイナスから回復する時のみ、収入セルの値と異なっていることを確認してください。
= IF(
残高セル < 0,
0,
IF(収入セル > 残高セル, 残高セル, 収入セル)
)
非マージン口座用・・・この列は作らず、以後、数式内の「収入(調整後)セル」を「収入セル」に置き換えてください。
為替レート
取引日の為替レートをvlookup関数で拾い上げます。vlookup関数の説明については、「株式およびオプション(現物取引)の取引明細」内を参照ください。
= VLOOKUP(取引日セル, 為替レート表の範囲, 為替レート表内でのTTMを示す列番号)ただし現物FX取引がある場合で、それについてTTS,TTBを使用する場合は、「取引内容」セルにFX取引を示す文言があることを条件に、「支出」セルがマイナスであればTTS、そうでなければTTBを使うというようにすれば良いと思います。数式では例えば以下のようになります。
= VLOOKUP(
取引日セル,
為替レート表の範囲, 
IF(
COUNTIF(TRIM(取引内容セル), "為替取引からの*") = 0,
TTMの列番号,
IF(支出セル < 0, TTSの列番号, TTBの列番号)
)
)
下線部にFX取引を示す文言を入れます。「*」と「?」のワイルドカードが使用できます。*は0文字以上の任意の文字列、?は任意の1文字を表します。ただしLibreOfficeの場合はツール→オプション→LibreOffice Calc→計算式から、「数式にワイルドカードを使用する」にチェックが入っていることを確認してください。Excelの場合は標準で大丈夫だと思います。私の場合ではテンプレート画像にもあるように「為替取引からの取引通貨レッグ」「為替取引からの手数料」がFX取引に該当しますので、下線部の文言は上記のようになります。
入金分の取得レート
自分で口座に外貨入金したことによる収入の場合、その分を取得した際の為替レートを手動で入力します。それ以外では空白にします。
入金された時点が外貨の取得日(取引日)とはならないため、当日の為替レートが適用できないためです。
収入(調整後)(円)
収入(調整後)を円に直します。「入金分の取得レート」に記載がある場合はそれを用い、それ以外は「為替レート」を用います。
= IF(TRIM(入金分の取得レートセル) = "", 為替レートセル, 入金分の取得レートセル) * 収入(調整後)セル
非マージン口座用・・・列名称を「収入(円)」に
残高(円)
収入(調整後)(円)を合計した残高です。取引後の残高となります。
支出の場合は「外貨残高×取引前の平均取得レート」となり、収入の場合は「取引前の残高(円)+収入(調整後)(円)」となります。
また、外貨残高がマイナスの時は0を表すようにします。
= IF(
残高セル < 0,
0,
IF(支出(調整後)セル < 0, 残高セル * 平均取得レート列内の一つ上のセル, 一つ上のセル + 収入(調整後)(円)セル)
)
非マージン口座用・・・= IF(支出セル < 0, 残高セル * 平均取得レート列内の一つ上のセル, 一つ上のセル + 収入(円)セル)
平均取得レート
取引後の平均取得レートを表します。
= 残高(円)セル / 残高セル
入金による負債解消額
自分で口座に外貨入金し、口座のマイナスを解消した際に、そのマイナス解消額を表します。
= IF(TRIM(入金分の取得レートセル)= "", 0, 収入セル - 収入(調整後)セル)
非マージン口座用・・・この列は作りません。
負債解消に伴う為替損益(円)
= 入金による負債解消額セル * (為替レートセル - 入金分の取得レートセル)
非マージン口座用・・・この列は作りません。
合計損益(円)
= 支出(調整後)セル * (平均取得レート列の一つ上のセル - 為替レートセル) + 負債解消に伴う為替損益(円)
非マージン口座用・・・= 支出セル * (平均取得レート列の一つ上のセル - 為替レートセル)列名称を「為替損益(円)」に

外貨を自分で入出金したものについては外貨取引にあたらないため、以下のことを行います。
入金の場合は前述のように、「入金分の取得レート」セルに送金元で取得した際の為替レートを入力します。
出金の場合はその行の「合計損益(円)」セルの値を削除します。そして一行上の「平均取得レート」列の値が、当該出金分の平均取得レートとなりますので、その値を記録しておきます。

(追記)ショート取引の買戻し決済の行における「合計損益(円)」については、その数値を削除します。

「合計損益(円)」をSUM関数で合計したものを雑所得(総合課税)として申告します。年度内最後の取引の行の「残高」「残高(円)」「平均取得レート」の値は翌年の期首残高に記入することになります。

QooQ