- ベストアンサー
excelでマクロを使用した連続印刷について
A2セルから通し番号、氏名、住所等のデータが入力されている「データ」シートがあり、 VLOOKUPを使用してB3セルに「データ」シートのA列にある「通し番号」を 入力すると氏名・住所等が反映される「印刷」シートがあります。 例えば「データ」シートのC列(住所)に「東京都」という文字列が 含まれている宛名のみを連続で印刷したい場合、 どのようなマクロになりますでしょうか? (マクロ内に「東京都」と指定する方法と、 シート内の特定セルに入力した文字列で指定する方法が ありますでしょうか?) wordでの差し込み印刷や、宛名ソフト等の使用は考えておりません。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 下の回答をしてから気付きましたが、#3のマクロだと該当するものが見つからない場合に、何も起こらないので入力者にはわかりませんね。すみませんでした。 以下の方が良いでしょう。 Sub test() Dim dst As Worksheet, irg As Worksheet Dim key As String, i As Long, cnt As Long Set dst = Worksheets(" データシート") '// データシート名を記入 Set irg = Worksheets("印刷用シート") '// 印刷用シート名を記入 key = InputBox("検索キーを入力してください。") If key = "" Then Exit Sub key = "*" & key & "*" cnt = 0 For i = 2 To dst.Cells(dst.Rows.Count, 3).End(xlUp).Row If dst.Cells(i, 3).Value Like key Then irg.Range("B3").Value = dst.Cells(i, 1).Value cnt = cnt + 1 irg.PrintPreview End If Next i key = "該当する住所はありませんでした。" If cnt > 0 Then key = Str(cnt) & "件の住所が該当しました。" MsgBox (key) End Sub
その他の回答 (3)
- fujillin
- ベストアンサー率61% (1594/2576)
#2です。 ・印刷シート内の利用可能なセルが不明ですので、検索用のキー入力はダイアログボックスからだけにしています。 ・検索方法は前回の方法のままですが、それでよければデータシートをオートフィルタしておく必要はありません。 ・マクロ内のシート名を正しく指定しておけば、起動用ボタンはブック内のどのシートにあってもかまいません。 ・印刷に関してはプレビュー表示のみを行っています。 キャンセルする場合はプレヴューの「閉じる」を、印刷する場合は「印刷」ボタンを押して印刷してください。 ・キャンセルした場合は、そのまま(印刷せずに)次の住所に進みます。 (印刷用シートの印刷範囲の設定等は、すでにされているものと仮定しています。) Sub test() Dim dst As Worksheet, irg As Worksheet Dim key As String, i As Long Set dst = Worksheets("DATA") '// データシート名を記入 Set irg = Worksheets("表示") '// 印刷用シート名を記入 key = InputBox("検索キーを入力してください。") If key = "" Then Exit Sub key = "*" & key & "*" For i = 2 To dst.Cells(dst.Rows.Count, 3).End(xlUp).Row If dst.Cells(i, 3).Value Like key Then irg.Range("B3").Value = dst.Cells(i, 1).Value irg.PrintPreview End If Next i End Sub
- fujillin
- ベストアンサー率61% (1594/2576)
「データ」シートからキーワードに合うものを抽出して、一旦「集計シート」に集計し、それを印刷するというイメージでよければ。 (式でも集計できそうですが、マクロとのご質問なのでマクロの回答です。=集計シートに集計するマクロ) データシート名・・・検索用のセルまでの情報を適宜設定してください。 データシート名、集計用シート名はそれぞれのシート名。データの範囲はデータ1セット(1行)の範囲(下の例ではA2~F2の範囲)。 集計用シートの開始番号は転記を開始する最初の行番号(下例では2行目から)。 検索用セルは検索キーを指定する場合はそのセル(下例ではA1セル)を、指定しなければ("")入力用ダイアログで指定するようになっています。 Sub test() Dim dst As Worksheet, key As String Dim drg As Range, irg As Range Dim i As Long, r As Long, r0 As Long Const d_name = "データ" '// データシート名 Const i_name = "集計" '// 集計用シート名 Const data_range = "A2:F2" '// データの範囲(1行分を例に指定) Const i_start = 2 '// 集計用シートの表示開始行番号 Const keycell = "A1" '// 検索用のセル(集計用シート)又はダイアログ Set dst = Worksheets(d_name) Set drg = dst.Range(data_range) If keycell = "" Then key = InputBox("検索キーを入力してください。") If key = "" Then Exit Sub Else Set irg = Worksheets(i_name).Range(keycell) key = irg.Value End If Worksheets(i_name).Cells.ClearContents If keycell <> "" Then irg.Value = key Set irg = Worksheets(i_name).Range(data_range) r0 = drg.Row r = i_start key = "*" & key & "*" For i = r0 To dst.Cells(dst.Rows.Count, 3).End(xlUp).Row If dst.Cells(i, 3).Value Like key Then irg.Offset(r - r0, 0).Value = drg.Offset(i - r0, 0).Value r = r + 1 End If Next i End Sub
お礼
ご回答いただき、ありがとうございます。 私の説明不足でした。申し訳ございません。 No.1の方へのお礼の通り、 ご教授いただいたマクロで、抽出された通し番号を連続で集計用シートに入力できたので、 集計用シートに一度通し番号をマクロで入力したあと、現在持っている 「集計用シートのA行の通し番号を印刷シートのB3セルに順に入力し、 プレビュー・印刷を繰り返す(抽出機能はなし)」 というマクロを使用することでやりたいことはできました。 これが一度で、別シートも作らずにできるとよいのですが…
- xls88
- ベストアンサー率56% (669/1189)
↓各セルをループして抽出するサンプルです。 Sub test東京都検索() Dim dcell As Range Dim fword As String fword = "東京都" '(1) For Each dcell In Range("C2:C10") MsgBox InStr(dcell.Value, fword) If InStr(dcell.Value, fword) = 1 Then '(2) MsgBox dcell.Offset(0, -2).Value End If Next End Sub コメント(1)のところでセルデータを使うなら fword = Range("A1").Value のようにします。 コメント(2)のところは If dcell.Value Like fword & "*" Then としてもOKでした。 オートフィルタで抽出しても良いかも知れません。 Range("$A$1:$H$10").AutoFilter Field:=3, Criteria1:="=東京都*", Operator:=xlAnd
お礼
ご回答いただき、ありがとうございます。 私の説明不足でした。申し訳ございません。 やりたいこととしては、 「データ」シートのC列(住所)を「東京都」を含むでオートフィルタしてヒットした行の通し番号をコピーし、 「印刷」シートのB3セルにペーストするとVLOOKUPが働いて氏名等が反映されるので それをプレビューして印刷(シートは1宛名で1枚)、 10行抽出されたならプレビュー・印刷を上から順に10回(枚)繰り返す。 という感じのものです。 コピーペーストでなくても抽出された通し番号が順に入ればよいです。 マクロ実行ボタンは「印刷」シートに置きたいです。 ご教授いただいたマクロでは、1行ずつヒットしなかったら0、 ヒットしたらその行の通し番号がメッセージで表示されるのみでした。 マクロについてはまだ、人のものをコピーして自分用に名前やセルを置き換えて使う程度のレベルで、 抽出のマクロとコピーペーストのマクロと連続印刷のマクロを 組み合わせられるほどに足りておりませんでした…
お礼
ご教授いただいたマクロでやりたいことができました! 迅速なご回答に感謝いたします。どうもありがとうございました。