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