Excel 尝试使用VBA循环为空间相关记录创建键
因此,我脑海中浮现的是一个excel文件,其中有几十万行是由一个没有分析/关系数据库概念的程序员创建的。这个文件基本上包含三个单独的表(A、B和C),每个表都有自己的字段集,所有这些都被压缩成一个庞大的工作表 不是分配键,而是按位置将每个客户的所有记录分组在一起,每行所属的表在“表”列中标记为a、B或C。每个记录基本上如下所示:Excel 尝试使用VBA循环为空间相关记录创建键,excel,vba,loops,Excel,Vba,Loops,因此,我脑海中浮现的是一个excel文件,其中有几十万行是由一个没有分析/关系数据库概念的程序员创建的。这个文件基本上包含三个单独的表(A、B和C),每个表都有自己的字段集,所有这些都被压缩成一个庞大的工作表 不是分配键,而是按位置将每个客户的所有记录分组在一起,每行所属的表在“表”列中标记为a、B或C。每个记录基本上如下所示: Table Field 1 Field 2 ....... A X X B X X B
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列):
可以看出,如果您比我更了解VBA,那么这就是将列o中每个单元格的值设置为ID,并在ID每增加一次时继续更改每个单元格的值。此外,循环似乎并没有结束(在ID激增超过1000后,我按ctrl+break'd键)。返回,按照承诺回答我自己的问题。我对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
经过多次尝试和错误后,我发现:Sub CreateID()Dim rng As Range Dim cell As Range Dim firstcol As Range Dim ID As Integer ID=1计数器=1设置rng=Range(“B4:O10”)设置firstcol=Range(“B4:B100”)为firstcol rng(计数器,14)中的每个c设置firstcol=Range(“B4:B100”)=ID counter=counter+1如果c=“c”,那么ID=ID+1结束如果下一个c结束,你能把你的评论转换成答案吗?如果你自己的答案能解决你的问题,那么接受它是可能的(甚至是被鼓励的)。欢迎来到StackOverflow!我尝试过——作为一个新用户,它告诉我需要等8个小时才能回答我自己的问题。当它允许我的时候,我会回去做那件事。
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