我搜索了很多,想弄清楚如何根据时间和日期在两行之间添加行,但不幸的是我找不到任何公式。如果有人能帮助我,我将不胜感激。
正如你在图片中看到的,我有专栏 J 即 日期和时间 和列米即结果。
为了使我的工作更轻松,我添加了两列钾和大号哪个是日期和时间分别。
我想查看列中的前两行大号如果有的话他们之间错过了一个小时,然后为每个小时添加一行,并将单元格放在列中结果为“0”。
在上图中,00:00和3:00,所以我想让 excel 在它们之间添加两行新行,并在“M”列添加“0”。
另外检查,如果两行之间有一天的差距,那么在它们之间添加 24 行。例如,我需要在两行之间添加 50 行新行2010年1月1日 11:00和2010年1月3日 14:00并且列中每行的结果为零米。
最终结果如下:
答案1
您必须使用这个宏:
Public Sub fillHours()
theEnd = False
i = 2
timecolumn = 7
While theEnd = False:
firstDate = Me.Cells(i, timecolumn - 1)
If firstDate <> "" Then
secondDate = Me.Cells(i + 1, timecolumn - 1)
If firstDate = secondDate Then
firstHour = Me.Cells(i, timecolumn)
secondHour = Me.Cells(i + 1, timecolumn)
diffHour = ((secondHour * 24) - (firstHour * 24)) - 1
If diffHour > 0 Then
For j = 1 To diffHour
Rows(i + j).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromAbove
newHour = Str(i + j - 1) & ":00"
newHour = Right(newHour, Len(newHour) - 1)
Me.Cells(i + j, timecolumn) = newHour
Me.Cells(i + j, timecolumn - 1) = Me.Cells(i, timecolumn - 1)
Me.Cells(i + j, timecolumn + 1) = 0
Next j
End If
ElseIf firstDate < secondDate Then
diffDate = secondDate - firstDate
maxInsertedRows = diffDate * 24
firstHour = Me.Cells(i, timecolumn)
secondHour = Me.Cells(i + 1, timecolumn)
diffHour = ((secondHour * 24) - (firstHour * 24)) - 1
If diffHour < 0 Then
diffHour = (23 - (firstHour * 24)) + (secondHour * 24)
realInsertedRows = maxInsertedRows - (24 - diffHour)
Else
realInsertedRows = maxInsertedRows - diffHour + 2
End If
For j = 1 To realInsertedRows
Rows(i + j).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromAbove
basicHour = i + j - 1
divbasicHour = Int(basicHour / 24)
basicHour = basicHour - (divbasicHour * 24)
newHour = Str(basicHour) & ":00"
newHour = Right(newHour, Len(newHour) - 1)
Me.Cells(i + j, timecolumn) = newHour
Me.Cells(i + j, timecolumn + 1) = 0
If newHour <> "0:00" Then
Me.Cells(i + j, timecolumn - 1) = Me.Cells(i + j - 1, timecolumn - 1)
Else
Me.Cells(i + j, timecolumn - 1) = Me.Cells(i + j - 1, timecolumn - 1) + 1
End If
Next j
End If
i = i + 1
Else
theEnd = True
End If
Wend
End Sub
使用ALT+打开宏F11,双击左侧的工作表并将代码粘贴到右侧。检查行中的值timecolumn = 7
是否与你的时间柱子。