2017-05-20 1 views
0

年の2年でない日付の列をすべて非表示にしたい。それは正しいアプローチかどうかわかりませんが、私はExcelプログラミングについて何も知らなかったので、このVBAスクリプトを作成しましたが、うまくいかないような調査を行っています:年の列を非表示にする

「=のOcultarFechas(B2:AA2)」
Function OcultarFechas(Range) 
Rg1 = Range ' B2:AA2 
Flag = "ok" 
For Each c1 In Range(Rg1).Cells 
    If Year(c1) <> Year(Date) Then 
     Columns(c1.Column).EntireColumn.Hidden = True 
    Else 
     Flag = "notok" 
    End If 
    If Flag = "notok" Then Exit For 
    Next c1 
End Function 

私が、スプレッドシートを開いたが、今私が思うに、このコードで私のようなセルに関数を呼び出す必要があるときにスクリプトが実行されることが好ましいだろう。

PS。現在の年が見つかったときにforループを終了し、その列から非表示にする必要があります。

答えて

1

UDFを使用して列を非表示にすることはできません。

は...上記

Sub HideColumns() 
Dim c As Long, lc As Long 
lc = Cells(2, Columns.Count).End(xlToLeft).Column 
Columns.Hidden = False 
For c = 2 To lc 
    If Year(Cells(2, c)) < Year(Date) Then 
     Columns(c).Hidden = True 
    End If 
Next c 
End Sub 

コードが見つかった最後の列に列2を介して行2ループで使用される最後の列を見つけて、年間の状態を確認し、それに応じて列を非表示にします。このような何かを試してみてください。

ブックを開くときにこの手順を自動的に呼び出すには、ThisWorkbookモジュールに次のコードを挿入します。

Private Sub Workbook_Open() 
Call HideColumns 
End Sub 
+0

私はこれを試してみたし、かなりいい作品、一つだけ問題が1列が隠されていたが、そこの内部には、コンテンツがなかったが、私はそれを再フォーマット可能性があり、それが完璧に動作しますしました。スプレッドシートを開くたびに自動的にこれを行うことはできますか?ありがとう – Fjallbacka

+0

ソリューションを編集しました。見てください。 – sktneer

+1

Row2のその列にあるセルが空の場合は、列をスキップするには、IFステートメントを--- If Year(セル(2、c)) ""その後、 – sktneer

関連する問題