
freee会計は日々の経理業務を自動化し、リアルタイムに経営の数字も可視化できる統合型会計ソフトです。クラウド会計ソフトにおいて国内シェアが最も高いです。法人だけでなく個人事業主でも使用できます。
- 操作環境:
- OS:Windows 11
- Webブラウザー:Edge
- 使用プラン:freee会計(スターター)、Microsoft 365 Business Premium(*)
*デスクトップ版のExcelが使用できれば、上記プランでなくても問題ありません
なお、この記事では、VBAの使用許可や開発メニュー表示といった初期設定や、VBAエディタの使い方の説明は割愛いたします。
freee APIについて
freee APIの使用方法は、公式サイトの開発者コミュニティに掲載されています。
工程2,3ではスタートガイドを参考に利用開始設定とアプリ設定を進め、工程4以降ではAPIリファレンス(会計API)を参考に取引データの取得を確認・実装します。
開発者コミュニティは情報量が多く、初めてですと取っつきにくい印象を持たれるかもしれません。この記事では最低限必要な作業手順に絞って紹介します。

freee API使用開始
freee APIを初めて使用する場合、スタートガイドを参考に接続確認および事業所コードの取得を行います。
スタートガイドの「1.セットアップ」内の項番1.1[freeeアカウントをお持ちの方](freeeアカウントがない場合は項番1.2[freeeアカウントをお持ちでない方])のリンクを選択します。

[freee APIの利用を開始する]を選択します。
[メール到着をお待ちください]画面が表示されたら、メッセージに従い、メールを確認します。

画面イメージのようなメールを受信したら、[アクセストークン取得ページへ]を選択します。

[許可する]を選択します。
[クリップボードにコピー]を選択し、[APIリファレンスでCompaniesに移動]リンクを選択します。

[事業所一覧の取得]の右にある鍵マークを選択します。
[Value]欄に図表2-4でコピーしたアクセストークンをペーストし、[Authorize]を選択します。
ここで右下のような画面が表示されたら、[Servers]が「https://api.freee.co.jp」になっていることを確認し、[Authorize]を選択します。

[Authorized]と表示されたら、[Close]を選択します。
[Execute]を選択します。

[Server response]の表内の[Code]が200の行の[Response body]に表示されている、運用環境の事業所IDをメモ帳等にコピー&ペーストして控えておきます。
この事業所IDは後で取引データの取得時に必要となります。

freee会計APIアプリ設定
freee会計APIの取引データ取得用のアプリ設定を行います。
スタートガイドの[アプリケーションを作成する]を選択し、項番1の[freeeアプリストアの開発者向けアプリ一覧画面へアクセス]リンクを選択します。
[事業所アカウントを選択]画面が表示されたら、運用環境を選択します。

[開発アプリ一覧]画面が表示されたら、[新規追加]を選択します。なお、APIを使う機会が多い場合は、この一覧画面のURLをお気に入りに登録しておくと便利です。

以下の通り設定し、[作成]を選択します。
- アプリ名、概要:(APIの用途が分かる内容を適宜入力)
- アプリタイプ:プライベートアプリ(自組織内での利用のため)
- 利用規約:(チェックをつける)

[権限設定]タブを選択し、取引データ取得で必要となる参照情報にチェックをつけます(この例では勘定科目、事業所、取引、品目、取引先、部門、税区分、明細)。

[基本情報]タブを選択し、[コールバックURL][Client ID][Client Secret]の値をメモ帳等にコピー&ペーストして控えておきます。また、[Webアプリ認証用URL]の値をコピーし、Webブラウザーの別タブを起動してURL欄にペーストして開きます。

[アプリ連携する事業所を選択する]画面で、運用環境を選択します。
[アプリ連携を開始しますか?]画面で[許可する]を選択します。

[コピー]を選択して、メモ帳等にペーストして控えておきます。
元の画面のタブに戻り、[下書き保存]を選択します。

PostmanによるAPI動作確認(推奨)
いきなりVBAで実装するのではなく、先にAPI開発ツール「Postman」でデータ取得時のデータのやりとりを確認することをおススメします。Postmanの入手方法は以前の記事を参考にしてください。
認証情報の取得方法確認
まずは工程3で控えた[Client ID]等の値を使い、認証情報(アクセストークン)の取得方法を確認します。
アクセストークンは一度しか使用できないため、二回目以降のAPI実行時は前回実行時に取得したリフレッシュトークンを用いて新たなアクセストークンとリフレッシュトークンを取得し、この新たなアクセストークンを使用する形となります。

環境を新規作成します。コレクションに直接設定値をベタ打ちもできますが、同じ接続先に色々なリクエストを試したい場合、ここで設定を変数化しておくと便利です。今回のようなにセキュアな値はタイプをシークレットにします。
- callback_url:工程3で控えたコールバックURL
- client_id:工程3で控えたClient ID
- client_secret:工程3で控えたClient Secret
- company_id:工程2の最後の方で控えた事業所ID

認可コードを使用した初回のアクセストークン取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:POST
- URL:https://accounts.secure.freee.co.jp/public_api/token
- Params>
- grant_type:authorization_code
- client_id:{{client_id}}
- client_secret:{{client_secret}}
- code:工程3で控えた認可コード
- redirect_uri:{{callback_url}}
- Headers>Content-Type:application/x-www-form-urlencoded

リフレッシュトークンを使用した二回目以降のアクセストークン取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:POST
- URL:https://accounts.secure.freee.co.jp/public_api/token
- Params>
- grant_type:refresh_token
- client_id:{{client_id}}
- client_secret:{{client_secret}}
- redirect_uri:{{callback_url}}
- refresh_token:(前の画面イメージ(二回目以降の場合はこの画面イメージ)のAPI実行により取得したリフレッシュトークン)
- Headers>Content-Type:application/x-www-form-urlencoded

取引一覧の取得方法確認
取引一覧取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:GET
- URL:https://api.freee.co.jp/api/1/deals
- Params>
- company_id:{{company_id}}
- start_issue_date:(発生日(開始))
- end_issue_date:(発生日(終了))
- limit:100
- Headers>Authorization:Bearer (アクセストークン)
- 取引一覧取得の仕様:freee会計APIリファレンス:取引一覧取得

取得結果を見ると、partner_id(取引先),account_item_id(勘定科目),tax_code(税区分),item_id(品目),section_id(部門)等はコード値となっており、名称を取得するにはこれらのマスターの取得も必要となります。この後、今挙げた5種類のマスターについても一覧取得してみます。
各マスター一覧の取得方法確認
取引先一覧取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:GET
- URL:https://api.freee.co.jp/api/1/partners
- Params>
- company_id:{{company_id}}
- limit:3000
- Headers>Authorization:Bearer (アクセストークン)
- 取引先一覧取得の仕様:freee会計APIリファレンス:取引先一覧取得

勘定科目一覧取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:GET
- URL:https://api.freee.co.jp/api/1/account_items
- Params>company_id:{{company_id}}
- Headers>Authorization:Bearer (アクセストークン)
- 勘定科目一覧取得の仕様:freee会計APIリファレンス:勘定科目一覧取得

税区分一覧取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:GET
- URL:https://api.freee.co.jp/api/1/taxes/codes
- Params>company_id:{{company_id}}
- Headers>Authorization:Bearer (アクセストークン)
- 税区分一覧取得の仕様:freee会計APIリファレンス:税区分一覧取得

品目一覧取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:GE
- URL:https://api.freee.co.jp/api/1/items
- Params>
- company_id:{{company_id}}
- limit:3000
- Headers>Authorization:Bearer (アクセストークン)
- 品目一覧取得の仕様:freee会計APIリファレンス:品目一覧取得

部門一覧取得の設定を行います。設定できたら、[Send]を選択します。
- メソッド:GET
- URL:https://api.freee.co.jp/api/1/sections
- Params>company_id:{{company_id}}
- Headers>Authorization:Bearer (アクセストークン)
- 部門一覧取得の仕様:freee会計APIリファレンス:部門一覧取得

上記画面イメージの通り、この環境では部門が未設定です。未設定の場合を考慮したデータ取得の例として、この後、Excel VBAで部門もあえて取得するような実装としてみます。
Excel VBA処理の流れの整理
大まかな処理の流れを整理しておきます。
工程4で確認した通り、取引データは取引先や勘定科目等、コード値しか保有していない項目があります。これらの項目のマスターデータも取得し、取引データと各マスターのデータを結合した結果を出力する形とします。

また、以下は今回のデータ取得に関する補足事項です。
- セグメントとメモタグのマスターデータの取得は割愛しました
- 取引先と品目のマスターデータの取得において、ページ送りは考慮していません
- 取引先のマスターデータにおいて、書類送付方法の取得は割愛しました
Excelファイル用意
VBAを実行するExcelファイルを用意します(拡張子はxlsm)。
- Menuシート:発生日(範囲)を指定し、[データ取得]ボタン(ActiveXコントロール)を押すと、freee会計APIに接続し、データ取得・加工を行います。なお、[今年一年]ボタンを押すと、発生日(範囲)に今年一年間が設定されます。

- Searchシート:Menuシートの[データ取得]ボタンを押した後、各マスターと取引データ(deals~sectionsシート)を結合した結果がこのシートに出力されます。


- deals~sectionsシート: Menuシートの[データ取得]ボタンを押した後、各マスターや取引データの一覧データが出力されます。これらのシートのデータは、Searchシートに結合したデータを出力する際の元データになります。

- VBAプロジェクト:Mainシート上にソースを実装します。画面に表示されているのは、データ取得ボタンクリック時にデータ取得・加工の関数を呼び出すソースと、今年一年ボタンクリック時に発生日(範囲)の値をセットするソースです。他のソースは次の記事で取り上げます。

APIのデータのやり取りはJson型というデータフォーマットを使用します。こちらのサイトにVBA用の変換モジュールJsonConverter.basがあるので、ダウンロードします。

ダウンロードしたZIPを展開しておきます。VBAのプロジェクトエクスプローラ上で右クリックし、[ファイルのインポート]を選択します。
展開したファイル内のJsonConverter.basを選択します。
VBAのプロジェクトエクスプローラー上に、[標準モジュール>JsonConverter]が表示されます。

[ツール>参照設定]を選択し、[Microsoft Scripting Runtime]のチェックをオンにします。これが未実施の場合、API呼び出し時のHTTPリクエストオブジェクトの作成でエラーが発生します。

次の記事(ソースの紹介)に続きます。
当ブログ内の連載記事
当ブログ内の関連記事