• ベストアンサー

excelでマクロを使用した連続印刷について

A2セルから通し番号、氏名、住所等のデータが入力されている「データ」シートがあり、 VLOOKUPを使用してB3セルに「データ」シートのA列にある「通し番号」を 入力すると氏名・住所等が反映される「印刷」シートがあります。 例えば「データ」シートのC列(住所)に「東京都」という文字列が 含まれている宛名のみを連続で印刷したい場合、 どのようなマクロになりますでしょうか? (マクロ内に「東京都」と指定する方法と、 シート内の特定セルに入力した文字列で指定する方法が ありますでしょうか?) wordでの差し込み印刷や、宛名ソフト等の使用は考えておりません。 よろしくお願いいたします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.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

tyama95
質問者

お礼

ご教授いただいたマクロでやりたいことができました! 迅速なご回答に感謝いたします。どうもありがとうございました。

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#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)
回答No.2

「データ」シートからキーワードに合うものを抽出して、一旦「集計シート」に集計し、それを印刷するというイメージでよければ。 (式でも集計できそうですが、マクロとのご質問なのでマクロの回答です。=集計シートに集計するマクロ) データシート名・・・検索用のセルまでの情報を適宜設定してください。 データシート名、集計用シート名はそれぞれのシート名。データの範囲はデータ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

tyama95
質問者

お礼

ご回答いただき、ありがとうございます。 私の説明不足でした。申し訳ございません。 No.1の方へのお礼の通り、 ご教授いただいたマクロで、抽出された通し番号を連続で集計用シートに入力できたので、 集計用シートに一度通し番号をマクロで入力したあと、現在持っている 「集計用シートのA行の通し番号を印刷シートのB3セルに順に入力し、 プレビュー・印刷を繰り返す(抽出機能はなし)」 というマクロを使用することでやりたいことはできました。 これが一度で、別シートも作らずにできるとよいのですが…

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

↓各セルをループして抽出するサンプルです。 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

tyama95
質問者

お礼

ご回答いただき、ありがとうございます。 私の説明不足でした。申し訳ございません。 やりたいこととしては、 「データ」シートのC列(住所)を「東京都」を含むでオートフィルタしてヒットした行の通し番号をコピーし、 「印刷」シートのB3セルにペーストするとVLOOKUPが働いて氏名等が反映されるので それをプレビューして印刷(シートは1宛名で1枚)、 10行抽出されたならプレビュー・印刷を上から順に10回(枚)繰り返す。 という感じのものです。 コピーペーストでなくても抽出された通し番号が順に入ればよいです。 マクロ実行ボタンは「印刷」シートに置きたいです。 ご教授いただいたマクロでは、1行ずつヒットしなかったら0、 ヒットしたらその行の通し番号がメッセージで表示されるのみでした。 マクロについてはまだ、人のものをコピーして自分用に名前やセルを置き換えて使う程度のレベルで、 抽出のマクロとコピーペーストのマクロと連続印刷のマクロを 組み合わせられるほどに足りておりませんでした…