- ベストアンサー
Excelで作成した住所録にオートフィルタをかけ、ユーザーフォームで1件ずつ表示
エクセル2007を使用して住所録を作成しています。 一行に1名ずつの情報(各列に氏名など)が入るようになっています。 A列にリスト番号・B列に氏名、といった感じで作成しています。 一覧表示だと列の数が多く個別の内容が分かりにくいため、 ユーザーフォームを使って1件ずつ詳細を見られるようにしました。 ユーザーフォームに付けたコマンドボタン「次」を押すと 順番(住所録リストの上から順)に個別の内容が表示されるように したのですが、オートフィルタをかけてしまうと 非表示のリストもユーザーフォームに表示されてしまいます。 そこで、いくつかの参考書などを使って組んでみたのですが、 私の作ったものではコマンドボタン「次」を押すと オートフィルタで表示されている一番下の リストにユーザーフォームの内容が飛んでしまいます。 どのようにすれば、オートフィルタで表示されているリストのみを 順番にユーザーフォームに表示ができるのでしょうか? 私が作ったものです。↓ Private Sub cmd次_Click() Dim r As Range, rr As Range, rs As Range If Not Worksheets("名簿").AutoFilterMode Then データ行 = データ行 + 1 Else Set r = Worksheets("名簿").Range("A3", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) For Each rr In r For Each rs In rr.Areas データ行 = rs.Row Next rs Next End If 表示データ変更 End Sub このような質問で分かりにくいようでしたらすみません。 どなたかご教授いただければ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
次の非表示ではない(=表示されている)行を取得できればよいということですよね? Do データ行 = データ行 + 1 Loop Until Not Rows(データ行).Hidden でいけると思います。 最大行数に制限があるなどの場合は、判断条件にそれを追加してください。
その他の回答 (2)
- kmetu
- ベストアンサー率41% (562/1346)
Private Sub 進む_Click() Do ActiveCell.Offset(1, 0).Activate Loop Until Rows(ActiveCell.Row).Hidden = False TextBox1 = ActiveCell.Value End Sub Private Sub 戻る_Click() Do ActiveCell.Offset(-1, 0).Activate Loop Until Rows(ActiveCell.Row).Hidden = False TextBox1 = ActiveCell.Value End Sub でいかがでしょう
お礼
kmetu様 お返事が遅くなり申し訳ありません。 fujillin様の回答と組み合わせてアレンジし、 うまく組むことが出来ました。 しかも「戻る」のコードまで頂き、 とても助かりました。 ありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>どのようにすれば、オートフィルタで表示されているリストのみを順番にユーザーフォームに表示ができるのでしょうか? 簡単にできそうですがフィルタ中のリスト操作はVBAでも無理な事なのです・・・。 フィルタ結果を別シートにコピーして利用してください。
お礼
回答ありがとうございました。
お礼
fujillin様 お返事が遅くなり申し訳ありません。 必要に応じて多少のアレンジは致しましたが ご回答頂いたコードでうまく出来ました。 私が作ったものよりも簡潔で、非常に助かりました。 ありがとうございました。