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