1. この記事について
四季報写経は捗っていますか?
筆者は四季報写経を通して、日本の全上場企業を頭に入れることを目標に日々邁進しています。
ただ、何せ量が膨大なので、馬鹿正直に1ページ目から順に写経していると、先が長すぎて心が折れそうになります。
そこで、これをランダムに好きなところから打ち込んでゴールを目指した方が、残りのページの厚みを気にせず、楽しく写経できるんじゃないかという考えになりました。
しかし、ランダムに打ち込んでいると4000近い企業を写経するので、どの企業を打ち込んだかわからなくなるかもしれない、という問題が出てきます。
なんとかランダムに写経して、かつ重複を防ぐ方法はないか。(重複しても復習になるのでそれはそれでいいが。。)
そこで、考えた結果以下のようなことを思いつきました。
「証券コードは一意の値(重複がない値)なのでこれを使い、既に写経している場合はそれを教えてくれるプログラムを作ればいい!」
ということで、実際にVBAでプログラムを組んでみました。
※マクロを使わないでも「条件付き書式」の設定で同じことが実現できたので、難しいことをしたくないという方は「5.その他の方法1」を参照してください。
2. 対象者
VBAで実装しているので、「Excelで四季報写経している方」が対象になります。
証券コードの列を変えるだけで、他はそののまま使えるのでぜひ参考にしてみてください。
※Mac版のExcelでしか検証していないので、もしWindows版のExcelで不具合があればコメントで教えていただけると嬉しいです。
また、Excelのバージョンによっても搭載関数が違ったりする可能性があるので、試す前に必ずバックアップを取ることを推奨します。
3. ソースコードと解説
ソースコードはこちらになります。
変更するのは赤マーカーの部分で、自身の写経シートの一意な値の列 (証券コードの列)を指定するだけです。
筆者の場合は、証券コードの列が3列目(C列)だったので、「3」と定義しています。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' 変数宣言
Dim userDefinedColumn As Integer ' 一意にしたい行を格納する変数
Dim activeColumn As Integer ' 現在アクティブな列を格納する変数
Dim duplicateCount As Integer ' 重複数をカウントを格納する変数
' 値の代入
userDefinedColumn = 3 ' 一意にしたい列を格納
activeColumn = ActiveCell.Column ' アクティブな列を格納
' 現在入力している列が一意にしたい列の場合、処理を実行
If activeColumn = userDefinedColumn Then
' 重複数を抽出
duplicateCount = WorksheetFunction.CountIf(Columns(userDefinedColumn), Target.Value)
' 重複数が2つ以上の場合は、メッセージ出力
If duplicateCount >= 2 Then
MsgBox " すでに 写経済みです!"
End If
End If
End Sub
やっていることはごくシンプルで、以下の2ステップです。
1. 現在入力している列が、指定した「証券コード」の列であるかを判定
2. 1がYesの場合は、「証券コード」の重複数を確認して、2つ以上であれば、写経済みである旨のメッセージを表示する
4. 導入方法
4.1. Visual Basic起動
まず四季報写経しているファイルを開き、シート名を右クリックして「コードの表示」を選択します。
すると、以下のようなVisual Basicの画面が立ち上がります。
※写経しているシートが選択されているか必ず確認してください。
4.2. コピーしたコードを貼り付けて一部修正
本ブログからからコピーしたコードを貼り付けます。
以下の矢印の部分を、自分の写経シートの一意キー(証券コード)の列番号に置き換えてください。
4.3. マクロとして保存
修正ができたら、保存してください。
その際、以下のようにマクロなしで保存するかを聞かれるので、「いいえ」を選択してください。
マクロ有効ブック(.xlsm)として保存してください。
4.4. マクロを有効化
マクロを有効にするため、一度閉じて再度開いてください。
その際、以下のようにマクロを有効にするか聞かれるので、「マクロを有効にする」を選択してください。
ここまでで設定は完了です!
4.5 動作確認
最後にちゃんと動作しているか確認します。
下記の例の場合、3列目(C列)に証券コードを記載しているので、重複する証券コードを入力してみます。
そうすると「すでに写経済みです!」のメッセージが出力されていることを確認できます。
5. その他の方法1
上記のマクロを使わずともExcelの標準機能の「条件付き書式」で同じことができます。
もし重複した証券コードを入力した場合は、「条件付き書式」の設定で背景色をつけて教えてくれる方法を紹介します。
5.1 条件付き書式の設定
重複指摘したい行を全選択します。ここでは証券コードを記載するC列を全選択しています。
ホームタブを開き、右上の条件付き書式から以下のように設定します。
条件付き書式 > セルの強調表示ルール > 重複する値
設定したい内容が間違いないか確認し、「OK」を押下します。
これで設定完了です!
5.2 確認
実際にC列に重複する値を入力し、設定した背景色がついていることを確認できました。
5.3 ルールの管理
もしうまくいかない場合、またはルールを削除したい場合は、条件付き書式の「ルールの管理」から変更できます。
背景色がうまく適用されない場合は、「適用先」などを見直してみてください。
ここではC列を対象としていたので、「$C:$C」と入力されています。
6. その他の方法2
上記の手順が面倒だし、ハードルが高いという方に向けて別の方法もご紹介します。
以下は日本取引所グループが公開している東証上場銘柄一覧のデータになります。
こちらをダウンロードして穴埋め形式で写経していけば重複なく写経していくことができます。
時間がなかなか取れないので、効率よく写経したいという方は是非参考にしてみてください!
※名証、札証、福証はないので、自分で入力する必要があります。
7. おわりに
四季報写経の旅は長いので、工夫しながら楽しく継続することが大事だと思うので、今回のような記事を紹介しました。
他にもこんな方法がある!などありましたら是非コメントしていただけると嬉しいです。
ちなみに筆者は山川隆義さんの「瞬考」という本で、四季報写経に巡り会いました。
瞬時に仮説が湧くためには大量のインプットが必要であること、そしてその手段として四季報写経が最適であることがわかりやすく書かれています。
興味のある方は読んでみてください!
最後まで見ていただき、ありがとうございました!
コメント