「ConoHa VPSの利用状況や請求額を、Excelでサクッと管理したい」
「上司への報告資料を作るために、サーバー一覧を自動で取得したい」
そんなビジネスユーザーの要望に応えるべく、今回はExcel VBA(マクロ)を使ってConoHa APIを操作する方法をご紹介します。
APIを使えば、普段使い慣れたExcelから直接サーバー情報を取得したり、請求データを出力したりすることが可能です。ぜひ業務効率化にお役立てください。
準備:ConoHa APIを使うための事前知識
ExcelからAPIを叩く前に、基本的な流れを確認しておきましょう。
今回は、サーバーの契約状況や請求情報を取得する「Account (Billing)」機能を使用します。
データ取得の基本的な流れ
- APIユーザーの作成: ConoHaのコントロールパネルでAPIユーザーを作成しておく。
- トークン(Token)の取得: テナントID、ユーザーID、パスワードを使って認証し、一時的なアクセスキー(トークン)を取得する。
- 情報の取得: 取得したトークンを使って、各種API(請求情報など)を叩く。
APIの仕様詳細は、公式ドキュメントを参照してください。
Excel VBAでAPIを叩く環境構築
VBA標準の機能だけではJSON形式のデータを扱うのが難しいため、以下のツールを組み合わせて環境を作ります。
- HTTPS通信:
MSXML2.XMLHTTP(Windows標準コンポーネント) - JSONパース:
JSONLib(VBA用JSONパーサー)
JSONLibは、以下のGoogle Code Archiveなどから入手可能です。
vba-json – Google Code Archive
実践:トークン取得マクロの実装
では、実際にコードを書いていきましょう。
まずはAPI操作の基本となる「トークン取得」の関数です。
Private Function GetToken(ByVal strUserID As String, ByVal strPassword As String, Optional ByVal strTenantID As String) As String
Dim httpReq As Object
Set httpReq = CreateObject("MSXML2.XMLHTTP")
' リクエストボディの作成(JSON)
Dim strPostData As Variant
strPostData = "{""auth"":{""passwordCredentials"":{""username"":""" & strUserID & """,""password"":""" & strPassword & """},""tenantId"":""" & strTenantID & """}}"
' APIエンドポイント(Identity Service)へPOST送信
Call httpReq.Open("POST", strEndpointForIdentity, False)
Call httpReq.setRequestHeader("Accept", "application/json")
Call httpReq.send(strPostData)
' レスポンス待ち
Do While httpReq.readyState <> 4
DoEvents
Loop
If httpReq.Status = 200 Then
' レスポンスJSONをパース
Dim strJson As String
Dim objJson As Object
strJson = httpReq.responseText
Set objJson = StringToJson(strJson)
' トークンIDを抽出して返す
GetToken = objJson("access").item("token").item("id")
Else
MsgBox ("トークンが取得できませんでした")
GetToken = ""
End If
End Function
実行結果:Excelシートへの出力
この関数を使って、実際にデータを取得してみましょう。
1. 情報入力画面
ExcelシートにAPIユーザー情報を入力し、「情報取得」ボタンを押すとマクロが走るように設定します。

2. 契約情報の取得結果
APIから返ってきたレスポンスをセルに書き出すと、このように契約状況や請求金額が一覧で表示されます。

3. VPS一覧の取得
同様にして、稼働中のVPS一覧を取得することも可能です。

【注意点】JSONLibのバグ回避
JSONLibは、キー名にコロン(:)が含まれていると処理が止まることがあるようです。
ConoHaのAPIレスポンスにはコロンが含まれるキーがあるため、パース前に置換処理を入れておくと安全です。
strResponseText = Replace(strResponseText, "OS-DCF:", "OS-DCF_")
strResponseText = Replace(strResponseText, "OS-EXT-AZ:", "OS-EXT-AZ_")
strResponseText = Replace(strResponseText, "OS-EXT-SRV-ATTR:", "OS-EXT-SRV-ATTR_")
strResponseText = Replace(strResponseText, "OS-EXT-STS:", "OS-EXT-STS_")
strResponseText = Replace(strResponseText, "OS-SRV-USG:", "OS-SRV-USG_")
strResponseText = Replace(strResponseText, "OS-EXT-IPS-MAC:", "OS-EXT-IPS-MAC_")
strResponseText = Replace(strResponseText, "OS-EXT-IPS:", "OS-EXT-IPS_")
strResponseText = Replace(strResponseText, "os-extended-volumes:", "os-extended-volumes_")
サンプルファイルのダウンロード
今回作成したマクロ付きExcelファイルは、GitHubで公開しています。
コードの詳細確認や、手っ取り早く動かしてみたい方は、以下からダウンロードしてください。
まとめ
Excel VBAを活用すれば、専用の管理画面を作らなくても、手軽にConoHaのサーバー管理やコスト管理を行うことができます。
「毎月の請求額を自動で集計したい」「サーバーのIPアドレス一覧をExcelで管理したい」といった業務に、ぜひAPI連携を活用してみてください。
【推奨】業務システム化に有効なアイテム
生成AIを学ぶ



システム化のパートナー(ミラーマスター合同会社)



VPSサーバの選定





コメント