資料室 > 印刷 > 表示するが印刷しない

表示するが印刷しない

以下の処理について解説する。

セル個別に「印刷時非表示」を設定する機能はない。
入力・表示する領域と印刷する領域を分離できるのであれば印刷する部分だけ選択し、
[ファイル(F)]>[印刷範囲(T)]>[印刷範囲の設定(S)]
とすることで、印刷する範囲を限定できる。が、どうしても同一レイアウト内での入力・表示と印刷時の非表示を両立させる必要がある場合には、通常、その都度非表示にするセルの書式を変更する方法が考えられるが、なるべく自動化する方法として以下のような方法が考えられる。

【『双子』の表を作る】

【手順】

  1. 画面に表示する内容を通常通り作成する。(仮にA1:H50の範囲とする)
  2. 作成した表範囲を選択して[編集(E)]>[コピー(C)]。
  3. 同じシートのなるべく画面に入らないセル(仮にAA1とする)を選択し、
     [編集(E)]>[形式を選択して貼り付け(S)]>[書式(F)]にチェックし[OK]
     (AA1:AH50の範囲に元表の書式のみが貼り付けられる)
  4. [編集(E)]>[形式を選択して貼り付け(S)]>[リンク貼り付け(L)]
     (AA1:AH50の範囲に元表へのリンク参照式が入力される)
  5. AA1:AH50の範囲で表示したくないセルの参照式をDELキーで削除。
  6. AA1:AH50の範囲を選択し、AA1をアクティブセルとした状態で[書式(O)]>[条件付書式(D)]
     条件の設定を[数式が][=A1=""]とし、[書式(F)]にてフォント色を背景色を同じとする。
  7. AA1:AH50の範囲を選択した状態で[ファイル(F)]>[印刷範囲(T)]>[印刷範囲の設定(S)]

【解説】

上記手順は次のことを意図している。

つまり、『双子』の表をを作り、双方の値をリンクさせることで入力・表示と印刷時の非表示を両立させることを意図している。ただし、上記の方法では書式設定まではリンクしていないので、書式変更が頻繁に行われるレイアウトには向いていないかもしれない。

【リンク図を重ねる】

【手順】

下記は入力セルを別に設ける方法である。

  1. 印刷したい範囲(仮にA1:H50とする)を選択した状態で[ファイル(F)]>[印刷範囲(T)]>[印刷範囲の設定(S)]
  2. 非表示としたいセル(仮にA1とする)を選択、[編集(E)]>[コピー(C)](コピー)
  3. 印刷範囲外のセル(仮にI1とする)を入力セルとし、[編集(E)]>[形式を選択して貼り付け(S)]>[書式(F)]にチェックし[OK]
  4. I1セルを選択、[書式(O)]>[列(C)]でI列の幅をA列の幅と同じサイズに設定
  5. I1セルを選択、[編集(E)]>[コピー(C)]
  6. A1セルを選択、Shiftを押しながら[編集(E)]>[図のリンク貼り付け(N)]
    (I1セルの画像をA1セル上に貼り付け)
  7. リンク図を選択、[書式(O)]>[図(I)]>[プロパティ]タブで[オブジェクトを印刷する(P)]のチェックをはずす。

【解説】

上記手順ではI1に入力した内容がA1に重ねたリンク図に表示される。
リンク図ダブルクリックでリンク元セルへジャンプすることが出来る。

【マクロ】

【手順】

印刷時に目的のセルを非表示とするような処理を割り込んで行うようなマクロを設定しておく方法。

  1. 目的のブックを開く。
  2. Alt+F11 でVBE(Visual Basic Editor)を起動 (メニュー[ツール(T)]>[マクロ(M)]>[VBE(V)])
  3. VBAPojectでブック名を確認し目的のブックのThisWorkbookモジュールをダブルクリック
  4. 表示されたコードウィンドウへ下記のコードをコピー、貼付、Alt+QでExcelにもどる。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim MyLocal() As Variant, i As Long, MyCount As Long
  With ActiveSheet
    If .Name <> "Sheet1" Then Exit Sub
    MyCount = .Range("A1:A10").Cells.Count
    ReDim MyLocal(MyCount - 1)
    For i = 1 To MyCount
      MyLocal(i - 1) = .Range("A1:A10").Cells(i).NumberFormatLocal
    Next i
    .Range("A1:A10").NumberFormatLocal = ";;;"
    Application.EnableEvents = False
    .PrintOut
    Application.EnableEvents = True
    Cancel = True
    For i = 1 To MyCount
      .Range("A1:A10").Cells(i).NumberFormatLocal = MyLocal(i - 1)
    Next i
  End With
End Sub

【解説】

上記マクロではSheet1という名前のシートのA1:A10の範囲のセルを印刷時に非表示とする。
上記サンプルでは「.PrintOut」という単純なコードを使用しているだけなので、シート既定の設定で一部のみ印刷される。(印刷ダイアログは表示されない)
このマクロ設定前に印刷の動作を「マクロの記録」で記録したものを利用するとよい。


前(印刷) 目次 次(見出しを各ページに自動的に印刷)


SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送