Numbersで株価情報一覧を自動取得する

2022-09-23

概要

目的

Numbersのデフォルトの機能を使って株価を自動取得するマクロを作成します。

その他の方法としてPythonでyahoo-finance-api2を使用することで株価を取得できます。方法については「yahoo-finance-api2を用いたPythonによる株価の自動取得」を参照してください。

方法

準備

以下のサイトから東証上場銘柄一覧を取得してください。
その他統計資料 | 日本取引所グループ

手順

NumbersにはExcelのようにマクロはありません。そのためApplescriptを使用します。

Numbersの起動

Numbersを起動して、新規作成を選択します。その後、先程ダウンロードした東証コードが書かれたファイルから、A列にすべての東証コードを貼り付けます。

AppleScriptの作成

Script Editorを起動して、以下のスクリプトを記載します。

property FIRST_ROW : 2
property LAST_ROW : 4089
property STOCK_PRICE : 0
property STOCK_NAME : 1
property STOCK_CHANGE : 2
property STOCK_PERCENT_CHANGE : 3
property STOCK_OPEN : 4
property STOCK_HIGH : 5
property STOCK_LOW : 6
property STOCK_MARKET_CAP : 7
property STOCK_VOLUME : 8
property STOCK_YIELD : 9
property STOCK_ONE_YEAR_TARGET : 10
property STOCK_FIFTY_TWO_WEEK_HIGH : 11
property STOCK_FIFTY_TWO_WEEK_LOW : 12
property STOCK_AVE_THREE_MONTH_VOLUME : 15
property STOCK_BETA : 16
property STOCK_CURRENCY : 19
property STOCK_ANNUAL_DIVIDEND : 20
property STOCK_EPS : 21
property STOCK_EXCHANGE : 22
property STOCK_PE_RATIO : 23
property STOCK_PREVIOUS_CLOSE : 24
property STOCK_SYMBOL : 25

set homePath to "Existing Numbers Folder Path"
set formulaList to {STOCK_PRICE, STOCK_NAME, STOCK_CHANGE, STOCK_PERCENT_CHANGE, ¬
    STOCK_OPEN, STOCK_HIGH, STOCK_LOW, STOCK_MARKET_CAP, STOCK_VOLUME, STOCK_YIELD, ¬
    STOCK_ONE_YEAR_TARGET, STOCK_FIFTY_TWO_WEEK_HIGH, STOCK_FIFTY_TWO_WEEK_LOW, ¬
    STOCK_AVE_THREE_MONTH_VOLUME, STOCK_BETA, STOCK_CURRENCY, STOCK_ANNUAL_DIVIDEND, ¬
    STOCK_EPS, STOCK_EXCHANGE, STOCK_PE_RATIO, STOCK_PREVIOUS_CLOSE, STOCK_SYMBOL}

--Open Number
tell application "Finder"
    activate
    open document file (homePath & "NumbersFileName" as POSIX file)
    delay 2
end tell

tell application "Numbers"
    set cnt to 1
    repeat with i in formulaList
        repeat with j from FIRST_ROW to LAST_ROW
            tell table 1 of sheet 1 of document 1
                set colChar to ASCII character (65 + cnt)
                set value of cell (colChar & j) to "=STOCK($A" & j & " & \".T\"," & i & ")"

                repeat while value of cell (colChar & j) = " … "
                end repeat

                --Delete function
                set value of cell (colChar & j) to value of cell (colChar & j)
            end tell
        end repeat
        set cnt to cnt + 1
    end repeat
end tell

--Sleep PC
tell application "System Events"
    sleep
end tell
  • 処理に時間がかかるので終了後はPCをスリープするようにしています
  • Yahoo!側でアクセスを制限しているためか、途中から処理速度が低下します。
  • Numbersに大量に関数を書くと処理速度が落ちるため、関数を削除して値のみ取り出しています。
  • LAST_ROWは行数に合わせて変更してください。

まとめ

Numbersで東証上場企業の株価を取得する方法を記載しました。現在は処理時間が長くて使い物になりませんが、いずれは処理速度が上がって誰でも自由に株式の情報が 取得できることを期待しましょう。