目次
1.サンプルファイル
サンプルとして、Excelファイルを開くで開いた以下ファイルのシート「都道府県」をコピーしてみます。
2.展開例
1.コピー元を残すパターン
引数fileは省略可能ですが、その場合はアクティブファイルが対象となり、そのファイル内に引数baseで指定するシート名が存在しないとエラーになります。
%dde_copy_sheet(
file=都道府県.xlsx,
base=都道府県,
copy=都道府県2,
del=
);
以下のように、コピー元の「都道府県」を残したまま、「都道府県2」がコピーされています。
2.コピー元を削除するパターン
先ほどと違って、コピー元を削除する展開例です。
引数delで「Y」を指定して下さい。
%dde_copy_sheet(
file=都道府県.xlsx,
base=都道府県,
copy=都道府県2,
del=Y
);
以下のように、コピー元の「都道府県」は削除され、「都道府県2」のみになっています。
3.参考プログラム
以下は、参考プログラムになります。
右上のコピーボタンを押せば、プログラム全体をコピーできます。
%macro dde_copy_sheet(file=, base=, copy=, del=);
%put --------------------------------------------------;
%put dde_copy_sheet;/*Excelシートをコピー(複製)する*/
%put &=file; /*対象ファイルを指定(省略した場合はアクティブファイルが対象となる)*/
%put &=base; /*コピー元のシート名を指定*/
%put &=copy; /*コピー後のシート名を指定*/
%put &=del; /*コピー元のシートを削除する場合はYを指定*/
%put --------------------------------------------------;
/*シート「macro1(ファイルを閉じずに実行するとmacro2、macro3...とカウントアップしていく)」を挿入し、「macro」にリネーム*/
filename xlssys dde "excel|system";
data _null_;
file xlssys;
%if %length(&file.)>0 %then %do;
put "[activate(""&file."")]";
%end;
put '[workbook.insert(3)]';
put '[workbook.name(,"macro")]';
run;
/*シート「macro」へのコマンド入力*/
filename xlsmacro dde "excel|macro!r1c1:r100c1";
data _null_;
file xlsmacro lrecl=3000 dde notab dsd dlm="09"x;
length cmd $1024.;
cmd='=workbook.copy("'||trim("&base")||'",get.document(88),get.workbook(4,get.document(88))+1)';
put cmd;
cmd='=workbook.name("'||trim("&base")||' (2)","'||trim("©")||'")';
put cmd;
put "=return()";
put '!dde_flush';
run;
filename xlsmacro clear;
/*実行及び不要シートの削除*/
data _null_;
file xlssys;
put '[run("macro!r1c1")]';
put '[error(false)]';
put '[workbook.delete("macro")]';
%if %upcase(&del.)=Y %then %do;
length cmd $1024.;
cmd='[workbook.delete("'||trim("&base")||'")]';
put cmd;
%end;
run;
filename xlssys clear;
%mend dde_copy_sheet;