コンテキスト取得関数

XBRLインスタンスファイルを解析する関数が完成したので、ユーザがワークシートに入力して呼び出すことができるワークシート関数を実装していきます。
最初に、コンテキスト取得関数を実装します。

Function XBRLContext(ByVal instanceFilePath As String, Optional ByVal ContextID As String = “”)

On Error GoTo ErrorHandler

Dim inst As TInstance
Dim i As Integer
Dim j As Integer
Dim result() As Variant

‘インスタンスを取得する
inst = ParseInstanceFile(instanceFilePath)

If (ContextID = “”) Then
‘コンテキストIDを省略した場合、n行6列(n:インスタンスのコンテキスト配列の長さ)
ReDim result(0 To UBound(inst.Contexts), 0 To 5)
Else
‘コンテキストIDを指定した場合、1行6列
ReDim result(0 To 0, 0 To 5)
End If

‘配列にコンテキスト情報を出力する
For i = 0 To UBound(inst.Contexts)
If (ContextID = “” Or inst.Contexts(i).ContextID = ContextID) Then
result(j, 0) = inst.Contexts(i).ContextID
result(j, 1) = inst.Contexts(i).StartDate
result(j, 2) = inst.Contexts(i).EndDate
result(j, 3) = inst.Contexts(i).Instant
result(j, 4) = inst.Contexts(i).Scenario
result(j, 5) = inst.Contexts(i).ScenarioNonConsolidate
j = j + 1
End If
Next

If (j = 0) Then
‘j=0の場合は、出力対象のコンテキストが見つからなかったケース
‘その場合は、#N/A を返す
XBRLContext = CVErr(xlErrNA)
Else
XBRLContext = result
End If
Exit Function

ErrorHandler:
Err.Clear
XBRLContext = CVErr(xlErrNA)
End Function

XBRLの解析が完了しているインスタンスが取得できてしまえば、きわめて簡単です。メンバー変数であるコンテキストの配列から、名前が一致する(引数が省略された場合は全ての)コンテキストを選別し、出力します。

出力結果を格納するresult()は、2次元配列です。結果をワークシートに出力する場合、最初の添え字が行方向に展開されて、2つめの添え字が列方向に展開されます。

なお、この関数をワークシート関数として使う場合、配列数式として入力する必要があります。配列数式として入力するためには、ワークシートの出力範囲のセルを選択して、F2 キーを押し、Ctrl キーと Shift キーを押しながらEnter キーを押します。この数式が配列数式として入力されていない場合、単一の値(1行1列目の値)のみが計算結果として返されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>