有一个表,记录了设备的运行日志,要筛选出设备的发生故障时间和恢复正常时间。
但出现故障后,会有一个特定的提示符,之后还会再出现这个提示符或空行,使得筛选很困难。
由于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这段代码只能找到第一个条件,第二个条件(就是恢复正常的条件就找不到了)

解决方案 »

  1.   

    不是Synchronization就代理正常
      

  2.   


    不是Synchronization或空白的就是正常
      

  3.   

    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
      

  4.   

    用错代码标签了。
    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