[EXCEL]ヘッダーとフッター

フッターに会社名を入れることが多い。
しかもシート数が半端なかったりすることも多いので・・・
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系は全滅。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA