【freee API】VBAを用いてExcelと連携する

Print Friendly and PDFページを印刷
対象プラン
  法人プラン   ✓ ライト   ✓ ビジネス   ✓ エンタープライズ  
  個人プラン   ✓ スターター   ✓ スタンダード   ✓ プレミアム  

【注意】本ページはソフトウェア開発者向けのページです

freee APIは、freeeの機能を外部のプログラムから利用するためのインターフェースです。Visual Basic for Applications(VBA)からfreee APIを利用し、Excelと連携することが可能です。

最新のAPI仕様はこちらで公開しています。(検証用のfreeeアカウントについてはこちら

freee API

 

目次

  1. Visual Basic for Applications(VBA)について
  2. Excel連携の活用例
    1. CSV形式に変換せず、各種インポート・エクスポートをする
    2. Excelの帳票データをfreeeへ同期する
  3. サンプルコード
    1. GETリクエスト
    2. POSTリクエスト
  4. サンプルファイル
    1. ファイル

Visual Basic for Applications(VBA)について

Visual Basic for Applications(VBA)はExcelなどのMicrosoft Officeアプリケーションを操作できるプログラミング言語です。Microsoft OfficeアプリケーションにはVBAのコード作成・編集ソフトが最初から付属しているため、環境設定の必要がなく簡単にプログラムを作成できます。
VBAからfreee APIにリクエストすることで、Excelとfreeeの間でデータのやりとりが可能です。

※VBAで記述されたExcel操作機能をExcelマクロといいます。

Excel連携の活用例

1.CSV形式に変換せず、各種インポート・エクスポートをする

freeeでは勘定科目・口座・取引先・部門といったデータをCSV形式でインポート・エクスポートすることができますが、CSV形式に変換せずにExcelとfreeeのデータのやりとりができます。

現在、勘定科目・補助科目(取引先・品目)・部門をインポートするfreeeのExcelアドインがあります。(Excelからfreeeに勘定科目・補助科目・部門を取り込む

_____.PNG

 

2.Excelの帳票データをfreeeへ同期する

Excelでfreee未対応の形式の帳票を作成していた場合、通常は帳票を見ながらfreeeに転記する作業が必要になります。
Excelの帳票データから必要な情報を抽出し、「取引」や「明細」としてfreeeへ送信することで、帳票データの同期が可能です。今まで使用していたExcel帳票をそのまま使用しながら、データをfreeeへ同期できます。

 _____2.PNG

 

サンプルコード

VBAからfreee APIへリクエストするサンプルコードです。freee APIドキュメントを参照し、任意の機能をお使いください。

アクセストークン取得のサンプルコードはこちら

GETリクエスト

GETリクエストのサンプルコードです。
下記の要素についてはお客様の環境のものに置き換えて用いてください。

 要素  内容

 例
(事業所一覧の場合)

ACCESS_TOKEN

取得した有効なアクセストークン
(アクセストークンの取得についてはこちら

"XXXXXXXXXXXXXXXXXXXXXXXX"
ENDPOINT

GETリクエストするURIエンドポイント

"https://api.freee.co.jp/api/1/companies"

TARGET_SHEET 取得データを保存する任意のシート名 (例)"口座一覧"
ARRAY_NAME 取得データの配列名 "companies"
PARAM_NAME 取得データのパラメーター名 "id","name","name_kana","display_name","role"

Public Sub GETサンプルコード()
    access_token = ACCESS_TOKEN
    request_url = ENDPOINT
    
    'freeeAPIにアクセスし、GETリクエストを送信
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", request_url, False
        .setRequestHeader "Authorization", "Bearer " & access_token
        .setRequestHeader "Content-Type", "application/json"
        .send
        'HTTPSステータスコードによって処理を分岐させる(エラー時マクロ終了)
        Select Case .Status
          Case 200
res = .responsetext
Case 400
MsgBox("エラー。不正なリクエストです")
Exit Sub
Case 401
MsgBox("エラー。アクセス権限がありません")
Exit Sub
Case 404
MsgBox("エラー。リクエストしたAPIは存在しません")
Exit Sub
Case Else
MsgBox("エラー")
Exit Sub End Select End With 'シートにレスポンスを保存
target_sheet = TARGET_SHEET res = "(" & res & ")" With CreateObject("ScriptControl") .Language = "JScript" Set json_array = .CodeObject.eval(res).ARRAY_NAME rownum = 1 For Each json_object In json_array Worksheets(target_sheet).Cells(rownum, 1) = CallByName(json_object, PARAM_NAME1, VbGet) Worksheets(target_sheet).Cells(rownum, 2) = CallByName(json_object, PARAM_NAME2, VbGet) Worksheets(target_sheet).Cells(rownum, 3) = CallByName(json_object, PARAM_NAME3, VbGet) Worksheets(target_sheet).Cells(rownum, 4) = CallByName(json_object, PARAM_NAME4, VbGet) Worksheets(target_sheet).Cells(rownum, 5) = CallByName(json_object, PARAM_NAME5, VbGet) Worksheets(target_sheet).Cells(rownum, 6) = CallByName(json_object, PARAM_NAME6, VbGet) rownum= rownum+ 1 Next End With
End Sub

※動作保証対象外

 

POSTリクエスト

POSTリクエストのサンプルコードです。
下記の要素についてはお客様の環境のものに置き換えて用いてください。

 要素  内容

 例
(勘定科目作成の場合)

ACCESS_TOKEN

取得した有効なアクセストークン
(アクセストークンの取得についてはこちら

"XXXXXXXXXXXXXXXXXXXXXXXX"
ENDPOINT

POSTリクエストするURIエンドポイント

"https://api.freee.co.jp/api/1/account_items"

REQUEST_BODY

POSTするデータ

"{
"company_id" : XXXXXXX,
"account_item" : {
"name" : "新しい勘定科目",
"shortcut" : "NEWACCOUNTITEM",
"shortcut_num" : "999",
"tax_name" : "課税売上",
"group_name" : "その他預金",
"account_category" : "現金・預金",
"corresponding_income_name" : "売掛金",
"corresponding_expense_name" : "買掛金"
}
}"
※XXXXXXX= 任意の事業所のcompany_id

Public Sub POSTサンプルコード()
    access_token = ACCESS_TOKEN
    request_url = ENDPOINT
    request_body = REQUEST_BODY
    
    'freeeAPIにアクセスし、POSTリクエストを送信
    With CreateObject("MSXML2.XMLHTTP")
        .Open "POST", request_url, False
        .setRequestHeader "Authorization", "Bearer " & access_token
        .setRequestHeader "Content-Type", "application/json"
        .send request_body
        'HTTPSステータスコードによって処理を分岐させる(エラー時マクロ終了)
        Select Case .Status
          Case 201
res = .responsetext
Exit Sub
Case 400
MsgBox("エラー。不正なリクエストです")
Exit Sub
Case 401
MsgBox("エラー。アクセス権限がありません")
Exit Sub
Case 404
MsgBox("エラー。リクエストしたAPIは存在しません")
Exit Sub
Case Else
MsgBox("エラー")
Exit Sub End Select End With
End Sub

※動作保証対象外