2017-03-17 4 views
0

もう少しお手伝いしてください。 以下のコードは、B5と一致しない列を非表示にするために機能します。 今、私の問題は、B5とB7の値 に一致する列を同時に表示したいです。 コマンドシートの参照値列B行5,6,7。 B5はMARCH とする。B6は1月sample picture とする。B7はFEBRUARYとする。
シート名(GRA_NewGen CI)行/列ごとのすべてのデータがここにあることに注意してください。 B5、B6、B7に一致するシート名の範囲は、列Cの行4〜値のある行の最後までです。あなたが望むすべてがすべての行を非表示にする場合には以下Mulitple条件付きシートのUnhide列にConditonsを追加

は、あなたがより多くの柔軟性とExcelのフィルタ機能を使用して、より高速なアクションを持つことになります 『1月』、 『2月』などをマークし「コード

'Sub GRA_NewGen_CI() 
Dim cell As Range 
Application.ScreenUpdating = False 
With Sheets("GRA_New Gen CI") 
    For Each cell In .Range("C4", .Range("XFD4").End(xlToLeft)) 
    cell.EntireColumn.Hidden = cell.Value <> Sheets("Command").Range("B5") And Not IsEmpty(cell) 
    Next cell 
End With 
Application.ScreenUpdating = True  
'End Sub 

答えて

0

です。フィルターについてhereを学んでください。

+0

@ Variatusこんにちは、ありがとうございます。私は "January"と2月 "と一致するすべての列を再表示する必要があります。1月と2月は列のヘッダーです。 Col C Row 4)。 =) – SANDY

0

それは私にかなり乗ってくれました。これらの非表示の列はすべてトリッキーです。しかし今はあなたの番です。指示に従ってください。あなたの「コマンド」シートで

、空白の列を見つけて、その下のセル内のセルと、この機能の一つに「すべて表示」を入力します。

="Show "& B5 

私はすべての12を持っているあなたを好みますB5:B16の月に1月から3月しかない場合や、オンザフライでコンテンツを変更したい場合はOKです。列Bに関連するデータ(月名または列キャプション)がある場合は、数式をコピーしてください。名前を説明した範囲を指定します。私はそれに "DropdownList"という名前を付けました。名前付き範囲に「スコープ」が「ワークブック」(ワークブックのすべての部分から表示されていることを意味する)であることを確認します。

A4のGRA_Newシートにコマンドボタンを配置します。おそらくあなたはすでに他の場所にボタンを持っています。その場合、私はあなたに一緒に遊んでもう一度作るように依頼します。後でこのボタンを別のシートを含む他の場所に移動できますが、非表示にすることはできません。このコマンドボタンは、検証ドロップダウンになります。

"Allow" = List and 
"Source" =DropdownList (including the = mark. 

を入力します。これで、第一の位置にある「すべてを表示」、第二の「ショー1月」、およびより「ショー...」という名前の範囲のドロップダウンリストのサイズに依存して示す検証ドロップダウンを持っている必要があります。 「1月を表示」と「すべてを表示」の間にスペースが1つ以上あることを確認してください。2つの単語で構成されるすべての行は関連しています。

"GR_New ..."シートのコードシートに次の手順を追加します。

Private Sub Worksheet_Change(ByVal Target As Range) 
    '17 Mar 2017 
    If Target.Address = Range("A4").Address Then 
     SetDisplay_GRA_NewGen Split(Target.Value)(1) 
    End If 
End Sub 

この手順では、確認のドロップダウンがあるセルに参照を「A4」に変更してください。

次の手順は、通常のコードモジュールに入ります。デフォルトではその名前は "Module1"ですが、任意の名前を付けることができます。この手順の2つの宣言のための

Sub SetDisplay_GRA_NewGen(ByVal Cmd As String) 
    ' 17 Mar 2017 

    Dim Spike As String 
    Dim CountHidden As Integer 
    Dim FirstColumn As Long, LastColumn As Long 
    Dim CapRow As Long, Cap As String 
    Dim C As Long 

    CapRow = 4 
    FirstColumn = 3      ' = column C 

    With Worksheets("GRA_New_Gen_CI") 
     LastColumn = .UsedRange.Columns.Count 
     If StrComp(Cmd, "all", vbTextCompare) Then 
      With Range("DropdownList") 
       For C = 2 To .Rows.Count 
        Cap = Split(.Cells(C).Value)(1) 
        Spike = Spike & "|" & Cap 
       Next C 
      End With 

      For C = FirstColumn To LastColumn   ' count hidden columns 
       Cap = .Cells(CapRow, C).Value 
       If .Columns(C).Hidden Then 
        If .Columns(C).Hidden Or InStr(1, Spike, Cap, vbTextCompare) = 0 Then 
         ' if Cap can't be selected it is counted as not hidden 
         CountHidden = CountHidden + 1 
        End If 
       End If 
      Next C 

      Application.ScreenUpdating = False 
      If CountHidden = 0 Then 
       ' hide all except the specified column 
       .Range(.Columns(FirstColumn), .Columns(LastColumn)).Hidden = True 
      End If 

      For C = FirstColumn To LastColumn 
       With .Columns(C) 
        If .Hidden Then 
         Cap = .Cells(CapRow).Value 
         If StrComp(Cap, Cmd, vbTextCompare) = 0 Then .Hidden = False 
        End If 
       End With 
      Next C 
     Else 
      .Range(.Columns(FirstColumn), .Columns(LastColumn)).Hidden = False 
     End If 
    End With 
    Application.ScreenUpdating = True 
End Sub 

ルック:

CapRow = 4 
FirstColumn = 3 

行4は、プログラムが数ヶ月の名前を検索しますここで、あなたのデータシート上の行です。列3(= "C")は、プログラムが月の名前を見つける最初の列になります。列A:Bは決して触られません。

システムが準備完了です。あなたはそれを操作する方法を知る必要があります。 1.ドロップダウンから「すべて表示」を選択すると、FirstColumnから始まるすべての列が表示されます。これをリセットと呼んでください。 2. CapRowでその名前のドロップダウン列から項目を選択すると、その項目が表示されます。 3.別の月を選択すると、すでに表示されている月に追加されます。 4.すべての列がすでに表示されている場合は、選択した列のみが表示されます。

いつでもドロップダウンリストの範囲を変更したり、長くしたり短くしたりすることができます。重要なことは、ドロップダウンの名前がCapRowで利用可能であることです。プログラムはそれらをテキストとして比較します。つまり、「すべて表示」は「すべて表示」と同じ意味です。

関連する問題