フッターに会社名を入れることが多い。
しかもシート数が半端なかったりすることも多いので・・・
EXCELのマクロ記録モードでヘッダー等をイジると
With ActiveSheet.PageSetup
.LeftHeader = "ヘッダー左"
.CenterHeader = "ヘッダー中央"
.RightHeader = "ヘッダー上"
.LeftFooter = "フッター左"
.CenterFooter = "フッター中央"
.RightFooter = "フッター右"
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
と 書き出してくれるので
シートを替えながら、このマクロを実行すればいい。
しかしブックの数も半端ないなら・・・
またBATの出番だ。
※CScriptで実行するブートストラップは省略
var EXCEL = WScript.CreateObject("EXCEL.Application");
var SHELL = WScript.CreateObject("WScript.Shell");
var FS = WScript.CreateObject("Scripting.FileSystemObject");
//カレントフォルダのファイルを列挙する
echo(SHELL.CurrentDirectory);
var folder = FS.GetFolder( SHELL.CurrentDirectory );
var em = new Enumerator( folder.Files );
//順にループ
for( em.moveFirst(); !em.atEnd(); em.moveNext() ) {
//EXCELっぽいファイルだけ処理
if(em.item().Name.indexOf(".xls")>0) {
//ファイルをEXCELで開く
var book = EXCEL.Workbooks.Open(em.item().Name);
try {
echo(book.name +": "+book.Worksheets.Count+" sheets");
EXCEL.DisplayAlerts = false;
//
var saveFlag=false;
//1シートづつループ
for(var i = 1; i<=book.Worksheets.Count; i++) { var sheet = book.Worksheets(i) //白紙は何もしない様にする if(sheet.UsedRange.Count>0) {
echo(" "+sheet.name +":"+sheet.UsedRange.Count+" セル");
var hdrText = em.item().Name + ":" + sheet.name;
//ヘッダーを調整済みならヘッダーを調整しない
if(sheet.PageSetup.LeftHeader.indexOf(hdrText)<0) {
sheet.PageSetup.LeftHeader = hdrText + " "+ "\n" + sheet.PageSetup.LeftHeader;
// 改行を入れてあるので1行分ぐらい高くする
sheet.PageSetup.TopMargin += 12;
}
//フッターに会社名を入れる
sheet.PageSetup.RightFooter = "株式会社 *****";
saveFlag=true;
}
}
// ヘッダーやフッターを調整した時だけ保存
if(saveFlag) {
book.Save();
echo(book.name +" Saved");
}
} catch(e){
var i, ary = [];
ary.push("number:"+e.number.toString(16));
for (i in e) { ary.push(i + ":" + e[i]); }
echo("例外処理:" + ary.join(", "));
} finally {
// ブックを確実に閉じる
if (book != null){
book.Close(false);
}
}
}
}
EXCEL = null;
SHELL = null;
FS = null;
微妙なのは、ヘッダーの高さ、改行を入れているので、少し嵩上げしている
sheet.PageSetup.TopMargin += 12;
こんなコードをEXCELブックのフォルダにぺーストしてダブルクリックするだけで
EXCELの資料の全シートにプロジェクト名とか会社名を入れるとか・・・実にくだらない仕事がサクっと進む。
注意点はネットドライブを割り当てておかないと、BAT系は全滅。