• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelのマクロにおいて、期間指定で印刷範囲の設定方法)

Excelのマクロで特定の期間の印刷範囲を設定する方法

このQ&Aのポイント
  • Excelのマクロを使用して、特定の期間以外のセルを印刷範囲から除外する方法について教えてください。
  • 指定した期間のセルを印刷範囲として設定し、期間外のセルを除外する方法を教えてください。
  • Excelのマクロで、指定した期間以外のセルを印刷範囲から外す方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

要件が例示通り単独セルのみの印刷制御でしたら、 セルに拘らずTextBoxを活用するのも一つの手です。 C1セルに入力するのではなく、TextBoxを被せておくと '【ThisWorkbookモジュール】 Option Explicit Private Sub Workbook_Open()  On Error Resume Next  Sheets("Sheet1").TextBoxes("Text Box 1").PrintObject _   = (#7/1/2010# <= Date) And (Date <= #10/31/2010#)  On Error GoTo 0 End Sub こんな感じでPrintObjectプロパティを使う事で制御できます。 セル入力と連動させたいならちょっと工夫が必要になりますが。 '【ThisWorkbookモジュール】 Option Explicit Private Sub Workbook_Open()  On Error Resume Next  Sheets(sName).TextBoxes(tName).PrintObject _   = (fromDate <= Date) And (Date <= toDate)  On Error GoTo 0 End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, _                  ByVal Target As Range)  With Sh   If .Name = sName Then    If Not Intersect(.Range(cAdrs), Target) Is Nothing Then     Call TboxChk    End If   End If  End With End Sub '【標準モジュール】 Option Explicit '対象となるシート名とTextBox名などを定数で設定しておく。 Public Const sName = "Sheet1" Public Const tName = "textbox_C1" Public Const cAdrs = "C1" Public Const fromDate As Date = #7/1/2010# Public Const toDate As Date = #10/31/2010# Sub TboxChk()  Dim tb As TextBox  With Sheets(sName)   Set tb = SetTbox(tName)   With .Range(cAdrs)    With .Font     tb.Font.Name = .Name     tb.Font.Size = .Size     tb.Font.FontStyle = .FontStyle    End With    tb.Left = .Left    tb.Top = .Top    tb.Width = .Width    tb.Height = .Height    tb.Text = .Text    Application.EnableEvents = False    .ClearContents    Application.EnableEvents = True   End With  End With  Set tb = Nothing End Sub Function SetTbox(ByVal setName As String) As TextBox  Dim tb As TextBox  With Sheets(sName)   On Error Resume Next   Set tb = .TextBoxes(setName)   On Error GoTo 0   If tb Is Nothing Then    Set tb = .TextBoxes.Add(0, 0, 0, 0)    tb.Name = setName    tb.Border.LineStyle = xlNone    tb.Placement = xlMoveAndSize    tb.PrintObject = False   End If  End With  Set SetTbox = tb End Function

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

マクロの質問として、 VBAを云々する前に、質問者は、エクセルの機能はどうか、と理詰めで先に考えてみる必要があるレベルでしょう。 シートにデータがあって印刷したとき、印刷物に出てこないようにするにはどういう方法があるか? (1)非表示にして印刷する 列幅、行高を0にするのも同じ。 行、列は全体なら非表示が出来るが、セルは非表示にする仕組みがない。 印刷後元に戻す必要があれば元に戻す。 (2)文字色を白色(正確には背景色)にして印刷 印刷後書式は元へ戻しておく。 (3)別シートに、印刷したいデータ(含む書式)を移し、そのシートを印刷する。 印刷後、この作業シートはクリアしておく。 ーーー 本件は印刷しないのが1セルだけらしいから、(2)か(3)しかない。 ーー (2)の方法は (A)該当期間かどうかを聞いて、VBAコードで文字色を白色にする。 (B)条件付き書式で、期間限定を「数式が」の数式に組み込んで文字色を白色に設定する の方法が考えられる。 元へ戻しておく必要があるらしいから(A)しかないだろう。 >印刷範囲から外したい これを正面から取り上げた、エクセルの機能(指定方法)は無いよ。 エクセルを良く勉強しないと便利なものが(ひょっとして)あるような気がするものだが、ほとんど無いものだ。前記の方法も、やりくりしているだけ

すると、全ての回答が全文表示されます。
  • fujiponxx
  • ベストアンサー率32% (186/580)
回答No.3

>ActiveSheet.PageSetup.PrintArea = "$A$1:$G$13" こんな感じで印刷範囲していできるっぽいですが、 >ActiveWindow.SelectedSheets.PrintOut Copies:=1 印刷前に、期間を判定して範囲指定してから印刷すればいいと思います。 マクロの記録でちょっとやってみただけですが。

すると、全ての回答が全文表示されます。
回答No.2

Workbook_BeforePrintで印刷前に特定の処理が行えます

すると、全ての回答が全文表示されます。
回答No.1

日付でフィルターを行って、文字色をnull つまり背景色にする方法ではだめですか?

yuuta8455
質問者

お礼

ご回答ありがとうございます。 それだと、Nullにしたセルの文字列は見えないですよね? 出来れば視覚的に見えている状態が良かったのですが、それしか方法が無いんですかね。。

すると、全ての回答が全文表示されます。