• ベストアンサー

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   ・    ・   ・    ・   ・    ・ 今は目で見ながら毎日、オートフィルタでがんばっています。 これができるとすごくうれしいです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

わざわざVBAでやらなくてもB1に下記の様な式を入れてコピーしてやればいいですよ。 =COUNTIF(A$1:A1,A1)

goomod2
質問者

お礼

画像つきでわざわざありがとうございます! VBAでないとだめかな、と思いこんでいました。 助かりました、感謝感謝です。

その他の回答 (2)

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

ご希望の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

goomod2
質問者

お礼

さっそくの回答ありがとうございました。 ポイントは今回先着の方に差し上げますが、 本当は皆様に差し上げたいです。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

(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で(例)山田を順次捕らえて連番を振って行く手もある。 ソート方に持ち込むのが簡単になって賢明。

goomod2
質問者

お礼

countifでできるんですね、おっしゃいますように VBAでやらなければならないということはありません。 でもVBAも勉強中なので、コードは非常に参考になります。 ありがとうございました。