Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 尝试使用VBA循环为空间相关记录创建键_Excel_Vba_Loops - Fatal编程技术网

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

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

因此,我脑海中浮现的是一个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列):


可以看出,如果您比我更了解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