2017-06-27 9 views
2
Dim score As Variant 
score = Range("KPI!A6").Value 

Select Case score 
    Case score = "January" 
    Columns("D:N").EntireColumn.Hidden = True 
    Case score = "February" 
    Columns("C:C,E:N").EntireColumn.Hidden = True 
    Case score = "March" 
    Columns("C:D,F:N").EntireColumn.Hidden = True 
    Case score = "April" 
    Columns("C:E,G:N").EntireColumn.Hidden = True 
    Case score = "May" 
    Columns("C:F,H:N").EntireColumn.Hidden = True 
    Case score = "June" 
    Columns("C:G,I:N").EntireColumn.Hidden = True 
    Case score = "July" 
    Columns("C:H,J:N").EntireColumn.Hidden = True 
    Case score = "August" 
    Columns("C:I,K:N").EntireColumn.Hidden = True 
    Case score = "September" 
    Columns("C:J,L:N").EntireColumn.Hidden = True 
    Case score = "October" 
    Columns("C:K,M:N").EntireColumn.Hidden = True 
    Case score = "November" 
    Columns("C:L,N:N").EntireColumn.Hidden = True 
    Case score = "December" 
    Columns("C:M").EntireColumn.Hidden = True 
End Select 

End Sub 

ちょっと!これは私の最初の質問です。うまくいけば、私は事態を間違ってやっていません。いずれにしても(ここで言いたいことを言いたい).... A6のセル値を見て、月が表示されている列を隠すべき、比較的基本的な「ケース」コードがあります。正しいケース(この例では「5月」)をスキップしている理由を把握するのに苦労しています。コードをステップバイステップで実行できますが、列を非表示にするのはやめていません。それはちょうどそれぞれのケースをチェックし、最終的にはサブの終わりに当たって終了します。私はエラーを受け取っていない、それはちょうど正しい値をキャッチし、アクションを実行しません。どんな助けもありがとう。ありがとう!ケースvbaが正しいケースをスキップしています

+2

KPI 'である正確に何をA6'?それはフォーマットされた 'MMMM'ですか?それともテキストとして「5月」という言葉ですか?つまり、セルをクリックすると、数式バーには何が表示されますか? –

+0

これまでのすべての回答をありがとう!私は戻って "Case =" January ""を変更して "Case" January ""に変更するようにコードを修正しました。月がテキスト形式であり、Scottのような "MMM"形式ではないので、私はこれをしました。コードは今実行され、正しい大文字と小文字を選択しますが、今は「実行時エラー「13 ':型の不一致」エラーが表示されます。私はすべて解決策を探しましたが、このエラーの原因や修正方法を見つけることができません。何か案は?みんなありがとう! – bjefko

+0

更新されたコードで新しい質問をする必要があります。正しい答えとして「YowE3K」を選択します。新しい投稿を作成します。 –

答えて

4

score場合は(など)True(又はFalse)を返すするよう次いでJanuaryscore = "January"として文字列です。 True(またはFalse)の値はscore(すなわち"January")の値と等しくないため、テストは行われません。

あなたはおそらく言うことを意味:

Dim score As Variant 
score = Range("KPI!A6").Value 

Select Case score 
Case "January" 
    Columns("D:N").EntireColumn.Hidden = True 
Case "February" 
    Columns("C:C,E:N").EntireColumn.Hidden = True 
Case "March" 
    Columns("C:D,F:N").EntireColumn.Hidden = True 
Case "April" 
    Columns("C:E,G:N").EntireColumn.Hidden = True 
Case "May" 
    Columns("C:F,H:N").EntireColumn.Hidden = True 
Case "June" 
    Columns("C:G,I:N").EntireColumn.Hidden = True 
Case "July" 
    Columns("C:H,J:N").EntireColumn.Hidden = True 
Case "August" 
    Columns("C:I,K:N").EntireColumn.Hidden = True 
Case "September" 
    Columns("C:J,L:N").EntireColumn.Hidden = True 
Case "October" 
    Columns("C:K,M:N").EntireColumn.Hidden = True 
Case "November" 
    Columns("C:L,N:N").EntireColumn.Hidden = True 
Case "December" 
    Columns("C:M").EntireColumn.Hidden = True 
End Select 

End Sub 

を順番に、リテラル文字列"January""February"、などのそれぞれにscoreの値を比較し、比較がTrueである第一Caseを実行あろう。


あるいは、Jeepedが示唆するように、あなたが使用することができ、あなたのCase文のそれぞれからscore =を削除しないようにする:このようscore = Januaryなどの論理式の各値Trueを比較します

Dim score As Variant 
score = Range("KPI!A6").Value 

Select Case True 
    Case score = "January" 
    Columns("D:N").EntireColumn.Hidden = True 
    Case score = "February" 
    Columns("C:C,E:N").EntireColumn.Hidden = True 
    Case score = "March" 
    Columns("C:D,F:N").EntireColumn.Hidden = True 
    Case score = "April" 
    Columns("C:E,G:N").EntireColumn.Hidden = True 
    Case score = "May" 
    Columns("C:F,H:N").EntireColumn.Hidden = True 
    Case score = "June" 
    Columns("C:G,I:N").EntireColumn.Hidden = True 
    Case score = "July" 
    Columns("C:H,J:N").EntireColumn.Hidden = True 
    Case score = "August" 
    Columns("C:I,K:N").EntireColumn.Hidden = True 
    Case score = "September" 
    Columns("C:J,L:N").EntireColumn.Hidden = True 
    Case score = "October" 
    Columns("C:K,M:N").EntireColumn.Hidden = True 
    Case score = "November" 
    Columns("C:L,N:N").EntireColumn.Hidden = True 
    Case score = "December" 
    Columns("C:M").EntireColumn.Hidden = True 
End Select 

End Sub 

を、 score = Februaryなどを順番に実行し、Trueとの比較がTrueを返す最初のCaseを実行します。


Select Case文はちょうどprettiedアップIf文です。次の文Select Case

Select Case x 
    Case y 
     DoSomething 
    Case z 
     DoSomethingElse 
End Select 

は、次のIfの文

If x = y Then 
    DoSomething 
ElseIf x = z Then 
    DoSomethingElse 
End If 
+3

...または元の文字をすべて再入力しないようにするには、 'Select Case True'に変更するだけです。 – Jeeped

+0

@Jeeped OPのコードを再タイピングすることを意味していても、私ができるときには 'Select Case True'を避けようとしています。 :D – YowE3K

+0

...まあ、ええ...少し直感的ではないかもしれませんが、時には**使用することがあります**。 – Jeeped

4

のSelect Case実行する必要がありませんと同等です:!

Dim score As Variant 
With Worksheets("KPI") 
    score = .Range("A6").Value 
    'if score is a date remove this next line 
    score = DateValue(1 & " " & score & " 2017") 
    .Columns("C:N").Hidden = True 
    .Columns(Month(score) + 2).Hidden = False 
End With 
+3

Showoff !! :D:D – YowE3K

関連する問題