有一個表,記錄了設備的運行日志,要篩選出設備的發生故障時間和恢復正常時間。
但出現故障后,會有一個特定的提示符,之后還會再出現這個提示符或空行,使得篩選很困難。
由于VBA才初學,抄東抄西并了一段代碼來跑,不過總是選不中條件的記錄,跪求高手指點修改,感謝!!


其實我想要三個操作的
第一,就是在指定日期內,選出F列中出現'Synchronization c...'字符的記錄,保存到sheet1中,這個字符表明設備不正常。
出現'Synchronization c...'之后,可能會出現空資料或重復再出現'Synchronization c...',可以不用理它,因為這時設備不正常。
第二步就是選出設備不正常后,恢復到正常的記錄,也是保存到sheet1中,就在剛剛不正常的記錄下面
第三步就是對所有的省都進行這樣的篩選。
用人手……很耗時,看高手能不能幫幫我解決。感謝~
現有的代碼如下:
Sub 復制指定日期()
Dim iStr As String, iDate As Date, EndRow1 As Long, EndRow2 As Long
iStr = Application.InputBox("請輸入日期", "日期輸入", "2015-01-14", Type:=2)
If iStr = "False" Then Exit Sub
iDate = DateValue(iStr)
EndRow1 = Range("A65536").End(xlUp).Row
For 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 If
Next
End Sub
這段代碼只能找到第一個條件,第二個條件(就是恢復正常的條件就找不到了)
uj5u.com熱心網友回復:
看了半天,不知到正常的是啥樣的..........uj5u.com熱心網友回復:
不是Synchronization就代理正常uj5u.com熱心網友回復:
不是Synchronization或空白的就是正常
uj5u.com熱心網友回復:
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
Next
End Sub
uj5u.com熱心網友回復:
用錯代碼標簽了。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
Next
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/103792.html
標籤:VBA
上一篇:POWER BUILDER 和VB6比較到底有什么優勢
下一篇:php 代碼轉換成vb的 代碼$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); 如何寫
