Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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/14.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-根据(n+;1)-(n)值添加空行,如果小于某个值,则删除中间的任何内容_Excel_Vba_Analysis - Fatal编程技术网

Excel VBA-根据(n+;1)-(n)值添加空行,如果小于某个值,则删除中间的任何内容

Excel VBA-根据(n+;1)-(n)值添加空行,如果小于某个值,则删除中间的任何内容,excel,vba,analysis,Excel,Vba,Analysis,因此,我正在编写一个VBA来尝试并自动化一些数据分析,这些分析将在数据中循环,并且每当行中的时差超过一秒延迟(数据分辨率更高)时,它将添加一个空白行,指示新的数据“测试运行”。然后,如果RangeA是2秒(即短时间的无意义的测试运行),我想在空白行之间删除任何行(调用RangeA)。p> 我已经成功地创建了一些代码来添加空白行,但是在我的if语句中返回了“类型不匹配”。 之后我确实需要根据这些数据创建一个图表,所以我不确定添加空行是否是最好的方法,或者它会在以后引起问题 编辑-发现一些单元格中有

因此,我正在编写一个VBA来尝试并自动化一些数据分析,这些分析将在数据中循环,并且每当行中的时差超过一秒延迟(数据分辨率更高)时,它将添加一个空白行,指示新的数据“测试运行”。然后,如果RangeA是2秒(即短时间的无意义的测试运行),我想在空白行之间删除任何行(调用RangeA)。p>

我已经成功地创建了一些代码来添加空白行,但是在我的if语句中返回了“类型不匹配”。

之后我确实需要根据这些数据创建一个图表,所以我不确定添加空行是否是最好的方法,或者它会在以后引起问题

编辑-发现一些单元格中有字符串,这是由于我之前搞乱了一些宏。所以它现在用一个空行来分隔数据,现在是试图消除每个块中小于2秒的任何内容的情况

Sub dataSeperator()

    Dim rowStart As Long
    Dim rowEnd As Long
    Dim rowLoop As Long
    Dim FindColumn As Range

    rowStart = 3
    rowEnd = Sheets("Data").UsedRange.Rows(Sheets("Data").UsedRange.Rows.Count).row

    With Sheets("Data")
        Set FindColumn = Cells.Find(What:="Time", After:=.Cells(1, 1), LookIn:=xlValues, LookAt:= _
        xlWhole, MatchCase:=False)
    End With

      For rowLoop = rowEnd To rowStart Step -1

       With Sheets("Data").Cells(rowLoop, FindColumn.Column)

        If Cells(rowLoop - 1, FindColumn.Column) - Cells(rowLoop, FindColumn.Column) < -1 Then

            .EntireRow.Insert

        End If

    End With

Next rowLoop

End Sub
Sub-dataSeperator()
开始的时间越长越好
昏暗的排成长的
像长的一样暗的圈
变暗FindColumn作为范围
rowStart=3
rowEnd=Sheets(“数据”).UsedRange.Rows(Sheets(“数据”).UsedRange.Rows.Count).row
带图纸(“数据”)
设置FindColumn=Cells.Find(What:=“Time”,After:=.Cells(1,1),LookIn:=xlValues,LookAt:=_
xlother,MatchCase:=False)
以
对于rowLoop=rowEnd到rowStart步骤-1
带工作表(“数据”).单元格(rowLoop,FindColumn.Column)
如果单元格(rowLoop-1,FindColumn.Column)-单元格(rowLoop,FindColumn.Column)<-1,则
.EntireRow.Insert
如果结束
以
下一行循环
端接头
我希望这能有所帮助

Seperator()

    Dim rowStart As Long
    Dim rowEnd As Long
    Dim rowLoop As Long
    Dim FindColumn As Range

    rowStart = 3

    With Sheets("Data")

        rowEnd = .UsedRange.Rows(.UsedRange.Rows.Count).row

        ' replaced "Cells" with ".cells"
        Set FindColumn = .Cells.Find(What:="Time", After:=.Cells(1, 1), LookIn:=xlValues, LookAt:= xlWhole, MatchCase:=False)

    End With

      For rowLoop = rowEnd To rowStart Step -1

       With Sheets("Data").Cells(rowLoop, FindColumn.Column)

        ' Used .Value instead
        ' "Cells" refers to the active sheet!
        ' use  Sheets("Data").Cells instead
        If Sheets("Data").Cells(rowLoop - 1, FindColumn.Column) - .value  < -1 Then
        ' If Cells(rowLoop - 1, FindColumn.Column) - Cells(rowLoop, FindColumn.Column) < -1 Then


            .EntireRow.Insert

        End If

    End With

Next rowLoop

End Sub
separator()
开始的时间越长越好
昏暗的排成长的
像长的一样暗的圈
变暗FindColumn作为范围
rowStart=3
带图纸(“数据”)
rowEnd=.UsedRange.Rows(.UsedRange.Rows.Count).row
'将“单元格”替换为“.Cells”
设置FindColumn=.Cells.Find(What:=“Time”,After:=.Cells(1,1),LookIn:=xlValues,LookAt:=xlWhole,MatchCase:=False)
以
对于rowLoop=rowEnd到rowStart步骤-1
带工作表(“数据”).单元格(rowLoop,FindColumn.Column)
'已使用。改为使用值
“单元格”是指活动工作表!
'使用工作表(“数据”)。单元格代替
如果工作表(“数据”).Cells(行循环-1,FindColumn.Column)-.value<-1,则
'如果单元格(rowLoop-1,FindColumn.Column)-单元格(rowLoop,FindColumn.Column)<-1,则
.EntireRow.Insert
如果结束
以
下一行循环
端接头

我的第一个答案仍然有效,但在我看来,如果您按照以下步骤操作,您可以提高代码的可读性和简单性。你觉得怎么样

Sub Seperator2()

    Const TableHeaderRowNumber As Long = 1

    Dim cellTableHeaderWithTime As Range
    Dim rngMyTable As Range
    Dim rngMyColumnOfTimes As Range

    Dim rowStart As Long
    Dim rowEnd As Long
    Dim lngCounter As Long


    With Sheets("Data")

        Set cellTableHeaderWithTime = .Cells.Find(What:="Time", After:=.Cells(TableHeaderRowNumber, 1) _
                                                              , LookIn:=xlValues _
                                                              , LookAt:=xlWhole _
                                                              , MatchCase:=False)
        rowStart = TableHeaderRowNumber + 2
        rowEnd = .UsedRange.Rows(.UsedRange.Rows.Count).Row

        Set rngMyTable = .Range(.Cells(rowStart, cellTableHeaderWithTime.Column), .Cells(rowEnd, cellTableHeaderWithTime.Column))

        ' Just get the column of cells you need to compare
        Set rngMyColumnOfTimes = Intersect(rngMyTable, cellTableHeaderWithTime.EntireColumn)


        For lngCounter = rngMyColumnOfTimes.Cells.Count To rowStart Step -1

            'rngMyTable(lngCounter) is shorthand for rngMyTable.item(lngCounter)
            With rngMyTable(lngCounter)

                Debug.Print .Address

                If .Offset(-1, 0) - .Value < -1 Then

                    .EntireRow.Insert

                End If

            End With


        Next lngCounter


    End With

End Sub
子分隔符2()
Const tableheaderRownNumber作为Long=1
Dim CellTableHeader以时间为范围
Dim rngMyTable As范围
Dim RNGmyColumn作为量程的次数
开始的时间越长越好
昏暗的排成长的
暗lngCounter尽可能长
带图纸(“数据”)
设置cellTableHeaderWithTime=.Cells.Find(内容:=“时间”,后面:=.Cells(TableHeaderRownNumber,1)_
,LookIn:=xlValues_
,瞧:=xlother_
,MatchCase:=False)
rowStart=TableHeaderRownNumber+2
rowEnd=.UsedRange.Rows(.UsedRange.Rows.Count).Row
设置rngMyTable=.Range(.Cells(rowStart,cellTableHeaderWithTime.Column),.Cells(rowEnd,cellTableHeaderWithTime.Column))
'只需获取需要比较的单元格列即可
设置rngMyColumnOfTimes=Intersect(rngMyTable,cellTableHeaderWithTime.EntireClumn)
对于lngCounter=rngMyColumnOfTimes.Cells.Count到rowStart步骤-1
'rngMyTable(lngCounter)是rngMyTable.item(lngCounter)的简写形式
带rngMyTable(lngCounter)
调试.打印.地址
如果.Offset(-1,0)-.Value<-1,则
.EntireRow.Insert
如果结束
以
下一个lngCounter
以
端接头

< /代码>我不确定你的意思是“如果RangeA是2秒,那么我想在空白行之间删除任何行(调用RangeA)”谢谢,这是不起作用的,因为一些字符串已经进入了时间栏-这是我的错误。至于删除行。我的数据将被分为时间段,例如1-40秒、空白行、40-42秒、空白行、42-90秒等。我要做的是删除40-42秒的时间段,因为它只有2秒长。抱歉,我仍然不明白。使用单元格不是。单元格可能会导致它失败。