excel - VBA中难以控制的时间循环
问题描述
我有一张超过 20,000 行的员工表。他们所有的 SSN 都在 Y 列中。每个人的行数未知。L 列中包含月份 # 的 1-12。数据从第 8 行开始。我在开始时将 DataRow 设置为 8。文件按 SSN 排序。我要做的是在“输出”选项卡的 AJ 到 AU 列中写一个“Y”,以表示员工在 L 列中是否有该月的一行。这很有效。
我的问题是我需要遍历每个员工,跟踪“原始数据”选项卡上的每条记录以获取一个行数,但要知道 SSN 何时更改,以便在写入“输出”选项卡时增加 OutputRow。我对大多数 VBA 结构都很满意。
但我有一个逻辑问题。使用 Do While 或 Do Until 并比较各行之间的 SSN 仅获取一名员工的记录,然后结束。如果我使用 For Each 或 For Next,我仍然需要比较记录之间的 SSN 以确定它们何时更改。
这是相关的代码。为简洁起见,我缩短了案例陈述列表。我真的不需要代码语法帮助。(好吧,我对数组一无所知。)我只是陷入了设计这个狭窄的方式。我确信有更好的方法我没有考虑。你有什么建议?
Do Until IsEmpty(Sheets("Orig Data").Range("A" & DataRow + 1)) = True
Do While Sheets("Orig Data").Range("Y" & DataRow) = Sheets("Orig Data").Range("Y" & DataRow - 1)
Select Case Range("L" & DataRow).Value
Case "1"
Sheets("Output").Range("AJ" & OutputRow) = "Y"
Case "2"
Sheets("Output").Range("AK" & OutputRow) = "Y"
Case "3"
Sheets("Output").Range("AL" & OutputRow) = "Y"
End Select
DataRow = DataRow + 1
Loop 'until changes person
DataRow = DataRow + 1
OutputRow = OutputRow + 1
Loop 'until Blank
我的意图是将记录写入“输出”选项卡,该选项卡的末尾附加了 12 列。我最终应该为每个员工创建一份记录。当作为一次性提供程序接口的一部分完成时,我们将通过此过程运行多个文件。
解决方案
敲了敲我的头,走了一会儿,我就可以开始工作了。我就是只见树木不见森林。我只需要进行一些重组并依靠 IF 语句来进行一些检查。对于那些真正注重细节的人,是的,Case 语句中有列更改,因为我发现一列不会出现在最终文件中。这就是它的样子:
Do Until IsEmpty(Sheets("Orig Data").Range("A" & DataRow + 1)) = True
Select Case Range("K" & DataRow).Value
Case "1"
Sheets("Output").Range("AI" & OutputRow) = "Y"
Case "2"
Sheets("Output").Range("AJ" & OutputRow) = "Y"
Case "3"
Sheets("Output").Range("AK" & OutputRow) = "Y"
End Select
If Sheets("Orig Data").Range("Y" & DataRow) <> Sheets("Orig Data").Range("Y" & DataRow + 1) Then
OutputRow = OutputRow + 1
DataRow = DataRow + 1
Worksheets("Orig Data").Range("A" & DataRow & ":AH" & DataRow).Copy Worksheets("Output") _
.Range("A" & OutputRow & ":AH" & OutputRow)
Else
DataRow = DataRow + 1
If IsEmpty(Sheets("Orig Data").Range("A" & DataRow + 1)) = True Then
MsgBox "Done"
Exit Sub
End If
End If
Loop