ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Bashで楽天証券からダウンロードした保有商品一覧ファイル(CSV)を加工してエクセルファイル(xlsx)にする

(2024-05-08 初稿 )

新NISAが始まって、株を始めた方も多いのではと思う。

筆者も、最近、株をボチボチやっているのだが、最近、株価や為替相場が乱高下して日々の株価が気になっている。

そこで、少しでも楽ができるようにBashを用いて、楽天証券からダウンロードした保有商品一覧ファイル(CSV)から筆者が必要と思うデータを抽出し、エクセルファイル(xlsx)に変換するスクリプトを作ったので記事にする。

なお、CSVファイルの修正、加工方法及びCSVファイルからエクセルファイルへの変換方法については、以下の記事を参照願う。

楽天証券から保有商品一覧ファイル(CSV)のダウンロード

楽天証券のログイン後画面

赤丸の「保有商品一覧」をクリック。

保有商品一覧ファイル(CSV)のダウンロード

赤丸の「CSVで保存」をクリックすると、例えば「assetbalance(all)_20240508_075058.csv」等というファイル名のCSVファイルがダウンロードできる。

ダウンロードしたCSVファイルから必要なデータを抽出、加工

ダウンロードしたCSVファイルのファイル名の変更、必要なデータの抽出、口座名の変更などを行い、自分の使いやすいエクセルファイルに加工する。

ファイル名の加工

上述のとおりダウンロードしたファイル名は「assetbalance(all)_20240508_075058.csv」のようになるので、ファイル名は「rs-20240508_075058.csv」とする。筆者の好みで決めた名前なので、好きに変更願う。

なお、最終的なエクセルファイルは、このページのスクリプトだと「20240508_075058.xlsx」になる。

filename="assetbalance(all)_20240508_075058.csv"
csvfilename=rs-${filename#*_}

bashの文字列置換は便利だね。

必要なデータ

必要なデータは人により異なると思うが、一例として筆者は以下のとおりとした。

"銘柄","口座","保有数量","[単位]","平均取得価格","[単位]","現在値","[単位]","時価評価額[円]","評価損益[円]","評価損益[%]"

各自お好きなように変更を。

口座名の簡略化

新しいNISAが始まって、名称も古い「つみたてNISA」、新しい「NISAつみたて投資枠」、「NISA成長投資枠」とやや長い名前が多かったので、短い名前に変更している。

具体的には、「つみたてNISA ⇒ 積立」、「NISAつみたて投資枠 ⇒ 新積立」、「NISA成長投資枠 ⇒ 成長」としているが、この辺もお好みで変更して欲しい。

なお、「特定」はそのまま「特定」で使っている。

  IFS='"' read -a vary <<< "$1"
  #echo "${vary[@]}"
  case ${vary[7]} in
    "つみたてNISA")
        class="積立";;
    "NISAつみたて投資枠")
        class="新積立";;
    "NISA成長投資枠")
        class="成長";;
    *)
        class=${vary[7]}
  esac

CSVファイルをエクセルファイル(xlsx)に

上記リンクにも記述したが、以下のとおりLibreOfficeを用いてCSVファイルからエクセルファイル(xlsx)を作成する。

# 44 カンマ区切り 34 ダブルクォート
# 文字コード 76: UTF-8 60: Windows-932 64: Shift-JIS 72:ISO-2022-JP 
$ /usr/bin/libreoffice --headless --convert-to xlsx --infilter=xlsx:44,34,76 "$csvfilename"

スクリプトの全体と使い方

上記の処理を含んだスクリプト全体としては、以下のとおりである。

なお、スクリプトの名前は「r-stocks」としたが、お好きなように。

#!/usr/bin/env bash
# rakuten stocks list
# 楽天証券からDownloadしたcsvファイルを加工、表示
# 2024-04-24 ver0.01 start
# 2024-04-29 ver0.03 csv filename and add xlsx file

Usage="r-stocks rakuten downloaded stocks list csv file modify and display program
  [Usage] r-stocks target-csv
"
CTitle='"銘柄","口座","保有数量","[単位]","平均取得価格","[単位]","現在値","[単位]","時価評価額[円]","評価損益[円]","評価損益[%]"'

put_value() {
  IFS='"' read -a vary <<< "$1"
  #echo "${vary[@]}"

  case ${vary[7]} in
    "つみたてNISA")
        class="積立";;
    "NISAつみたて投資枠")
        class="新積立";;
    "NISA成長投資枠")
        class="成長";;
    *)
        class=${vary[7]}
  esac

  echo \""${vary[5]}"\",\""$class"\",\""${vary[9]}"\",\""${vary[11]}"\",\
    \""${vary[13]}"\",\""${vary[15]}"\",\""${vary[17]}"\",\""${vary[19]}"\",\
    \""${vary[29]}"\",\""${vary[33]}"\",\""${vary[35]}"\"
}

if  $# != 1 ; then
  echo "$Usage"
  exit
fi

csvfilename=rs-${1#*_}
#echo $csvfilename

# (必要があれば)文字コードUTF-8に変換
conv_file=$(/usr/bin/iconv -f SHIFT_JIS -t UTF-8 "$1")

prn_flag=0

echo $CTitle > "$csvfilename"

while read line; do
   $line =~ "種別"  && prn_flag=1
   $prn_flag == 1 && ($line =~ ^\"米国株式\"  || $line =~ ^\"投資信託\")  && put_value "$line" >> "$csvfilename"
done <<< "${conv_file}" 

# options from https://qiita.com/shota243/items/0ef67d786785bcf5b60f
# 44 カンマ区切り 34 ダブルクォート
# 文字コード 76: UTF-8 60: Windows-932 64: Shift-JIS 72:ISO-2022-JP 
# https://qiita.com/j0306043/items/fcc9546056eeca5b025a
# Warning: failed to launch javaldx - java may not function correctly
# apt install default-jre libreoffice-java-common
/usr/bin/libreoffice --headless --convert-to xlsx --infilter=xlsx:44,34,76 "$csvfilename"

上記のスクリプトに実行権を与えて、実行する場合は以下のとおり。

$ chmod +x r-stocks  # 初回のみ
$ r-stocks ~/Downloads/assetbalance(all)_20240508_075058.csv

実行結果は、カレントディレクトリに「20240508_075058.xlsx」が作成されるので、このファイルを開くと以下のとおり。

ほとんど、筆者の趣味のスクリプトだが、どなたかの参考になれば幸い。

関連ページ