有一个表,记录了设备的运行日志,要筛选出设备的发生故障时间和恢复正常时间。
但出现故障后,会有一个特定的提示符,之后还会再出现这个提示符或空行,使得筛选很困难。
由于VBA才初学,抄东抄西并了一段代码来跑,不过总是选不中条件的记录,跪求高手指点修改,感谢!!其实我想要三个操作的
第一,就是在指定日期内,选出F列中出现'Synchronization c...'字符的记录,保存到sheet1中,这个字符表明设备不正常。
出现'Synchronization c...'之后,可能会出现空数据或重复再出现'Synchronization c...',可以不用理它,因为这时设备不正常。
第二步就是选出设备不正常后,恢复到正常的记录,也是保存到sheet1中,就在刚刚不正常的记录下面
第三步就是对所有的省都进行这样的筛选。用人手……很耗时,看高手能不能帮帮我解决。感谢~现有的代码如下:Sub 复制指定日期()Dim iStr As String, iDate As Date, EndRow1 As Long, EndRow2 As LongiStr = Application.InputBox("请输入日期", "日期输入", "2015-01-14", Type:=2)If iStr = "False" Then Exit SubiDate = DateValue(iStr)EndRow1 = Range("A65536").End(xlUp).RowFor i = 2 To EndRow1
If Range("C" & i).Value = iDate Then
If Range("F" & i).Value Like "*Synchron*" Then
EndRow2 = Sheets("Sheet1").Range("A65536").End(xlUp).Row
Rows(i).Copy Sheets("Sheet1").Rows(EndRow2 + 1)
If Not Range("F" & i).Value Like "*Synchronization c...*" And Range("F" & i) <> "" Then ‘原来空白的不是空的,是有一个空格的
Rows(i).Copy Sheets("Sheet1").Rows(EndRow2 + 1)
END If
End If
End IfNextEnd Sub这段代码只能找到第一个条件,第二个条件(就是恢复正常的条件就找不到了)
但出现故障后,会有一个特定的提示符,之后还会再出现这个提示符或空行,使得筛选很困难。
由于VBA才初学,抄东抄西并了一段代码来跑,不过总是选不中条件的记录,跪求高手指点修改,感谢!!其实我想要三个操作的
第一,就是在指定日期内,选出F列中出现'Synchronization c...'字符的记录,保存到sheet1中,这个字符表明设备不正常。
出现'Synchronization c...'之后,可能会出现空数据或重复再出现'Synchronization c...',可以不用理它,因为这时设备不正常。
第二步就是选出设备不正常后,恢复到正常的记录,也是保存到sheet1中,就在刚刚不正常的记录下面
第三步就是对所有的省都进行这样的筛选。用人手……很耗时,看高手能不能帮帮我解决。感谢~现有的代码如下:Sub 复制指定日期()Dim iStr As String, iDate As Date, EndRow1 As Long, EndRow2 As LongiStr = Application.InputBox("请输入日期", "日期输入", "2015-01-14", Type:=2)If iStr = "False" Then Exit SubiDate = DateValue(iStr)EndRow1 = Range("A65536").End(xlUp).RowFor i = 2 To EndRow1
If Range("C" & i).Value = iDate Then
If Range("F" & i).Value Like "*Synchron*" Then
EndRow2 = Sheets("Sheet1").Range("A65536").End(xlUp).Row
Rows(i).Copy Sheets("Sheet1").Rows(EndRow2 + 1)
If Not Range("F" & i).Value Like "*Synchronization c...*" And Range("F" & i) <> "" Then ‘原来空白的不是空的,是有一个空格的
Rows(i).Copy Sheets("Sheet1").Rows(EndRow2 + 1)
END If
End If
End IfNextEnd Sub这段代码只能找到第一个条件,第二个条件(就是恢复正常的条件就找不到了)
不是Synchronization或空白的就是正常
Dim iStr As String, iDate As Date, EndRow1 As Long, EndRow2 As Long, i As Long
Dim lStatus As Long '0: 未判断, 1:正常, 2:故障'
Dim bIsChanged As Boolean
Dim sLastProvince As String
iStr = Application.InputBox("请输入日期", "日期输入", "2015-01-14", Type:=2)
If iStr = "False" Then Exit Sub
iDate = DateValue(iStr) '为了处理多个省,要求数据必须按 (A,D) 列排序。你录个排序的宏复制代码在这里'
EndRow1 = Range("A65536").End(xlUp).Row
EndRow2 = Sheets("Sheet1").Range("A65536").End(xlUp).Row For i = 2 To EndRow1
If Range("C" & i).Value = iDate Then
If LenB(Trim$(Range("F" & i))) <> 0 Then '只处理F列非空的'
If Range("A" & i) <> sLastProvince Then
lStatus = 0 '一个省输出的第一条,如果要求必须是故障就用1,如果也可以是回复正常就用0'
sLastProvince = Range("A" & i)
End If
If Range("F" & i).Value Like "*Synchron*" Then
bIsChanged = (lStatus <> 2)
lStatus = 2
Else
bIsChanged = (lStatus <> 1)
lStatus = 1
End If
If bIsChanged Then
Rows(i).Copy Sheets("Sheet1").Rows(EndRow2 + 1)
EndRow2 = EndRow2 + 1
End If
End If
End If
NextEnd Sub
Sub 复制指定日期()
Dim iStr As String, iDate As Date, EndRow1 As Long, EndRow2 As Long, i As Long
Dim lStatus As Long '0: 未判断, 1:正常, 2:故障'
Dim bIsChanged As Boolean
Dim sLastProvince As String
iStr = Application.InputBox("请输入日期", "日期输入", "2015-01-14", Type:=2)
If iStr = "False" Then Exit Sub
iDate = DateValue(iStr) '为了处理多个省,要求数据必须按 (A,D) 列排序。你录个排序的宏复制代码在这里'
EndRow1 = Range("A65536").End(xlUp).Row
EndRow2 = Sheets("Sheet1").Range("A65536").End(xlUp).Row For i = 2 To EndRow1
If Range("C" & i).Value = iDate Then
If LenB(Trim$(Range("F" & i))) <> 0 Then '只处理F列'
If Range("A" & i) <> sLastProvince Then
lStatus = 0 '一个省输出的第一条,如果要求必须是故障就用1,如果也可以是回复正常就用0'
sLastProvince = Range("A" & i)
End If
If Range("F" & i).Value Like "*Synchron*" Then
bIsChanged = (lStatus <> 2)
lStatus = 2
Else
bIsChanged = (lStatus <> 1)
lStatus = 1
End If
If bIsChanged Then
Rows(i).Copy Sheets("Sheet1").Rows(EndRow2 + 1)
EndRow2 = EndRow2 + 1
End If
End If
End If
NextEnd Sub