| 
    
     |  | ▼YN61 さん: こんばんは、YN61さんの疑問点をよく読み直してわかりました。オートフィルタとは元データシートに検索をかけたとき検索されたセル行だけが明示的に表示され、それ以外のセルデータは表示はされないが、元データシートには残っているということなんですね。そのような場合は私が先に回答したVBAコードではセル範囲の自動取得が元データシートのセル範囲と同じくなってしまいYN61さんの処理したい結果とはとは違ってしまいます。
 それで、検索して合致したデータのセル範囲のみを自動取得して、検索結果を単に「宛名印刷」シートのE1セルを始点にして検索データの出力をしたいということであれば、下記のVBAコードではどうでしょうか?
 
 Sub 葉書宛名差込印刷()
 'Dim 番号 As Long
 'Dim 最初行 As Long
 'Dim 最終行 As Long
 Dim myLastRow As Long  '最終行を格納する変数
 Dim myLastCol As Integer '最終列を格納する変数
 Dim i As Long      '行を格納する変数
 Dim j As Integer     '列を格納する変数
 Dim iRow As Long     '検索された行
 Dim strSearch As String '検索文字列
 Dim strNo As String   '顧客No.
 Dim strName As String  '顧客名前
 Dim strAddress As String '顧客住所
 
 '------ワークシート「宛名印刷」の1行目以下を消去する-----------------
 Sheets("宛名印刷").Select
 Worksheets("宛名印刷").Range("1:64000").Rows.Delete
 '------ワークシート「顧客リスト」のセル範囲を取得する----------------
 Worksheets("顧客リスト").Activate
 Call RowColumn(myLastRow, myLastCol)
 '最終行 = myLastRow
 '最初行 = 2
 '------顧客住所の検索と検索結果のワークシート「宛名印刷」への出力----
 strSearch = InputBox("絞り込みたい顧客の住所を入力して下さい!")
 iRow = 0
 For i = 2 To myLastRow
 If strSearch = Worksheets("顧客リスト").Cells(i, 3) Then
 strNo = Worksheets("顧客リスト").Cells(i, 1)
 strName = Worksheets("顧客リスト").Cells(i, 2)
 strAddress = Worksheets("顧客リスト").Cells(i, 3)
 iRow = iRow + 1
 Worksheets("宛名印刷").Cells(iRow, 5) = strNo
 Worksheets("宛名印刷").Cells(iRow, 6) = strName
 Worksheets("宛名印刷").Cells(iRow, 7) = strAddress
 Else
 End If
 Next i
 '-----ワークシート「宛名印刷」の内容印刷-----------------------------
 Worksheets("宛名印刷").Activate
 Worksheets("宛名印刷").PrintOut
 End Sub
 
 Sub RowColumn(myLastRow, myLastCol)
 With ActiveSheet.UsedRange
 myLastRow = .Rows(.Rows.Count).Row
 myLastCol = .Columns(.Columns.Count).Column
 End With
 End Sub
 
 |  |