- ベストアンサー
Excel 条件を判別してオートナンバー
下記のようなシートがある場合 A B 1 1 2 1 3 1 4 2 5 2 6 2 A列を判定してB列に以下のようにナンバーをふりたい。 A B 1 1 1 2 1 2 3 1 3 4 2 1 5 2 2 6 2 3 関数、VBAどちらでもいいのでご教授願います。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
皆さんの回答に少し足すことで可能です。 B1は先頭なのでAがあるか確認するだけなので、「=IF(A1="","",1)」とします。 B2以降は=IF(A3="","",IF(A3=A2,B2+1,1))となります。 VBAでコードを記述する場合は下記のように、コードを記述することで、式を埋め込めます。 (直接値を編集してもいいでしょうどね) ----ボタンをおした時に列50まで式を埋め込む例---- Private Sub CommandButton1_Click() Dim objRange As Range Set objRange = Me.Range("A1") Do Until objRange.Row > 50 If objRange.Row = 1 Then objRange.Offset(0, 1).Value = "=IF(A" & CStr(objRange.Row) & "="""","""",1)" Else objRange.Offset(0, 1).Value = "=IF(A" & CStr(objRange.Row) & "="""","""",IF(A" & CStr(objRange.Row) & "=A" & CStr(objRange.Row - 1) & ",B" & CStr(objRange.Row - 1) & "+1,1))" End If Set objRange = objRange.Offset(1, 0) Loop Set objRange = Nothing End Sub
その他の回答 (6)
- mar00
- ベストアンサー率36% (158/430)
セルB1に1を入力して セルB2に=IF(A2=A1,B1+1,1) あとは数式をコピーすれば出来ると思います。
- layy
- ベストアンサー率23% (292/1222)
関数というより数式? >A列はソートまで完了している段階です。 といいつつ >・A列に数値がない場合はB列に対してなにもしない というのはどうか?。 値が無くなったら最終行では?、 もしくは、途中に文字でもあるか?。 >・A列に数値が入ってる場合にB列にNoを入れたい >かつ >・A列が同じ数値の場合はB列はNoを1から順番に入れたい VBAでというからには多少の知識はあるとみたが、 この何がわからないのか、わからない。 カウントすることと前行との比較、他なんだろう?。 数式や関数でなくVBAでセル1つずつ判定を行ないたいのなら、 コントロールブレイクや順位付け、ソート、これらを学ぶ。 仕様=質問であるので、 省略しすぎないできちんと意図を伝えることも大事。 だからと言ってすべてを質問で教える必要はない、 要点だけのやりとり(=意図だけ)でもわかる人にはわかる。
- imogasi
- ベストアンサー率27% (4737/17069)
質問の書き方が不完全。ないしは例が少なすぎるか、読者がどう取るか想像力の欠如。 A列の値(例えば1)がまた第3行より下で、あとで出現するのかどうか。 また途切れて後に、1の続きの塊が出てくるのか?出てきたとき振る番号は? ばらばらで出てくると、ソートしないと、VBAでも難しいのだ。
- mu2011
- ベストアンサー率38% (1910/4994)
NO2です。 >・A列に数値がない場合はB列に対してなにもしない =IF(A1<>"",COUNTIF($A$1:A1,A1),"")
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 B1に=COUNTIF($A$1:A1,A1)を入力、下方向にコピーで如何でしょうか。
お礼
回答ありがとうございます。 A列が”1”なら1~順番にB列に数値が入るのですが A列が”2”になった場合、又1~順番にB列に数値が入るようにできますか? よろしくお願いします。
- kybo
- ベストアンサー率53% (349/647)
A列のデータは昇順でソートされているみたいなので、 B1にとりあえず、「1」といれ、 B2以降には「=IF(A1=A2,B1+1,1)」という数式を入れ、下へコピーして下さい。
補足
早速の回答ありがとうございます。 A列はソートまで完了している段階です。 ・A列に数値が入ってる場合にB列にNoを入れたい かつ ・A列が同じ数値の場合はB列はNoを1から順番に入れたい ・A列に数値がない場合はB列に対してなにもしない このような条件で関数、VBAを考えています。 質問内容が漠然としていてすいません。
お礼
大変参考になりました。 おかげさまで問題の解決ができました。 ありがとうございます。