1

所以我脑子里有一个 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)。

4

1 回答 1

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
于 2013-06-14T13:48:37.247 回答