Excel操作 SASマクロ

【SAS】Excelシートのセルを表示・非表示にする(DDE)

1.サンプルファイル

サンプルとして、Excelファイルを開くで開いた以下ファイルのシート「都道府県」に対して展開してみます。
open_excel

 

2.展開例

1.行方向を非表示にする

6~8行目を非表示にする展開例です。

%dde_hide_cell(
	file	=都道府県.xlsx, 
	sheet	=都道府県,
	cell	=r6:r8, 
	hide	=1
);

以下のように、6~8行目が非表示になりました。
dde_hide_cell_row

 

2.列方向を非表示にする(失敗例)

今度は3列目のみ非表示にしてみます。

%dde_hide_cell(
	file	=都道府県.xlsx, 
	sheet	=都道府県,
	cell	=c3:c3, 
	hide	=1
);

しかし、以下のように、2~4列が非表示になり、表が消えてしまいました。
dde_hide_cell_column
 
これは下図のように、2~4列にまたがってセルが結合されているためです。
dde_hide_cell_column_ketsugo
DDEはセル結合と相性が悪いため注意が必要です。
セルの書式設定で「選択範囲内で中央」揃えにすれば、セル結合のように見せることもできますが、悩ましいところです・・・。
 

3.参考プログラム

以下は、参考プログラムになります。
右上のコピーボタンを押せば、プログラム全体をコピーできます。

%macro dde_hide_cell(file=, sheet=, cell=, hide=1);
%put --------------------------------------------------;
%put セルの表示・非表示;
%put dde_hide_cell;	/*セルを表示・非表示にする*/
%put &=file;		/*対象ファイルを指定(省略した場合はアクティブファイルが対象となる)*/
%put &=sheet;		/*対象シートを指定(省略した場合はアクティブシートが対象となる)*/
%put &=cell;		/*対象となる行または列を指定(例、r5:r10、c5:c20)*/
%put &=hide;		/*非表示=1(既定値)、再表示=2、最適値=3を指定*/
					/*
					セルの高さ/幅を指定
					[row.height(またはcolumn.width)(<高さ(幅)>,<範囲>,<標準>,<種類>)]
					<標準>true :標準の高さ(標準の幅) 
					<範囲>RxxCxx:RxxCxx形式で指定
					<種類>1:非表示 
					   2:再表示 
					   3:最適値
					*/
%put --------------------------------------------------;

	filename xlssys dde "excel|system";
	data _null_;
		file xlssys;
		put '[error(false)]';

		%if %length(&file.)>0 %then %do;
			put "[activate(""&file."")]";
		%end;

		%if %length(&sheet.)>0 %then %do;
			put "[workbook.activate(""&sheet."")]";
		%end;

		put "[select(""&cell."")]";
		
		%if %index(%upcase(&cell.), C) > 0 %then %do;
			put "[column.width(,,,&hide.)]";
		%end;

		%if %index(%upcase(&cell.), R) > 0 %then %do;
			put "[row.height(,,,&hide.)]";
		%end;

		put '[select("r1c1")]';
	run;
	filename xlssys clear;

%mend dde_hide_cell;