またSASのLIBNAME EXCEL機能を使えば、EXCELの値を自由に読み込み&書き込みできます。
この二つを組み合わせれば、みんな大好きエクセルさんをインターフェースにして、そこに
ユーザーが入力した値をSASに渡して、処理を行い、処理結果をエクセルに返すことができます。
その簡単な例を紹介します。
今、「D:\FACE.xlsm」というマクロつきのエクセルブックがあったとします。
黄色の部分にそれぞれの計算結果が入れたいとします(黄色セルは表示形式:数値)
そして、「D:\計算.sas」というSASファイルがあり、
その中身は以下のコードだとします。
libname EXLIB "D:\FACE.xlsm" header=no scan_text=no;
data Q1;
set EXLIB."Sheet1$D8:D8"n ;
rename F1=X;
run;
data Q2;
set EXLIB."Sheet1$F7:F7"n ;
rename F1=Y;
run;
data Q3;
set EXLIB."Sheet1$F9:F9"n ;
rename F1=Z;
run;
data A1;
set Q1;
set Q2;
A=X+Y;output;
A=.;output;
set Q1;
set Q3;
A=X+Z;output;
run;
data EXLIB."Sheet1$H7:H9"n ;
set A1;
modify EXLIB."Sheet1$H7:H9"n ;
F1=A;
run;
何をしているかというとエクセル数字の入っている3セルを読み込んで
計算結果を黄色のセルに出力しているわけです。
で肝心のEXCELからSASを起動する方法ですが
「計算ボタン」に以下のコードを結び付けています。
Sub ボタン1_Click()
Dim sasobj As Object
Set sasobj = CreateObject("SAS.application")
sasobj.Visible = False
sasobj.Submit ("%inc 'D:\計算.sas';")
sasobj.Submit ("ENDSAS;")
End Sub
これだけです。
実行ログファイルが欲しい場合はprinttoプロシジャ等をいれましょう。
以上の準備が整えば、あとはエクセル上のボタンをクリックすれば
と一瞬で計算結果がエクセルに返ってきます。
endsasをいれているので、SASも勝手にとじます。
この一連の流れは結構使えると思います。
あと、これは勝手なお願いですが、LIBNAME EXCELは便利で、DDEにはない長所をいっぱい
持っているんですが、いまいちまだ解らない部分や、誰も試していない部分が多くて
DDEのように枯れた知識になってない感じがあります。
新しく発見された部分があれば、どんどん共有していけたらと思います。




