WebAPIを用いてVBAでプロジェクト名一覧および説明をExcelに出力する
工数管理
機能説明
プロジェクト管理
TimeTrackerカスタマーサクセス [2026.06.18]
TimeTrackerのWebAPIを活用し、VBAでExcelにTimeTrackerのプロジェクト一覧およびプロジェクトの説明(進捗や状況を記入するメモ欄)を出力するサンプルコードを紹介します。
参考サイト
WebAPIヘルプ:プロジェクト一覧の取得 | TimeTracker NX WebApi ヘルプ
APIキーを生成する: ユーザー設定を変更する | TimeTracker RX ヘルプ
サンプルコード
プロジェクト情報を一括でExcelに出力をするVBAマクロを書きました。
============================================
設定値(ご利用環境に合わせて変更してください)
============================================
Const BASE_URL As String = "https://<YOUR_HOST>/<YOUR_TENANT>/api/project/projects"
Const LOGIN_ID As String = "<LOGIN_ID>"
Const LOGIN_PW As String = "<PASSWORD>"
---------------------------------------------------------------------------------------------------------------------------
Option Explicit
Sub GetProjects()
Dim url As String
url = "https://<YOUR_HOST>/<YOUR_TENANT>/api/project/projects"
Dim http As Object
Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0")
http.setOption 2, 13056
Dim cred As String
cred = B64Enc("<LOGIN_ID>:<PASSWORD>")
http.Open "GET", url, False
http.setRequestHeader "Authorization", "Basic " & cred
http.setRequestHeader "Accept", "application/json"
On Error GoTo ErrHandler
http.Send
On Error GoTo 0
If http.Status <> 200 Then
MsgBox "HTTP " & http.Status & vbCrLf & http.responseText, vbCritical
Exit Sub
End If
Dim json As String
json = http.responseText
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Cells.Clear
ws.Cells(1, 1).Value = "No"
ws.Cells(1, 2).Value = "Code"
ws.Cells(1, 3).Value = "Project Name"
ws.Cells(1, 4).Value = "Manager"
ws.Cells(1, 5).Value = "Organization"
ws.Cells(1, 6).Value = "Start Date"
ws.Cells(1, 7).Value = "Finish Date"
ws.Cells(1, 8).Value = "Description"
ws.Range("A1:H1").Font.Bold = True
Dim pos As Long
Dim row As Long
row = 2
pos = InStr(json, """data"":[")
If pos = 0 Then
MsgBox "data not found", vbCritical
Exit Sub
End If
Dim i As Long
i = 1
Do
Dim namePos As Long
namePos = InStr(pos, json, """name"":""")
If namePos = 0 Then Exit Do
Dim projName As String
projName = ExtractValue(json, namePos)
Dim code As String
Dim codePos As Long
codePos = InStrRev(json, """code"":""", namePos)
If codePos > 0 And namePos - codePos < 200 Then
code = ExtractValue(json, codePos)
Else
code = ""
End If
Dim mgr As String
mgr = FindField(json, namePos, "managerName")
Dim org As String
org = FindField(json, namePos, "organizationName")
Dim sDate As String
sDate = FindField(json, namePos, "plannedStartDate")
If Len(sDate) > 10 Then sDate = Left(sDate, 10)
Dim fDate As String
fDate = FindField(json, namePos, "plannedFinishDate")
If Len(fDate) > 10 Then fDate = Left(fDate, 10)
Dim desc As String
desc = FindField(json, namePos, "description")
ws.Cells(row, 1).Value = i
ws.Cells(row, 2).Value = code
ws.Cells(row, 3).Value = projName
ws.Cells(row, 4).Value = mgr
ws.Cells(row, 5).Value = org
ws.Cells(row, 6).Value = sDate
ws.Cells(row, 7).Value = fDate
ws.Cells(row, 8).Value = desc
row = row + 1
i = i + 1
pos = namePos + Len(projName) + 10
Loop
ws.Columns("A:H").AutoFit
MsgBox (row - 2) & " projects retrieved.", vbInformation
Exit Sub
ErrHandler:
MsgBox "Error " & Err.Number & vbCrLf & Err.Description, vbCritical
End Sub
Function ExtractValue(ByVal json As String, ByVal keyPos As Long) As String
Dim vStart As Long
vStart = InStr(keyPos, json, ":""") + 2
Dim vEnd As Long
vEnd = InStr(vStart, json, """")
If vEnd > vStart Then
ExtractValue = Mid(json, vStart, vEnd - vStart)
Else
ExtractValue = ""
End If
End Function
Function FindField(ByVal json As String, ByVal fromPos As Long, ByVal fieldName As String) As String
Dim fPos As Long
fPos = InStr(fromPos, json, """" & fieldName & """:""")
If fPos > 0 And fPos - fromPos < 1000 Then
FindField = ExtractValue(json, fPos)
Else
Dim fPos2 As Long
fPos2 = InStr(fromPos, json, """" & fieldName & """:")
If fPos2 > 0 And fPos2 - fromPos < 1000 Then
Dim cPos As Long
cPos = fPos2 + Len(fieldName) + 3
Dim cEnd As Long
cEnd = InStr(cPos, json, ",")
Dim cEnd2 As Long
cEnd2 = InStr(cPos, json, "}")
If cEnd2 > 0 And (cEnd = 0 Or cEnd2 < cEnd) Then cEnd = cEnd2
If cEnd > cPos Then
FindField = Mid(json, cPos, cEnd - cPos)
Else
FindField = ""
End If
Else
FindField = ""
End If
End If
End Function
Function B64Enc(ByVal txt As String) As String
Dim b() As Byte
b = StrConv(txt, vbFromUnicode)
Dim xDoc As Object
Set xDoc = CreateObject("MSXML2.DOMDocument")
Dim nd As Object
Set nd = xDoc.createElement("b64")
nd.DataType = "bin.base64"
nd.nodeTypedValue = b
B64Enc = Replace(Replace(nd.text, vbCr, ""), vbLf, "")
Set nd = Nothing
Set xDoc = Nothing
End Function
---------------------------------------------------------------------------------------------------------------------------
VBAマクロを実行する
前提条件
Microsoft Excel(デスクトップ版)がインストールされていること
TimeTracker Cloudのログイン名とパスワードを把握していること
対象のTimeTracker Cloud環境のURLを把握していること
手順1:Excelファイルを準備する
Excelを起動し、新しいブックを作成する
ファイルを保存する際、ファイルの種類を「Excel マクロ有効ブック(.xlsm)」に変更して保存する
通常の.xlsx形式ではマクロを保存できません。必ず.xlsm形式を選択してください。
手順2:VBE(Visual Basic Editor)を起動する
Excelの画面で Alt + F11 キーを押す
VBE(Visual Basic Editor)が別ウィンドウで起動する
「開発」タブが表示されている場合は、「Visual Basic」ボタンからも起動できます。
手順3:標準モジュールを追加する
VBEのメニューから 「挿入」 をクリックする
「標準モジュール」 をクリックする
右側のコードウィンドウに白い編集画面が表示される
手順4:コードを貼り付ける
ブラウザからVBEへ直接コピーすると、引用符が全角に変換される場合があります。メモ帳を経由して貼り付けてください。
ブラウザ上のVBAコードを全選択してコピーする(Ctrl + C)
メモ帳(Notepad)を開き、貼り付ける(Ctrl + V)
メモ帳上で全選択する(Ctrl + A)
コピーする(Ctrl + C)
VBEのコードウィンドウをクリックし、貼り付ける(Ctrl + V)
末尾に
私はエンジニアではありませんが、生成AIの力を借りて、プログラムコードを書きました。
いわゆる「バイブコーディング」の実践です。
目視・手集計していた30分の作業が1秒で、できるようになるのはうれしいですよね。
デンソークリエイトはAIエージェントも販売しています。ご興味ある方はお問い合わせください。
DC Agentiqs - 開発の全工程を、AIが一気通貫で支援|DC Agentiqs
TimeTrackerカスタマーサクセス
【◇お問い合わせ https://share.hsforms.com/1-q1pNOxWSfKFqinTtiqB5Q35ytu 】【◇セミナー動画https://timetracker.denso-create.jp/video】【◇ヘルプサイト https://dcinchelp.zendesk.com/hc/ja/】【◇価格/見積依頼 https://www.timetracker.jp/price/】