ExcelマクロでSAPシステムからデータを取得してみよう!

Pocket

ERPシステムであるSAPを保守していると、データ一覧を取得したいと思うことがありませんか?
データ一覧を取得するために、トランザクション:SE16Nなどを使ってテーブルを検索し、スプレッドシートにダウンロードしますが、それが「時間もかかるし面倒くさい!」という時に、Excelマクロ(VBA)を使って簡単に取得する方法を紹介します。

ちなみに今回のサンプルコードは、下記の環境で作成しています。

・Windows10 ver1903(64bit)
・SAP GUI 740
・Excel 2016(32bit)

SAP RFCについて

SAPシステムには、RFC(Remote Function Call)と呼ばれる汎用モジュールがあります。
通常、汎用モジュールは、ABAP(Advanced Business Application Programming)を使って呼び出されるように設計されたSAPシステムのAPI(BAPI:Bussiness Application Programing Interface)ですが、RFCに対応したBAPIは、ABAP以外からも呼び出すことが可能です。今回はExcelマクロを使ったBAPI呼び出しを紹介します。

【前提】
・SAP GUIがWindowsマシンにインストールされていること。
・SAPシステムにアクセスできるユーザーIDを持っていること。

テーブルを読み込む汎用モジュール

テーブルを読み込むには、RFC対応のBAPI「RFC_READ_TABLE」を使います。
パラメータとして、読み込みたいテーブルやフィールドを指定することで、簡単にテーブルの内容を取得できます。具体的には、ImportパラメータやTableパラメータを使用しますが、詳細はABAP開発を学習いただきたく思います。

ExcelマクロでBAPIを呼び出すサンプルコード

Excelマクロを使って、BAPI「RFC_READ_TABLE」を呼び出すサンプルコードは以下になります。
品目マスタ(MARA:一般商品データ)から、品目コード・品目タイプ・基準単位を取得するサンプルです。件数を絞るために、品目コードの頭が”AA-“で始まるものを条件にしています。取得した品目情報は、Excel上に新しいシートを作って転記するようにしています。
(そのままExcelマクロのモジュールに貼り付けできます)

簡単に解説します。

SAPシステムのActiveXコンポーネントオブジェクトを作成します。SAP GUIがWindowsにインストールされていれば、一緒にActiveXコンポーネントもインストールされているので、そのまま使えます。

ここで、使用したいBAPIを指定します。

ここで、読み込みを行いたいテーブル名を指定します。今回は品目マスタの一般商品データを読み込むので、”MARA”を指定します。

ここで、取得したいテーブル内のフィールドを指定します。今回は品目コード・品目タイプ・基準単位を取得したいので、”MATNR”・”MTART”・”MEINS”を指定します。項目を増やしたい場合は、IT_FIELDオブジェクトにappendrowメソッドで行を追加して、任意の項目を追加してください。

ここで、取得する条件を指定します。今回は品目コードが”AA-“で始まるものを条件にしていますので、”MATNR LIKE ‘AA-%'”となるように指定しています。条件を増やしたい場合は、IT_OPTIONSオブジェクトにappendrowメソッドで行を追加して、任意の条件を追加してください。この部分を可変にすることで、条件を変更することも可能です。

マクロを実行してみる

マクロを実行してみます。

まず、SAP GUIで定義されている環境選択が表示されますので、利用したい環境を選択します。

その後、クライアント・ユーザー・パスワードなどを入力するダイアログが表示されますので、ご自身のID情報を入力します。

そうすると、Excel上に新しいシートが作成されて、項目名に続いてデータの内容が2行目以降に表示されます。

これで、簡単にSAPシステムのテーブル内容を取得することが出来ます。

最後に

今回は単純にテーブルの内容を取得するBAPIを紹介しました。SAPシステムにはRFCで利用できるBAPIが多数用意されていますので、今回のサンプルコードを応用してチャレンジしてみてください。(更新系のBAPIを使って、SAPシステムのデータを破壊しないようにご注意ください!)

お問い合わせ先

執筆者プロフィール

Taguchi Atsushi
Taguchi Atsushitdi パナソニック事業部
工場系生産管理・営業系販売予測のシステム開発・導入に従事。
スクラッチ開発からOracle EBS導入プロジェクト、SAP導入プロジェクトを経験。
現在はマーケティング分野に取り組み中。
Pocket

関連記事