- ベストアンサー
excelVBA 項目ごとに連番をふりたい
よろしくお願いします。 excelで連番を振りたいのですが、隣のセルに並んでいる 項目ごとに振りたいのです。VBAでできるでしょうか? 番号を振りたいのはB列で、名前ごとに1から順番に番号を 振りたいです。名前が変わるとまた1に戻って、振っていき、 A列がなくなると終了です。 A列の名前の数や、それぞれのデータ数、 全体のデータ数などは、ばらばらです。 もしかしたら列数はかわるかも知れませんが、 隣の列の項目ごとに番号を1から振る、ということは 変わりません。 (A列) (B列) 山田 1 山田 2 山田 3 田中 1 田中 2 田中 3 田中 4 佐藤 1 佐藤 2 加藤 1 斎藤 1 斎藤 2 斎藤 3 斎藤 4 斎藤 5 ・ ・ ・ ・ ・ ・ 今は目で見ながら毎日、オートフィルタでがんばっています。 これができるとすごくうれしいです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- ASIMOV
- ベストアンサー率41% (982/2351)
ご希望のVBAです --------------- Sub Mc1() Nb = 1 Cells(1, 2) = Nb ex = Range("A" & Rows.Count).End(xlUp).Row For i = 2 To ex If Cells(i, "A") = Cells(i - 1, "A") Then Nb = Nb + 1 Else Nb = 1 End If Cells(i, "B") = Nb Next End Sub
お礼
さっそくの回答ありがとうございました。 ポイントは今回先着の方に差し上げますが、 本当は皆様に差し上げたいです。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
(1)VBAでなくてもエクセル関数COUNTIFでできる。 VBAでやる事情があるのか。 (2)(1)の関数をVBA化することも可能。 Sub test01() d = Range("A65536").End(xlUp).Row For i = 1 To d c = WorksheetFunction.CountIf(Range("A1:A" & i), Cells(i, "A")) Cells(i, "B") = c MsgBox c Next i End Sub 例データ 堺 1 境 1 サカイ 1 堺 2 境 2 境 3 ーーー (3)名前列でソートして、直前の名前を、毎行において、見て A。同じなら前の番号(変数に保持する手もある。前行のB列セル)に+1 B変わったら1を 振れば仕舞いではないか。 (4)ソートしないなら、Find,FindNextで(例)山田を順次捕らえて連番を振って行く手もある。 ソート方に持ち込むのが簡単になって賢明。
お礼
countifでできるんですね、おっしゃいますように VBAでやらなければならないということはありません。 でもVBAも勉強中なので、コードは非常に参考になります。 ありがとうございました。
お礼
画像つきでわざわざありがとうございます! VBAでないとだめかな、と思いこんでいました。 助かりました、感謝感謝です。