尝试使用VBA循环为空间相关记录创建密钥

时间:2013-06-13 15:54:56

标签: excel vba loops

所以我头脑中的是一个excel文件,由程序员创建了几十万行,没有分析/关系数据库的概念。这个文件基本上包含三个独立的表(A,B和C),每个表都有自己的字段集,所有字段都被嵌入到一个庞大的工作表中。

不是分配密钥,而是按位置将每个客户的所有记录分组在一起,每行所属的表在“表”列中标记为A,B或C.每条记录基本上看起来像:

Table    Field 1   Field 2    .......
A        X         X
B        X         X
B        X         X
B        X         X
C        X         X

每条记录最多只能有一个A和一个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'd)。

1 个答案:

答案 0 :(得分:0)

按照承诺回答我自己的问题。我对VBA很新,所以我确信有更优雅/更快的方式来做这个,并且仍然有兴趣看看它是什么。

Sub CreateID()
Dim rng As Range
Dim cell As Range
Dim firstcol As Range
Dim ID As Integer

ID = 1
counter = 1

Set rng = Range("B4:O100")
Set firstcol = Range("B4:B100")
For Each c In firstcol
    rng(counter, 14) = ID
    counter = counter + 1
    If c = "C" Then
        ID = ID + 1
    End If
Next c
End Sub