頭に浮かぶのは、分析・リレーショナルデータベースの概念のないプログラマーが作成した数十万行のExcelファイルです。このファイルには基本的に、3 つの別個のテーブル (A、B、および C) が含まれており、それぞれに独自のフィールド セットがあり、すべてが 1 つの巨大なワークシートにまとめられています。
キーを割り当てるのではなく、各顧客のすべてのレコードを位置別にグループ化し、各行が属するテーブルを「テーブル」列で A、B、または C としてタグ付けします。各レコードは基本的に次のようになります。
Table Field 1 Field 2 .......
A X X
B X X
B X X
B X X
C X X
レコードごとに最大 1 つの A と 1 つの C が常に存在します。すべてのレコードに A の行はありませんが、常に C があります。新しいレコードは常に、各 C 行の後に開始されます。VB はこのタスクに最適な選択ではないかもしれませんが、当面の暫定的な解決策を得たいだけです。これは、これまでのコードでの私の試みでした (テーブル インジケーターは列 B にあり、ID を列 O に書き込みたい):
Sub CreateID()
Dim rng As Range
Dim cell As Range
Dim lastcol As Range
Dim firstcol As Range
Dim ID As Integer
ID = 1
Set rng = Range("B4:O100")
Set firstcol = Range("B4:B100")
Set lastcol = Range("O4:O100")
For Each cell In rng
For Each c In firstcol
With lastcol
lastcol.Value = ID
End With
If c.Value = "C" Then
ID = ID + 1
End If
Next c
Next cell
End Sub
あなたが VBA を私よりもよく知っているかどうかわかるように、これは列 o のすべてのセルの値を ID に設定し、ID が 1 増加するたびにすべてのセルの値を変更し続けます。さらに、ループが終了していないようです (ID が 1000 を超えた後、ctrl+break しました)。