|    | 
     ▼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 
 | 
     
    
   |