【发布时间】:2019-03-25 15:21:47
【问题描述】:
1) 在 Excel 中编写一个语句,该语句将插入行并填充缺失任何时间的天数的缺失数据。 “DATE_HR”中的小时数应为 00-23(24 小时制)。
和
2) 对于在“DATE_HR” (DD-MMM-YYYY-HH) 下列出的小时数,缺少“0”(即“班级”中的 NDG)“1-4”、“GR”、和/或“CLASSIFICATION”中的“SB”,对于任何给定的小时,编写一个语句,该语句将在所有小时中插入并填充缺失的行,其中缺少“CLASSIFICATION”、“Class”、“DATE_HR”和“Total”(缺少的“TOTAL”行值应该为零,因为缺少的数据没有条目)。
下面是程序需要做的一个例子。左边是缺失数据表(之前),右边是校正表(之后),黄色为1,蓝色为2
-这是我到目前为止的进展:
我已经为这个问题编写了伪代码,并开始在 excel VBA 中编写。这是伪代码:
SR = Selected_row
RA = Row_above
C = Classification
DT = Date & Time
IR=Insert_row
# = Any number 1-4
Start on seleted row
Loop statement:
= IF(SRC = ”GR” AND RAC = 4 AND SRDT== RADT, SR,
OR(SRC = ”SB” AND RAC = “GR” AND SRDT== RADT, SR,
OR(SRC = 0 AND RAC = “SB” AND SRDT== RADT -1day/+22hour, SR,
OR(SRC = # AND RAC = SRC -1 AND SRDT == RADT, SR,
OR(SRC = 0 AND RADT = -1day of SRC/23hour, SRC = “0” AND SRDT= RADT +1day/00hour,IR AND
IF(RAC = ”SB” AND RADT = 23hour, SRC = “0” AND SRDT= RADT +1day/00hour,
OR (RAC = ”SB”, SRC = “0” AND SRDT= RADT +1hour,
OR (RAC = ”GR”, SRC = “SB” AND SRDT= RADT,
OR (RAC = 4, SRC = “GR” AND SRDT= RADT,
OR(RAC = # AND SRC = RAC +1 AND SRDT == RADT, SR *here # = 0-3
)))))))))))))
Move onto next row below previous row
IF(SR=””, END program, continue)
这是 excel VBA 代码:(颜色只是看看它是否在做它应该做的事情)
子 IF_Loop()
Dim i As Long
For i = 2 To 155
If (Range("B" & i).Value = "GR" And Range("B" & i - 1).Value = 4 And Range("C" & i).Value = Range("C" & i - 1).Value) Or _
(Range("B" & i).Value = "SB" And Range("B" & i - 1).Value = "GR" And Range("C" & i).Value = Range("C" & i - 1).Value) Or _
(Range("B" & i).Value = "4" And Range("B" & i - 1).Value = "3" And Range("C" & i).Value = Range("C" & i - 1).Value) Or _
(Range("B" & i).Value = "3" And Range("B" & i - 1).Value = "2" And Range("C" & i).Value = Range("C" & i - 1).Value) Or _
(Range("B" & i).Value = "2" And Range("B" & i - 1).Value = "1" And Range("C" & i).Value = Range("C" & i - 1).Value) Or _
(Range("B" & i).Value = "1" And Range("B" & i - 1).Value = "00" And Range("C" & i).Value = Range("C" & i - 1).Value) Then
Rows(i & ":" & i).Interior.Color = 9359529
Else
'insert row and correct data
Rows(i & ":" & i).EntireRow.Insert shift:=x1Down And _
Rows(i & ":" & i)
End If
Next i
我不确定如何编写剩余的代码。您如何正确编写剩余的行,以便代码执行所需的任务?
【问题讨论】:
-
DATE_HR 是实际的格式化日期还是文本?
-
是从Oracle SQL中提取的信息。我想可能是文字。
标签: excel vba automation data-cleaning