①VBEの「ツール」から「参照設定」を押下
②必要なライブラリにチェックをつけて「OK」
①マクロを使えるようにする
「マクロを使えるようにする」を参照
②検索文字入力欄と検索ボタンを配置
③ボタン配置時の以下の画面で「マクロ名」を「SearchGoods」として「新規作成」を押す
④「Microsoft Visual Basic for Applications」にて以下のコードを記載
※表の形式に応じて「★」のついた箇所の数値を変更
Sub SearchGoods() '検索文字入力行・列 Dim searchValueRow As Integer: searchValueRow = 2 '★ Dim searchValueCol As Integer: searchValueCol = 2 '★ '検索対象列 Dim targetCol As Integer: targetCol = 3 '★ '検索開始行 Dim startRow As Integer: startRow = 5 '★ '検索終了行 Dim lastRow As Integer: lastRow = 9 '★ '半角文字で区切った検索文字を配列に格納 Dim searchValues() As String: searchValues = Split(Cells(searchValueRow, searchValueCol).Value, " ") '開始行から終了行までループ For i = startRow To lastRow Step 1 Dim val As Variant '半角文字で区切った検索文字でループ For Each val In searchValues '検索文字が含まれない場合は行を非表示にして次の行へ If InStr(Cells(i, targetCol).Value, val) = 0 Then Rows(i).Hidden = True GoTo Continue End If Next val '全ての検索文字が含まれる場合、または検索文字が何も入力されていない場合は '行を表示 Rows(i).Hidden = False Continue: Next End Sub
検索データの行数が増える場合は10行目のコードを以下のようにしておく事で、
追加した行数も考慮して最終行の取得が可能
Dim lastRow As Integer: lastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
まずは「印刷設定画面を起動する」を参照
「Application.Dialogs(xlDialogPrint).Show」メソッドに以下の引数を渡すことで初期値を設定可能
arg1 = 印刷範囲(1:すべて、2:ページ指定) arg2 = 開始 arg3 = 終了 arg4 = 部数 arg5 = 簡易印刷(0:しない、1:する) ※1:するにした場合は罫線などが表示されない arg6 = 印刷プレビュー(Excel5以降のVBAの場合機能しません。代わりにxlDialogPrintPreviewダイアログを使用してください。) arg7 = メモ印刷(1:シートとセルの値のみ、2:コメントも arg8 = カラー印刷※Mac用 arg9 = 紙送り(1:連続紙カセット用、2:カットシートまたは手動フィード)※Mac用 arg10 = 印刷品質(dpi) arg11 = 縦方向の解像度(dpi) arg12 = 印刷対象(1:選択した部分、2:ブック全体、3:選択したシート、4:テーブル) arg13 = プリンタ名 arg14 = ファイルへ出力(False:チェックOFF、True:チェックON) arg15 = 部単位で印刷(False:チェックOFF、True:チェックON)
●ソースコード(実装例) ※設定不要な部分は省略可
Sub 印刷ダイアログ() Application.Dialogs(xlDialogPrint).Show _ Arg1:=2, _ Arg2:=1, _ Arg3:=2, _ Arg4:=5, _ Arg5:=0, _ Arg6:=False, _ Arg7:=2, _ Arg8:=1, _ Arg9:=1, _ Arg10:=600, _ Arg11:=600, _ Arg12:=3, _ Arg13:="Microsoft Print to PDF", _ Arg14:=True, _ Arg15:=False End Sub
①マクロを使えるようにする
「マクロを使えるようにする」を参照
②ボタンを配置する(任意)
③マクロに名前を付けて「新規作成」を押す
④ソースコードを記載する
●ソースコード
Sub 印刷ダイアログ() Application.Dialogs(xlDialogPrint).Show End Sub
⑤ボタンを押すと以下の画面が起動するようになる
①名前リストのシートを用意
②印刷するシートを用意
※赤枠部分に「社員マスタ」シートの氏名を、印刷する1毎ごと切り替わるようにします。
③マクロを使えるようにする
「マクロを使えるようにする」を参照
④ボタンを配置する
⑤マクロに名前を付けて「新規作成」を押す
⑥ソースコードを記載して「Microsoft Visual Basic for Applications」画面を閉じる
●ソースコード
Sub 社員毎印刷() Dim LastRow As Long Dim i As Long Dim myNo As Long If vbNo = MsgBox("印刷を開始します。よろしいですか?", vbYesNo) Then Exit Sub '社員マスタシートを指定' With Worksheets("社員マスタ") '社員マスターシートA列の最終入力行を取得' LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '1行目から最終入力行までループ処理' For i = 1 To LastRow '1行ずつA列のNo.を取得' myNo = .Range("A" & i).Value '取得したNo.を日報シートのD3セルにセットし' '印刷を開始' 'B3セルにはD3セルを指定したVLOOKUP関数が仕込まれているため、社員マスタシートの名称が表示される。' With Worksheets("日報") .Range("D3").Value = myNo .PrintOut Copies:=1, Collate:=True End With Next i End With MsgBox "印刷が終了しました。" End Sub
⑦B3セルに「=IFERROR(VLOOKUP(D3,社員マスタ!A1:B13,2),””)」と入力
※⑥で記載したソースコードでD3セルに「社員マスタ」シートの番号が入ります。
その番号をもとに名前を表示するためこの関数を利用します。
⑧D3セルの文字を白にする
※D3セルに「社員マスタ」シートのNo.を埋め込んでいるのを隠すため