- ベストアンサー
VBAでオートフィルタの抽出結果のみに付番するプログラムの書き方を教えて下さい。
すみませんが、どなたか知恵をお貸し下さい。 エクセルで、元となる表があり、オートフィルタをつけています。 そこで、条件により抽出した結果に1から表示個数だけの付番を1列目にしたいと考えています。 抽出した条件の個数を出す関数を既に表の中に表示しており、1からそのセル(A7)の値まで番号をふる・・・ というようなプログラムの書き方で何かいい方法はないでしょうか? (別の方法でも構いません) いろいろとプログラムを書いて実行してみたのですが、どの方法も、どうしても、 表示していないところまで(条件に合わないところ)付番されてしまって困っています。 私のパソコンのスキル的には、ある程度のマクロなら分かります。 関数もほぼ理解できていると思います。 どうか、皆さんのご意見をお聞かせ下さい。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例データ A列 B列 C列(A列は空白列とする。 コード 計数 a 1 s 2 d 3 a 4 d 5 f 1 s 2 a 3 a 4 d 5 ーー コード Sub Macro1() Dim Num As Long, lRow As Long Num = 1 Range("B:B").AutoFilter Range("B:B").AutoFilter Field:=1, Criteria1:="a" lRow = Range("B1").CurrentRegion.SpecialCells(xlLastCell).Row MsgBox lRow Range(Cells(2, "B"), Cells(lRow, "B")).SpecialCells(xlVisible).Select For Each Cel In Selection Cel.Offset(, -1).Value = Num Num = Num + 1 Next End Sub ーー 結果 コード 計数 1 a 1 2 a 4 3 a 3 4 a 4 (オートフィルタのモードで)
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
元の表形式が不明なので憶測ですけど。 オートフィルタ後でB列には値があり、B列の表示されている行と同行のA列にナンバーをつける。 ただし1行目は項目行として、範囲はB2以下B列の最終行までの表示されている部分とする。 Dim r As Range, rr As Range Dim i As Long Set r = Range("B2", Cells(Rows.Count, 2).End(xlUp)).SpecialCells(xlCellTypeVisible) For Each rr In r i = i + 1 rr.Offset(, -1).Value = i Next ご参考になれば。
お礼
n-jun様 お忙しい中、私の説明不足にもかかわらず、迅速にご回答頂きありがとうございましたm(_ _)m お二人とも、やはり同じような考え方のプログラムだったので、読んでいてとても参考になりました。 (もう一人の方の方がたくさん回答してくださったので、すみませんがn-jun様を良回答10Pとさせて頂きました(>_<) 親切にして頂いたのにほんとうにすみません・・・) 皆様の貴重なご意見を参考に、自分で作成した表に当てはめ、見事問題はクリアとなりましたヽ(´▽`) 本当にありがとうございました。 とても親切に、しかも迅速にご回答頂き、とても嬉しかったですo(^-^)o また、お世話になることがあるかもしれませんが、今後ともヨロシクお願い致します。 本当にありがとうございましたm(_ _)m
お礼
imogasi様 お忙しい中、ご丁寧にご回答頂きありがとうございましたm(_ _)m とても、参考になりました。 プログラムを読んで、なるほど!難しく考えなくても、B列に表示があるとき、A列に番号をふるというのを Offset(, -1)を使って書けばいいのかととても勉強になりましたヽ(´ー`)ノ 皆様の貴重なご意見を参考に、自分で作成した表に当てはめ、見事問題はクリアとなりましたヽ(´▽`) 本当にありがとうございました。 やはり、このサイトで回答してくださる方は、とても親切でレベルが高い方ばかりですねo(^-^)o また、お世話になることがあるかもしれませんが、今後ともヨロシクお願い致します。 本当にありがとうございましたm(_ _)m