Excel VBAで特定の列に特定の文字列があった場合にフィルターかけて印刷する方法

このQ&Aのポイント
  • ExcelのVBAを使って特定の列に特定の文字列がある場合にフィルターをかけて印刷する方法をご教示ください。
  • 具体的には、特定の列に地名が入力されており、その中に検索対象の文字列がある場合はその文字列をフィルターにかけて印刷を実行し、無い場合は印刷しないようにしたいです。
  • 上記のマクロを作成したのですが、希望通りの結果が得られません。どうすればよいでしょうか?
回答を見る
  • ベストアンサー

いつも参考にさせて頂いています。

いつも参考にさせて頂いています。 誰かご存知の方がいましたら教えて下さい。 Excelで特定の列に特定の文字列があった場合にフィルターをかけて 印刷を行うというものをVBAで作成しています。 具体的には 特定の列(A列)には各行(1行目~100行目)全てに 文字列(東京都や神奈川県などの地名。1つのセルに1つの地名が入力されている)が 入力されており、その中に検索対象の文字列がある場合と無い場合があります。 こういった状況でマクロを実行すると、検索対象の文字列があった場合は その文字列をフィルターにかけて印刷を実行、文字列が無かった場合は 印刷はしないということを行いたいのです。 下記のところまで作成したのですが 実行すると希望通りの結果が得られません・・・。 どうすればよいのかアドバイスをお願いします。 Sub 印刷() Dim FoundCell As Variant With Worksheets("Sheet1") Set FoundCell = .Range("A1:A100").Find("東京都") If FoundCell Is Nothing Then Else Selection.AutoFilter Field:=1, Criteria1:="東京都" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End If Set FoundCell = .Range("A1:A100").Find("神奈川県") If FoundCell Is Nothing Then Else Selection.AutoFilter Field:=1, Criteria1:="神奈川県" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End If End With End sub 宜しくお願いします。

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

  • ベストアンサー
noname#157410
noname#157410
回答No.2

私が試験してみた限りは、両方ちゃんと出ましたけど。 F8を押しながら、ステップデバック確認してみてはどうでしょうか? .AutoFilterMode = False あたりで、フィルター解除になっていないのでは?

menta2000
質問者

お礼

muri123さんのお陰で解決できました。 ありがとうございます。

その他の回答 (1)

noname#157410
noname#157410
回答No.1

参考までに、元のプログラムから変更して見ました。 Sheet1の1行目は空けておいてください。 Sub 印刷() Dim FoundCell As Object With Worksheets("Sheet1") Set FoundCell = .Cells.Find("東京都") If FoundCell Is Nothing Then Else Selection.AutoFilter Field:=1, Criteria1:="東京都" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End If .AutoFilterMode = False Set FoundCell = .Cells.Find("神奈川県") If FoundCell Is Nothing Then Else Selection.AutoFilter Field:=1, Criteria1:="神奈川県" ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End If .AutoFilterMode = False End With End Sub

menta2000
質問者

お礼

muri123さん ありがとうございます。 実際に印刷してみたのですが、『東京』は正しくフィルタがかかり 印刷されましたが、『神奈川』はなぜかフィルタがかからず 白紙のまま印刷されました・・・。 なぜでしょうか・・・

関連するQ&A

  • Microsoft Visual Basicについて質問します。

    シート名「委託内訳」でAN70がスペースの時に1ページのみ印刷し,スペースでない時に1~2ページを印刷したい時,下記のマクロでは2ページ目が印刷出来ません。 印刷できる方法は何かありますか? よろしくお願いします。 Sheets("委託内訳").Select Range("AN70").Select ActiveCell = ATAI If ATAI = "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Else ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _ :=True End If

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • VBAでA3サイズに印刷したい

    Sub Macro4() ' ' Macro4 Macro ' マクロ記録日 : 2007/5/23 ユーザー名 : Administrator ' ' Sheets("印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub マクロの自動作成でこのように作りました これをA4からA3に拡大印刷したいのですが、どのようにしたら良いのでしょうか教えてください、よろしくお願いします。

  • Excel VBA 印刷設定

    印刷ページ設定で ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=2, Collate :=True の式で、何ページまで印刷するかを、A1セルに入力して決定したいのですが、数式の書き方がわかりません。 A1に2と入力すれば、To:=2と認識するやり方を教えてください。 宜しくお願いします。

  • エクセル2007 メッセージボックスについて教えて下さい

    セルA1に"1"が入れば"b10~m60"を印刷(1ページ分)、 同様に、"2"が入れば"b61~m110"(2ページ分)、"3"が入れば"b111~m160"(2ページ分)を印刷する マクロボタンがあります。 現在、印刷を実行する前にメッセージボックスで「印刷します」→「OK」「キャンセル」の確認をしていますが このメッセージに、セルA1に入れた数値で確認したいのですができるでしょうか?? 例)セルA1="1"→MsgBox「1ページ印刷します」    セルA1="2"→MsgBox「2ページ印刷します」 分かりづらい説明で申し訳ありません。よろしくお願いします。 ↓現在の記述↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Sub test() If MsgBox("印刷します", vbOKCancel) = vbCancel Then Exit Sub End If Select Case Range("a1").Value   Case "1" ActiveSheet.PageSetup.PrintArea = "b10:m60" ActiveWindow.SelectedSheets.PrintOut Copies:=1  Case "2" ActiveSheet.PageSetup.PrintArea = "b61:m110" ActiveWindow.SelectedSheets.PrintOut Copies:=1   Case "3" ActiveSheet.PageSetup.PrintArea = "b111:m160" ActiveWindow.SelectedSheets.PrintOut Copies:=1  End Select End Sub

  • 指定する曜日の時に特定のエクセルファイルを印刷

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルの各シートを自動印刷して保存するVBAです。 ボタンが設置されているシートのK1には「TODAY()」の式が入っています。これは当日の日付を自動で表記する様になっています。 質問ですがボタンを押すと毎日印刷シート+K1に記入されている日付の曜日のシートのみを印刷するVBAはどの様にすれば良いでしょうか? 例えば今日(2016年9月10日)で言うと土曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+土曜日印刷のみ出力されると言う事です。 明日(2016年9月11日)は日曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+日曜日印刷シートのみが出力される形です。 よろしくお願いします。

  • 複数のシートをマクロで印刷

    印刷したい複数のシートをアクティブ状態にして以下のマクロを実行すると、余計に印刷されてしまいます。 Sub Test()  Dim ws As Worksheet  For Each ws In ActiveWindow.SelectedSheets   ActiveWindow.SelectedSheets.PrintOut _   Copies:=1, Collate:=True  Next ws End Sub 例えば、Sheet1とSheet2を選択して実行すると、Sheet1とSheet2が二部ずつ印刷されます。また、Sheet1とSheet2とSheet3を選択して実行すると、それぞれが三部ずつ印刷されます。 それぞれを一部ずつ印刷するためには、マクロをどう直せばいいでしょうか?

  • 毎月第一日曜と第一月曜の時のみ塗りつぶす方法

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close 「日曜日印刷」「月曜日印刷」各シートのAU25には=TODAY()が入力されています。 質問ですが各シートのAU25の日付が第一日曜日の時は「日曜日印刷」シートのCK48とAJ96のセルが塗りつぶされて、AU25の日付が第一月曜日の時は「月曜日印刷」シートのCK52とAV96が塗りつぶされる方法はどのようにしたら良いでしょうか?

  • Excel 2003 で、次のようなVBAを入力しています。

    Excel 2003 で、次のようなVBAを入力しています。 手動でも同じパスワードでシートの保護設定、解除をしたいのですが、 方法はありますか? ご教示よろしくお願いいたします。 ActiveSheet.Unprotect Password ="pass" 'シート保護解除 Selection.AutoFilter Field:=7, Criteria1:="<>" '項目「得意先名」が、「空白以外」を抽出 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True '印刷 Selection.AutoFilter Field:=7 '印刷範囲の解除 ActiveSheet.Protect Password="pass"

専門家に質問してみよう