PR

SAP と Excel を VBScript で自動化する方法|SAP GUIスクリプト記録とBAT連携まで解説

VBScript
記事内に広告が含まれています。

企業の基幹システムとして広く使われている SAP。

一方で、日常業務の集計や加工には Excel を使っている企業がほとんどです。

そのため、多くの現場では「SAPでデータを確認 → Excelへ転記 → 再びSAPへ入力」といった手作業が繰り返されています。

RPAで自動化を試みても、SAP特有の画面仕様が原因でうまく動かないケースも少なくありません。

そこで本記事では、SAPが公式にサポート している VBScript を活用し、SAPとExcelの操作を安定して自動化する方法を解説します。

ログイン自動化(sapshcut.exeの活用)、スクリプト記録の設定、Excelとの連携処理、BATファイルによる一括実行まで、実務でそのまま使える形で紹介します。

上手くいけば今まで長時間手作業でやっていた業務をクリック一つで終わらせることができるかもしれません。是非参考にしてみて下さい。

スポンサーリンク

SAP の自動化の問題と対策

SAP は RPA と相性が悪いという問題

RPA(Robotic Process Automation)はキーボードやマウスの操作をそのまま記録して、再生できるので業務の自動化に活用が広まりつつあります。

しかし、冒頭でもご説明した通り、SAPの操作方法は独特で、この RPAツールとも相性が悪いケースがあります

RPAツールで SAP の操作を記録していても、細かいところでつまづいてしまい、結局問題が解決できないという壁にぶつかってしまった方も多いのでは無いかと思います。

アプリケーションの相性の問題はユーザで解決できないケースがほとんどですので、RPAツールを使って壁にぶつかってしまうより、SAP が正式にサポートする方法を活用する方が素直です。

SAP が正式サポートする Microsoft の VBScript

実は SAP はユーザーの操作を VBScript にそのまま記録する機能がついています。SAP が正式にサポートする機能ですので、上手く動かないはずはありません。

更にVBScript は Microsoft が提供するスクリプト言語ですから、Excel も問題なく操作できます

以上のような理由で、この記事では VBScript を活用した自動化ツールを作る方法を解説していきます。

SAP はログインも特殊、sapshcut.exe を使う

SAP を使っている方ならお気付きかと思いますが、SAP はログインするための別のアプリを立ち上げる必要があります。

このログイン処理も VBScript や RPA で組もうとすると中々上手くいかないケースがあります。そこで、これも SAP から提供されているログイン用の専用のコマンド sapshcut.exe を活用することにします。

使いやすいように、以下の内容の BAT ファイルを作成します。

rem SAPLOGON.BAT

set SAPSystemId=<システムID>
set SAPClient=<クライアント番号>
set SAPUser=<ユーザ名>
set SAPPassword=<パスワード>

"C:\Program Files (x86)\SAP\FrontEnd\SapGui\sapshcut.exe" start -system=%SAPSystemId% -client=%SAPClient% -user=%SAPUser% -pw=%SAPPassword%

ここで、システムID、クライアント番号、ユーザー情報 はご自分の環境に合わせて編集して下さい。

この BAT ファイルをダブルクリックすると自動で SAP のログインまで完了します。

VBScript で SAP の操作を自動化(操作の記録とプログラム編集)

ここでは SAP のスクリプト記録の機能を活用します。

設定から必要なので、順に説明します。

必要な設定

次の手順で設定します。この設定により SAP のアプリでユーザの操作を記録、再生できるようになります。
記録されるものは VBScript のコードになります。

  1. SAP のメニューから「オプション」を選択
  2. 「アクセシビリティ & スクリプト」 を展開
  3. 「スクリプト」 を選択
  4. 「スクリプト有効化」にチェック
  5. 「スクリプトがSAP GUI にアタッチする時に通知」のチェックを外す
  6. 「スクリプトが接続を開く時に通知」 のチェックを外す

SAP の操作を記録する

では、早速 SAP の操作を記録してみましょう。Excel のマクロの記録とほとんど同じ感じになります。

  1. SAPのメニューから「オプション」を選択
  2. 「スクリプト記録と再生」 を選択
  3. 記録、再生ボタンのついてウィンドウが出てきますので、SAPの操作を始める前に「記録」ボタンを押します
  4. SAP の操作が完了したら「停止」ボタンを押します
  5. そうすると「保存先」の “*.vbs” ファイルに SAP の操作が全て VBScript で記録されます。

SAP 操作の VBScript を解読する

記録された VBScript をメモ帳などのテキストエディタで開いてみましょう。

すると図のような内容になっているのが分かります。

ユーザー操作の記録は比較的単純で、マウス操作ならボタンを次々と押していく操作が一つずつ記録されているだけです。

そのマウス操作の記録は図のように解読すると、理解が早いので、頭に入れておきましょう。

これで VBScript の中身が理解できたら後は Excel と連携させた動作をどう組み立てるかを考えれば良い訳です。

VBScript で Excel の操作を自動化(ファイル操作、セル操作)

VBScript で SAP を操作するコードは前の項で理解できたので、続いては Excel の操作です。

基本的な操作さえ把握できれば十分実用できますですので、それらを紹介します。

SAP と Excel の連携は、Excelファイルを開いてセルの内容を繰り返し SAP に入力するとか、逆に繰り返し値を Excel に転記するとかをイメージしています。

ファイルを開く

VBScript で Excel ファイルを開くには以下のようにします。

Set exl = CreateObject("Excel.Application")
Set wb = exl.Workbooks.Open("C:\temp\test.xlsx")

セルの値の読み書き

セルの値の読み書きは以下のようにします。

Set ws = wb.Sheets("Sheet1")
Set cl = ws.Range("A1")
cltext = cl.Text

VBScript の繰り返し処理

プログラム言語で繰り返し処理は大きく分けて2つありますので、それぞれを紹介します。

回数が決まってない時の Do Loop

これは例えば Excel のシートで上のセルから順番に処理していって、空のセルになるまで下に移動していくような処理になります。

以下のようにするとセルの値が空になるまで繰り返し処理を行います。

ここで注意すべきは変数 i を繰り返しループの中で必ず一回以上増減させることです。変数 i が変化しないと無限ループに入って終わらなくなってしまいます

' Do_Loop_Test.vbs
'
' 初期化
Set exl = CreateObject("Excel.Application")
Set wb = exl.Workbooks.Open("C:\temp\test.xlsx")
Set ws = wb.Sheets("Sheet1")
Set cl = ws.Range("A1")
i = 0
cltxt = ""

' Do ~ Loop の繰り返し処理 ****************************************************

Do While cl.Offset(i, 0).Text <> ""
    cltxt = cltxt & cl.Offset(i, 0).Text
    i = i + 1 ' ***【注意】変数を変化させないと無限ループになってしまいます! ***
Loop

' ******************************************************************************

' 終了処理
wb.Close
exl.Quit
Set exl = Nothing

' 最後にセルから取得したテキストを表示
msgbox cltxt

実行結果は図のようになります。

回数が決まっていたら For Next

これはあらかじめ3回繰り返すなど、繰り返す回数が決まっている場合の処理になります。

以下はセルの値を3回読み込む処理をコードにしたものです。

' For_Next_Test.vbs
'
' 初期化
Set exl = CreateObject("Excel.Application")
Set wb = exl.Workbooks.Open("C:\temp\test.xlsx")
Set ws = wb.Sheets("Sheet1")
Set cl = ws.Range("A1")
cltxt = ""

' For ~ Next の繰り返し処理 ****************************************************

For i = 0 To 2
    cltxt = cltxt & cl.Offset(i, 0).Text
Next

' ******************************************************************************

' 終了処理
wb.Close
exl.Quit
Set exl = Nothing

' 最後にセルから取得したテキストを表示
msgbox cltxt

実行結果は図のようになります。

SAP と Excel を連携させた完全自動化の構築手順

ここまでで VBScript で SAP と Excel の両方をコントロールできるようになりました。

これを組み合わせれば SAP に Excel ファイルに記入された値を繰り返し入力する処理などを作成できます。

ここでは SAP と Excel を起動して、自動処理をした上で最後には SAP と Excel を終了するところまでを完全自動化します。

BAT ファイルを作成

前述の通り SAP の起動にはsapshcut.exe を使いますので、BATファイルにこのコマンドを記入します。

また、VBScript ファイルの実行にはcscript コマンドを使います。

最後にSAP LOGON のアプリを終了する処理もまた VBScript では上手くできないので、taskkill コマンドを使います。

最終的にBATファイルのコードは以下のようになります。

set SAPSystemId=<システムID>
set SAPClient=<クライアント番号>
set SAPUser=<ユーザ名>
set SAPPassword=<パスワード>

"C:\Program Files (x86)\SAP\FrontEnd\SapGui\sapshcut.exe" start -system=%SAPSystemId% -client=%SAPClient% -user=%SAPUser% -pw=%SAPPassword%

rem ログオン処理を5秒待つ

timeout /t 5 /nobreak >nul

rem SAP 自動処理の VBScript を実行

cscript C:\temp\sap_automate.vbs

rem SAP LOGON のアプリを終了

taskkill /IM saplogon.exe

VBScript ファイルを作成

VBScript では以下の順に処理を行います。

  1. SAPオブジェクトの初期化
  2. SAP入力画面までの遷移
  3. Excelファイルを開く
  4. 繰り返し処理
  5. Excel ファイルを閉じる
  6. SAP GUI Client の終了

コードは以下のようになります。

' SAPオブジェクトの初期化
If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject(“SAPGUI”)
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     “on”
   WScript.ConnectObject application, “on”
End If

' SAP入力画面までの遷移
session.findById(“wnd[0]/tbar[0]/okcd”).text = “A33”
session.findById(“wnd[0]”).sendVKey 0
session.findById(“wnd[0]/usr/ctxtRPG50-VBELN”).text = 16
session.findById(“wnd[0]/usr/btnBT_SUCH”).press

' Excel ファイルを開く
Set exl = CreateObject("Excel.Application")
Set wb = exl.Workbooks.Open("C:\temp\test.xlsx")
Set ws = wb.Sheets("Sheet1")
Set cl = ws.Range("A1")

' 繰り返し処理
Do While cl.Offset(i, 0).Text <> ""

	’ SAP に繰り返し入力する処理
	session.findById(“wnd[0]/usr/ctxtRPG50-VBELN”).text = c.Text
	session.findById(“wnd[0]/usr/btnBT_SUCH”).press

	i = i + 1
Loop

' Excelファイルを閉じる
wb.Close
exl.Quit
Set exl = Nothing

' SAP GUI Client の終了
session.findById(“wnd[0]/tbar[0]/btn[15]”).press

コメントしてある部分はご自分の環境の合わせて記入して下さい。

SAP GUI Client を終了する VBScript のコードを作成する工夫

SAP でスクリプト記録モードに入って様々な操作をした上で SAP を終了させてしまうと、スクリプトの記録はファイルに記録されずに消えてしまいます。

この問題を解決する工夫は終了処理を最後にキャンセルするという方法です。

SAP GUI Client でログオフボタンを押すと確認のダイアログが出てきます。ここで「いいえ」を選択してスクリプトの記録を終了します。

するとスクリプトの記録の最後が以下のようになっていると思います。

session.findById("wnd[0]/tbar[0]/btn[15]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION2").press

SAP の VBScript の解読ができた方なら想像つくと思いますが、最後の「いいえ」ボタンを押すところを「はい」ボタンを押すように変更すれば良いのです。

以下のようにOption の数字を 2 から 1 に変えるだけです。これでログオフまでスムーズに VBScript で実行できるようになります。

session.findById("wnd[0]/tbar[0]/btn[15]").press ‘「ログオフ」ボタンを押す
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press ‘「はい」ボタンを押す

動かしてみる

作成した SAPEX.BAT ファイルをダブルクリッククリックします。すると全ての処理が次々と進んで終了すると思います。

人間が操作するとかなり時間がかかるのですが、プログラムにやらせると あっと言う間です。何よりもコンピュータが面倒な作業をしてくれますので人への負担が全くありません。

これで効率化した労力を他の仕事に回すか、残業を減らすか、皆さんがご自由に使ってください。

まとめ

この記事では会社などで基幹システムとして使われている SAP と、一般ユーザーが最も良く使う Excel を自動操作して作業を完全自動化する方法をご紹介しました。

プログラムが処理するので、ミスも無く、処理も速く、何よりもユーザーの負担が大いに軽減するのがメリットです。

この仕組みは一度作成してしまえば何度でも利用出来ますし、少し編集すれば別の自動処理をさせることも出来るようになります。

これを足掛かりに様々な処理を自動化して業務の大幅な効率化を図ってみてはいかがでしょうか?

業務の自動化を進める次のステップ

コンピュータはプログラムを走らせることで人がやると非常に手間な作業を瞬時に処理することが可能です。

しかし、通常はプログラムを作成するのは スキルと労力 が必要です。

この問題を鮮やかに解決できるツールが私たちが日常的に使っている Excel には備わっています。

それが Power Query です。Power Query は高度なデータ処理ができるにもかかわらず、一切プログラミング無しでデータ処理の自動化を実現できるツールです。

Power Query はマウス操作だけで使うことができるので、初心者も抵抗なく使い始めることができます。

システムが乱立してデータ処理業務が増大している現代では、Power Query は Excel関数 よりも身に付けるべきものとなってきています。

Power Query の基礎知識から基本の操作を Power Query への導入記事 にまとめましたので、興味を持たれた方は是非ご覧ください。

タイトルとURLをコピーしました