
いつもお世話になっております。
同じ商品ごとに連番を振りたいのです。
下記のコードは同じ商品ごとに
同じ番号をふっています。
これを連番にしたいのです。
添付したファイルのように
A列 商品
B列 商品ごと同じ番号
C列 同じ商品ごとに連番
わかる方おしえてくれませんでしょうか
よろしくお願いいたします。
Sub 同じデータに同じ連番をふる()
Dim DicName As Variant
Dim i As Long
Dim j As Long
Dim Cnt As Long
Dim LastRow As Long
Dim GetName As String
Dim myKey As Variant
Set DicName = CreateObject("Scripting.Dictionary")
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
GetName = Cells(i, 1)
If Not DicName.Exists(GetName) Then
DicName.Add GetName, GetName
End If
Next i
myKey = DicName.Keys
Cnt = 1
For i = 0 To UBound(DicName.Items)
For j = 1 To LastRow
If Cells(j, 1) = myKey(i) Then
Cells(j, 2) = Cnt
End If
Next j
Cnt = Cnt + 1
Next i
Set DicName = Nothing
End Sub

No.3ベストアンサー
- 回答日時:
No.1です。
VBAの方法をご希望だというコトなので・・・
お示しのコードに近い形にしてみました。
Sub Sample2()
Dim myDic As Object
Dim i As Long
Dim lastRow As Long
Dim myStr As String
Dim myR
Set myDic = CreateObject("Scripting.Dictionary")
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
'//▼範囲を配列に格納//
myR = Range(Cells(2, "A"), Cells(lastRow, "C"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 2)
If Not myDic.exists(myStr) Then
myDic.Add myStr, 1
Else
myDic(myStr) = myDic(myStr) + 1
End If
myR(i, 3) = myDic(myStr)
Next i
'//▼セルに一気に吐き出す//
Range(Cells(2, "A"), Cells(lastRow, "C")) = myR
Set myDic = Nothing
End Sub
※ A列とB列は必ず「対」になっているという前提です。
仮にA列が「バナナ」であっても、B列が「2」であれば別物とみなされます。m(_ _)m
No.2
- 回答日時:
同じグループは必ず1つのかたまりになっていますか。
(提示された図はそのように見えます)
それとも
2行 バナナ
3行 みかん
4行 バナナ
5行 バナナ
のように1つのかたまりになっていないケースもありますか。
No.1
- 回答日時:
こんにちは!
関数ではダメですか?
画像の配置だとC2セルに
=COUNTIFS(A$2:A2,A2,B$2:B2,B2)
という数式を入れフィルハンドルでダブルクリック!
これでできると思います。
どうしてもVBAでやりたい!というコトであれば
関数をそのまま使うのが一番簡単だと思います。
Sub Sample1()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Range(Cells(2, "C"), Cells(lastRow, "C"))
.Formula = "=COUNTIFS(A$2:A2,A2,B$2:B2,B2)"
.Value = .Value
End With
End Sub
こんな感じで・・・
※ データ量が極端に多い(数万行)の場合は
お示しのようなVBAで配列で処理すればほとんど時間を要しないと思います。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
excelVBA 項目ごとに連番をふりたい
Excel(エクセル)
-
エクセル グループ毎に番号(連番)を振りたいです。但し、同じデータには同じ番号を振りたいのです。
Excel(エクセル)
-
Excel VBAで条件ごとの自動採番について
Excel(エクセル)
-
-
4
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
5
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
6
EXCELマクロで、シート間でのコピーペーストを繰り返す方法
Excel(エクセル)
-
7
Excel VBA 自動で連番をわりふる
Excel(エクセル)
-
8
条件を指定して連番を振る方法(エクセル)
Excel(エクセル)
-
9
ExcelのVBAで連番を振る。
Excel(エクセル)
-
10
アクティブになっている行をマクロで削除したい
Excel(エクセル)
-
11
Access-VBAのPublic変数について =基本的な事です=
Visual Basic(VBA)
-
12
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
13
Accessで条件が2つのグループに連番をふる
Access(アクセス)
-
14
【VBA】特定の文字列を含む場合、列ごとコピーし最終列の隣に形式を選択して貼り付ける方法
Visual Basic(VBA)
-
15
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
16
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
17
エクセルVBA 作業後に選択範囲を解除する方法
Excel(エクセル)
-
18
Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のExcelファイルをマージす...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
エクセルの改行について
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
Vba FileSystemObject オブジェ...
-
VBA ユーザーフォーム ボタンク...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBA 入力箇所指定方法
-
vb.net(vs2022)のtextboxのデザ...
-
[Excel VBA]特定の条件で文字を...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】開いているブックの...
-
エクセルのマクロについて教え...
-
VBA 最終行の取得がうまくいか...
-
Excel マクロについて詳しい方...
-
エクセルのVBAコードと数式につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報
tom04様
検索しましたら下記のコードありました。
これを改良版でお願いできますでしょうか。
急いでないのでわたしも考えます
お願いできますでしょうか。
Set myDic = CreateObject("Scripting.Dictionary")
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(Cells(1, "G"), Cells(lastRow, "G"))
For i = UBound(myR, 1) To 1 Step -1
文字数の制限のため2回にわけました。
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), 1
myR(i, 1) = myR(i, 1) & "(1)"
Else
myDic(myR(i, 1)) = myDic(myR(i, 1)) + 1
myR(i, 1) = myR(i, 1) & "(" & myDic(myR(i, 1)) & ")"
End If
Range(Cells(1, "G"), Cells(lastRow, "G")) = myR
Set myDic = Nothing
はい一度ソートかけてやります。
2行 バナナ
3行 みかん
4行 バナナ
5行 バナナ
このような形です