2017-11-13 4 views
0

私は、その列にある値に基づいて列を非表示にするために使用したコードを持っています。その列のすべてのセルを、そこに値がある場合はそれを表示し続け、そうでなければそれを隠すでしょう。複数の行の値に基づいて列を非表示にするVBAコードを変更する

これで、特定の行の値に基づいて物を非表示にする必要があります。

Sub HideCols() 
Dim LC As Integer, j As Integer 
Dim LR As Integer, curCnt As Integer 
Dim k As Integer 
Dim Data As Variant 

Application.ScreenUpdating = False 

LC = Cells(3, Columns.Count).End(xlToLeft).Column 

For j = 6 To LC 
    LR = Cells(Rows.Count, j).End(xlUp).Row 
    curCnt = 0 
    Data = Range(Cells(1, 1), Cells(LR, LC)) 
    For k = 3 To LR 
     If Rows(k).Hidden = False And Data(k, j) <> "" Then _ 
     curCnt = curCnt + 1 
    Next k 
    Columns(j).Hidden = curCnt < 2 
Next j 

Application.ScreenUpdating = True 

End Sub 

私が追加しようとした:これはコードです。これは、以下に追加されました

Dim i As Long 
Dim c As Variant 
Dim l As Integer 
For i = 6 To j 
    For Each c In ActiveSheet.Cells(2, i) 
    If Columns(i).Hidden and c.Value Like "Tri-Annual" Then 
     ActiveSheet.Columns(i).Hidden = False 
    Else 
     ActiveSheet.Columns(i).Hidden = True 
    End If 
    Next c 
Next i 

を、その希望は、それが唯一の最初のマクロによって隠されていなかったの列を見てということでした行2のその列に「Tri-Annual」も含まれていないすべての列を非表示にします。タスクは完了しますが、2回実行する必要があります。これを行う簡単な方法はありますか?

答えて

1

これを試してください。私はそれが正しい方法であると思う。

Sub HideCols() 

Dim LC As Long, j As Long 
Dim LR As Long, curCnt As Long 
Dim k As Long 
Dim Data As Variant 

Application.ScreenUpdating = False 

LC = Cells(3, Columns.Count).End(xlToLeft).Column 

For j = 6 To LC 
    LR = Cells(Rows.Count, j).End(xlUp).Row 
    curCnt = 0 
    Data = Range(Cells(1, 1), Cells(LR, LC)) 
    For k = 3 To LR 
     If Rows(k).Hidden = False And Data(k, j) <> "" Then _ 
     curCnt = curCnt + 1 
    Next k 
    Columns(j).Hidden = curCnt < 2 Or Cells(2, j).Value <> "Tri-Annual" 
Next j 

Application.ScreenUpdating = True 

End Sub 
+1

これはうまく動作します。おかげさまで、私はそれをはっきりと思っていました。 –

関連する問題