プロが教えるわが家の防犯対策術!

E4~Z4セルに、その列を表示させる場合は1を、させない場合は0が立つようにして

If Range("E4").Value = 0 Then
Columns("E:E").Select
Selection.EntireColumn.Hidden = True
End If
If Range("F4").Value = 0 Then
Columns("F:F").Select
Selection.EntireColumn.Hidden = True
End If

とZまで繰り返したマクロにしてみたらできましたが、
例えばDD列まであるような横長の表の場合、とても長いマクロになってしまいます。
もっとすっきりとしたものにできるでしょうか。

エクセル2003使用のマクロ初心者です。
よろしくお願いします。

A 回答 (4件)

Sub Macro1()


For i = 5 To Cells(4, Columns.Count).End(xlToLeft).Column
If Cells(4, i).Value = 0 Then
Columns(i).EntireColumn.Hidden = True
End If
Next i
End Sub
    • good
    • 0
この回答へのお礼

うまくいきました。
とても助かりました。本当にありがとうございます。
No.2の方の方法もうまくいきましたが、
こちらの方法は縦の項目が増えても自動的に範囲を広げてくれるので
本当に助かります。

またよろしくお願いします。

お礼日時:2011/03/02 01:41

>縦方向のオートフィルタはできない


別のシートに行列を逆転させたシートを作成、
はどうなのでしょうか?。

あと、VBAについて参考サイト。
セル操作の参考に。
http://www.voicechatjapan.com/excelvba/VBArei3.htm
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu0 …
>If Range("F4").Value = 0 Then
>Columns("F:F").Select
にある「F」や「4」は固定文字でなくて変数で同じことを表現できるので
それで繰り返し部をスッキリさせます。
セルの表記、OFFSET、繰り返し処理、が参考になると思います。
    • good
    • 0
この回答へのお礼

逆転シートも考えましたが、No.3のmar00さんの方法でやってみることにしました。
勉強になるサイトを教えていただきありがとうございます。
毎日少しずつ勉強して、いつの日か私が回答者になれるくらい頑張ります。

お礼日時:2011/03/02 01:39

例えば20列までを対象にするのでしたら次のようにします。



For ColPos = 5 To 20
If Cells(4, ColPos) <> "" And Cells(4, ColPos).Value = 0 Then
Columns(ColPos).Select
Selection.EntireColumn.Hidden = True
End If
Next
    • good
    • 0
この回答へのお礼

うまく動きました。
ありがとうございました。

お礼日時:2011/03/02 01:37

Sub MACRO()


For Each RG In Range("E4:DD4")
If RG = 0 Then
RG.EntireColumn.Hidden = True
ELSE
RG.EntireColumn.Hidden = False
End If
Next RG
End Sub
    • good
    • 0
この回答へのお礼

うーん、うまく動きませんでしたが、

ありがとうございました。

お礼日時:2011/03/02 01:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!