2017-08-10 2 views
0

私は以下のコードで2つの問題があります。まず、オートフィルター機能を使用して列をフィルター処理しているときのすべてをオフにします。いくつかの設定では適切な方法で動作していますが、条件パラメータで文字列を変更すると、すべての行が非表示になることがあります。それがなぜ起こるかわからない。他にもIFループの問題があります。私はパーセント値と比較しています。オートフィルタはすべての行を非表示にします&比較の問題ごとに

だから、55%は0.5512321のようになります。例のように、50%未満の値しか見つけられません。

Sub code() 

Dim ws As Worksheet, example As Integer, rng As Range, cl As Range 

Set ws = Sheets("THAT") 
With ws 
    On Error Resume Next 
    .ShowAllData 
    .Cells.AutoFilter Field:=16, Criteria1:="m_M" 
    .Cells.AutoFilter Field:=18, Criteria1:="" 
    .Cells.AutoFilter Field:=17, Criteria1:="m_C" 

    Set rng = Range("T4", "T24000") 
    For Each cl In rng.SpecialCells(xlCellTypeVisible) 
     example = cl.value 
     If example <= 0.6 Then 
      cl.Interior.ColorIndex = 22 
     Else 
     End If 
    Next cl 
End With 
Set ws = Nothing 

End Sub 
+0

まず、あなたは完全に'設定しRNG = .Range( "T24000 T4")にご 'rng'、変更を修飾する必要があります。次に、 'If cl.Value2 <= 0.6 Then'を使用して、セルの値を比較します(パーセンテージ形式部分を削除します)。 –

+1

'Example As Integer' - 整数???? – SJR

+0

@SJRありがとう、それは適切な値を見つけるのに役立ちます。とにかく、すべての行を隠すことについての質問はまだ開いています。 – RafMil

答えて

0

@SJR を作ってそれと同じだけオートフィルタcritariaの変更を見て、異なる動作を明確に、コード1が動作している、とコード2。コード2の結果、すべての行が非表示になり、その理由が分かりません。 ""は空白のままです。

Sub code() 

Dim ws As Worksheet, example As String, rng As Range, cl As Range 

Set ws = Sheets("CIP") 
With ws 
On Error Resume Next 
.ShowAllData 
.Cells.AutoFilter Field:=16, Criteria1:="m_M" 
.Cells.AutoFilter Field:=18, Criteria1:="" 
.Cells.AutoFilter Field:=17, Criteria1:="m_C" 

Set rng = .Range("T4", "T34000") 
For Each cl In rng.SpecialCells(xlCellTypeVisible) 
example = cl.value2 
If example <= 0.6 Then 
cl.Interior.ColorIndex = 22 
Else 
End If 
Next cl 
End With 
Set ws = Nothing 

End Sub 

セカンドコード: `:

Sub code2() 

Dim ws As Worksheet, example As String, rng As Range, cl As Range 

Set ws = Sheets("CIP") 
With ws 
On Error Resume Next 
.ShowAllData 
.Cells.AutoFilter Field:=16, Criteria1:="" 
.Cells.AutoFilter Field:=18, Criteria1:="" 
.Cells.AutoFilter Field:=17, Criteria1:="m_C" 

Set rng = .Range("T4", "T34000") 
For Each cl In rng.SpecialCells(xlCellTypeVisible) 
example = cl.value2 
If example >= 0.6 Then 
cl.Interior.ColorIndex = 22 
Else 
End If 
Next cl 
End With 
Set ws = Nothing 

End Sub 
関連する問題