Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Vba 如何搜索范围以查看该范围是否缺少行_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 如何搜索范围以查看该范围是否缺少行

Vba 如何搜索范围以查看该范围是否缺少行,vba,excel,excel-2010,Vba,Excel,Excel 2010,我有一组数据,其中包含一个月内每小时的统计数据 有时,数据缺少一行,例如,当数据库因维护而停机时,因此我们无法收集统计数据。我需要做的是确定在每个24小时块中,小时列是否每次增加1。如果hour列中的值增加2,我需要添加一个空行,并用0填充每个单元格 这就是我试图做的: Sub btnAddZero() Dim srcRange As Range Dim intOffset As Integer 'select the starting row for counting

我有一组数据,其中包含一个月内每小时的统计数据

有时,数据缺少一行,例如,当数据库因维护而停机时,因此我们无法收集统计数据。我需要做的是确定在每个24小时块中,小时列是否每次增加1。如果hour列中的值增加2,我需要添加一个空行,并用0填充每个单元格

这就是我试图做的:

Sub btnAddZero()
    Dim srcRange As Range
    Dim intOffset As Integer

    'select the starting row for counting the hours
    Set srcRange = Sheets("Raw Data").Range("A4")
    'Set the beginning offset to 4 to account for empty 4 rows
    intOffset = 4

    'number of days in the month
    For j = 0 To 30
        'number of hours in a day
        ' rows

        Dim i As Integer

        For i = 0 To 23


                'if the first cell is not 1 more than the cell below it
                If srcRange.Cells(intOffset, 4) <> srcRange.Cells(intOffset + i, 4) Then
                    'shift everything below this line down
                    srcRange.Rows(intOffset + i).Insert shift:=xlShiftDown
                    'set everything in this row to be 0
                    srcRange.Cells(intOffset + i, 1).Value = 0
                    srcRange.Cells(intOffset + i, 2).Value = 0
                    'set the value to be the same value as the cell above
                    srcRange.Cells(intOffset + i, 3).Value = srcRange.Cells(Row - 1, 3).Value
                    srcRange.Cells(intOffset + i, 4).Value = 0
                    srcRange.Cells(intOffset + i, 5).Value = 0
                End If

        Next i
        intOffset = intOffset + i
        'off set the range for next 24 hours
        Set srcRange = srcRange.offset(intOffset)
    Next j

End Sub
不幸的是。。。这将大范围的行设置为0,我相信这将插入22到28行0。第一次通过外部for循环时,在内部for循环的第四次迭代之后,这是0的行开始的地方

我认为我的第一个也是最大的问题是,我检查是否有时间缺失,但这并不能正常工作

任何帮助都将不胜感激

这是我正在使用的少量数据,您可以看到第4列缺少值15。我想在包含14的行之后添加一行0

9292 12377 2017-01-30 12 2471

1119515028 2017-01-301392

539363352017-01-3014374

1911 1959 2017-01-30 16 8


11995131812017-01-3017181

我认为您如何检测丢失的小时数并插入行的逻辑不太正确。从另一个角度看问题,我以下面的逻辑为例。希望它能让你更接近解决方案

选项显式 代用霍尔切克 将wb设置为工作簿 将ws设置为工作表 设置wb=ThisWorkbook 设置ws=wb.SheetsRaw数据 暗时隙范围 将nextTimeSlot变暗为范围 设置时隙=ws.RangeD5 设置nextTimeSlot=timeSlot.Offset1,0 预期的一小时也一样长 预期小时数=0 不执行IsEmptynextTimeSlot.Value时执行 如果为expectedHour时隙。值,则 --哎呀,我们至少少了一个小时。 '我们需要插入多少小时的行? 暗淡的失踪小时数一样长 如果时间段.Value>expectedHour,则 ’--现在是中午,我们的数学很简单 missingHours=时隙。值-预期小时 其他的 损失小时数=23-预计小时数+1 如果结束 timeSlot.ResizemissingHours.EntireRow.Insert Shift:=xlShiftDown expectedHour=expectedHour+missingHours 其他的 设置时隙=时隙。偏移量1,0 设置nextTimeSlot=timeSlot.Offset1,0 预计小时数=预计小时数+1 如果结束 如果预计小时数>=24,则 预期小时数=0 如果结束 环 端接头
第4列中的值类型可能是时间戳?是日期还是时间?它会一直精确到小时吗?它是一个整数,从0到23取决于一天中的小时。这非常接近我所需要的!再次感谢你的帮助!