コンテキスト取得関数

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列目の値)のみが計算結果として返されます。


前のページ:XBRLインスタンスファイル解析
次のページ:ファクト取得関数