dポイントプレゼントキャンペーン実施中!

よろしくお願いします。
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
  ・    ・
  ・    ・
  ・    ・


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

A 回答 (3件)

わざわざVBAでやらなくてもB1に下記の様な式を入れてコピーしてやればいいですよ。



=COUNTIF(A$1:A1,A1)
「excelVBA 項目ごとに連番をふりた」の回答画像1
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/08 09:01

ご希望の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
    • good
    • 2
この回答へのお礼

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

お礼日時:2009/12/08 09:04

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

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

お礼日時:2009/12/08 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A