SAPテーブルの項目一覧を取得するExcelマクロ

SAPテーブルの項目一覧を取得するExcelマクロ

SAP S/4HANAは強力なERPシステムだが、その膨大なテーブルや項目情報を扱うのは容易ではない。特に、業務要件に応じたデータ構造の把握や、テーブルの詳細な項目情報を迅速に確認する必要がある場合、SAP GUIで手動操作を繰り返すのは非効率的だ。

そこで本記事では、Excelマクロ(VBA)からSAP S/4HANAやECCに接続し、指定したテーブルの項目情報を一括で取得、一覧表示する方法を紹介する。この手法を活用すれば、SAP GUIを開くことなく、簡単にSAPシステムのテーブル項目情報をExcelワークシート上で確認できるようになる。SAPテーブルの項目一覧表をExcelで作成したい方にとって、非常に役立つ内容となっている

SAPシステムとExcelを連携させることで、どのように手間を省き、生産性を最大化できるのか? その答えをぜひ本記事で見つけてほしい。

目次

RPY_TABLE_READ

RPY_TABLE_READ は、SAPシステムのテーブルの情報を取得するためのBAPIである。このBAPIの使い方は至って簡単。入力パラメータにテーブルを指定すれば、そのテーブルが持つ全ての項目の情報を取得できる。取得できる情報は、項目の項目名はもちろん、項目のデータ型・長さ、テキスト名称、値のチェックテーブルまで取得できる。

また、入力パラメータに指定できるテーブルは、透過テーブルだけでなく、ビューや構造もOKである。

今回は、この RPY_TABLE_READ をExcelマクロから呼び出し、テーブルの項目情報を一括取得してExcelワークシート上に表示する。

SAPテーブルの項目情報を取得する手順

RPY_TABLE_READ を実行するExcelマクロのプロシージャ “Exec_RPY_TABLE_READ” は、以下のステップで実行される。

STEP
テーブル名を取得・検査

Excelワークシート「Field List」の「テーブル名」より、テーブル名を読み取る(テーブル名が空白の場合はマクロ終了)。
テーブル名が入力されている場合は大文字に変換する(大文字でないとテーブル名として認識されないため)。

STEP
SAPシステムにログオン

Excelワークシート「Logon Setting」より、SAPシステムに接続するためのユーザID、パスワードなどを読み取り、SAPシステムにログオンする。

STEP
RPY_TABLE_READを実行

テーブル名を RPY_TABLE_READ の入力パラメータ「TABLE_NAME」に設定し、実行。

STEP
取得した項目情報をExcelシートに展開

テーブルの項目の情報一式がテーブル形式で返されるので、Excel上に展開・表示。

SAPテーブルの項目情報を取得するExcelマクロ

準備するもの

PCにはExcel以外に、SAP GUI for Windows をインストールしておくこと。

SAPシステムとの通信に、SAP GUI for Windows のモジュールを利用するためである。

Excelマクロファイル

マクロ・プロシージャ “Exec_RPY_TABLE_READ” を含むExcelファイル「RPY_TABLE_READ_Sample.xlsm」は、「便利ツールと資料」に置いてあるので、ダウンロードして使用してほしい。コードは公開してあるので、アレンジすることも可能だ。

このExcelファイルでは、ボタン「テーブル情報の取得」を押すと、マクロ(プロシージャ)”Exec_RPY_TABLE_READ“が実行される。

マクロ(VBA)コード

RPY_TABLE_READ を実行する、Excelマクロ(VBA)プロシージャ “Exec_RPY_TABLE_READ“のコードは以下。

Option Explicit

Public Sub Exec_RPY_TABLE_READ()

    On Error GoTo Err_Exec_RPY_TABLE_READ

    Dim oRFC As Object
    Dim wsFL As Worksheet
    Dim Table_Name As String
    Dim RowData As Integer
    Dim aFields() As Variant
    Dim RowCount As Integer
    Dim RowLast As Integer
    
    Const ROW_START As Integer = 6  '開始行
    Const COL_START As Integer = 2  '開始列
    Const COL_MAX As Integer = 34   'ワークシート貼付用の配列の最大要素数
    
    
    '処理対象のワークシートを変数にセット
    Set wsFL = Worksheets("Field List")

    '入力されているテーブル名の検査
    Table_Name = Trim(wsFL.Range("TABLE_NAME"))
    If Table_Name = "" Then
        wsFL.Range("TABLE_NAME").Select
        MsgBox "テーブル名を入力してください。", vbExclamation
        Exit Sub
    End If

    'テーブル名を大文字に変換
    Table_Name = UCase(Table_Name)
    wsFL.Range("TABLE_NAME") = Table_Name

    'テーブル説明の事前消去
    wsFL.Range("TABLE_SHORTTEXT").ClearContents

    'SAPログオン状態の確認
    If SapChkAndLogon() <> 0 Then Exit Sub

    '呼び出すBAPIのセット
    goSapFunction.RemoveAll
    Set oRFC = goSapFunction.Add("RPY_TABLE_READ")
    
    'テーブル名
    oRFC.Exports("TABLE_NAME") = Table_Name
    '言語(ログオン中の言語とする)
    oRFC.Exports("LANGUAGE") = gstrSapLanguage
    
    'BAPI実行
    If Not oRFC.CALL Then
        'BAPI実行時エラー
        MsgBox oRFC.Exception, vbExclamation
        Exit Sub
    End If
    
    'テーブル説明の表示
    wsFL.Range("TABLE_SHORTTEXT") = oRFC.Imports("TABL_INF").Value("SHORTTEXT")
    
    '結果を貼り付ける領域の事前消去
    RowLast = wsFL.Cells(ROW_START, 1).SpecialCells(xlCellTypeLastCell).Row
    wsFL.Rows(CStr(ROW_START) & ":" & CStr(RowLast)).ClearContents
    
    '結果を貼り付けるための配列への値セット
    With oRFC.Tables("TABL_FIELDS")
    
        RowCount = .RowCount
        
        ReDim aFields(0 To RowCount - 1, 0 To COL_MAX - 1)
    
        For RowData = 1 To RowCount
            aFields(RowData - 1, 0) = .Value(RowData, "FIELDNAME")
            aFields(RowData - 1, 1) = .Value(RowData, "DTELNAME")
            aFields(RowData - 1, 2) = .Value(RowData, "CHECKTABLE")
            aFields(RowData - 1, 3) = .Value(RowData, "KEYFLAG")
            aFields(RowData - 1, 4) = .Value(RowData, "POSITION")
            aFields(RowData - 1, 5) = .Value(RowData, "REFTABLE")
            aFields(RowData - 1, 6) = .Value(RowData, "REFFIELD")
            aFields(RowData - 1, 7) = .Value(RowData, "INCLNAME")
            aFields(RowData - 1, 8) = .Value(RowData, "NOTNULL")
            aFields(RowData - 1, 9) = .Value(RowData, "DOMANAME")
            aFields(RowData - 1, 10) = .Value(RowData, "PARAMID")
            aFields(RowData - 1, 11) = .Value(RowData, "LOGFLAG")
            aFields(RowData - 1, 12) = .Value(RowData, "HEADLEN")
            aFields(RowData - 1, 13) = .Value(RowData, "SCRLEN_S")
            aFields(RowData - 1, 14) = .Value(RowData, "SCRLEN_M")
            aFields(RowData - 1, 15) = .Value(RowData, "SCRLEN_L")
            aFields(RowData - 1, 16) = .Value(RowData, "DATATYPE")
            aFields(RowData - 1, 17) = .Value(RowData, "LENGTH")
            aFields(RowData - 1, 18) = .Value(RowData, "OUTPUTLEN")
            aFields(RowData - 1, 19) = .Value(RowData, "DECIMALS")
            aFields(RowData - 1, 20) = .Value(RowData, "LOWERCASE")
            aFields(RowData - 1, 21) = .Value(RowData, "SIGNFLAG")
            aFields(RowData - 1, 22) = .Value(RowData, "LANGFLAG")
            aFields(RowData - 1, 23) = .Value(RowData, "VALUETAB")
            aFields(RowData - 1, 24) = .Value(RowData, "CONVEXIT")
            aFields(RowData - 1, 25) = .Value(RowData, "DDTEXT")
            aFields(RowData - 1, 26) = .Value(RowData, "REPTEXT")
            aFields(RowData - 1, 27) = .Value(RowData, "SCRTEXT_S")
            aFields(RowData - 1, 28) = .Value(RowData, "SCRTEXT_M")
            aFields(RowData - 1, 29) = .Value(RowData, "SCRTEXT_L")
            aFields(RowData - 1, 30) = .Value(RowData, "VALUEEXIST")
            aFields(RowData - 1, 31) = .Value(RowData, "ADMINFIELD")
            aFields(RowData - 1, 32) = .Value(RowData, "INTLENGTH")
            aFields(RowData - 1, 33) = .Value(RowData, "INTTYPE")
        Next
    
    End With

    'ワークシートに結果を貼り付け
    With wsFL
        .Range(.Cells(ROW_START, COL_START), .Cells(ROW_START + RowCount - 1, COL_START + COL_MAX - 1)) = aFields
    End With

    'ログオフ
    Call SapLogoff
    
    Exit Sub
    
Err_Exec_RPY_TABLE_READ:
    
    MsgBox Err.Description, vbCritical, ThisWorkbook.Name
    
End Sub

シート「Logon Setting」の補足

シート「Logon Setting」の上段に「UseSAPLogonIni」という項目があるが、この値は「X」(有効)に設定することを推奨する。

ワークシート「Logon Setting」での推奨設定

この項目を有効にすると、SAP GUI for Windows に設定済みの接続情報(SystemID)を使ってSAPシステムにログオンする。言い換えると、「ApplicationServer」や「SystemNumber」など、多くの項目の設定を省略できる。設定が必要になるのは、「Use SAP Landscape」の列が「X」の項目のみである。

設定の手間を省けるだけでなく、SAP GUI for Windowsで接続したことのある設定を利用するので、SAPシステムに確実に接続しやすい。

マクロで取得したSAPテーブルの項目一覧の例

Excelマクロによって作成したテーブル項目一覧のExcelワークシートは、こんな感じである。この例では、品目マスタの主要テーブル「MARA」の情報を取得し、一覧表示している。

RPY_TABLE_READでテーブルの項目の情報を取得しExcelに表示した例
RPY_TABLE_READでテーブルの情報を取得した例

まとめ: SAPテーブルの情報はExcel上で見よう

SAP S/4HANAのテーブルの情報を効率的に取得するために、Excelマクロ(VBA)から、BAPI: RPY_TABLE_READ を呼び出し、Excel上に項目一覧表を作成する手法を紹介した。SAP GUIでの手動操作に比べ、Excel上で一括してデータを取得・表示することで、業務のスピードが格段に向上する。

本記事の手法を応用することで、他のBAPIを活用したデータ取得や、Excelを使ったカスタムレポート作成も可能だ。

SAPとExcelを連携させた効率化の第一歩として、今回の手法をぜひ試してみてほしい。SAPシステムの構築・導入プロジェクトにおいて、手間を減らし、生産性を高めるための強力なツールとなるだろう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次