[[20150124204250]] 『VBAで文字や数字が入った時だけ列だけ表示』(take) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで文字や数字が入った時だけ列だけ表示』(take)

列 B C J K L U
5 1日 木
6 2日 金
7 3日 土
8 4日 日
9 5日 月
10 6日 火
11 7日 水
12 8日 木

35 31日 土

このように表を作った時、表をくずさないでJ・K・Lに文字や数字が入った時だけ列5・7・10・・・だけ表示
J・K・Lに文字や数字が入ていなかったら(6・8・9・11・12・・・)非表示を
マクロ(VBA)を使って出したいのですが教えてくれませんか?
それと一度マクロ(VBA)を起動してから、また戻すマクロ(VBA)も教えて欲しいです。
あまりマクロ(VBA)をしりませんがお願いします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 あげあしをとるようで心苦しいのですが、アップされた表が【くずれていて】どこに何が入っているのかわかりにくいです。
 何列に何がはいっているかわかるようにしてもらえませんか?

 それと、「列5・7・10・・・」とは 「行5・7・10・・・」のことでしょうか?

 あと、「一度マクロ(VBA)を起動してから、また戻すマクロ」
 これは、どういう状態に戻すのですか? 未入力の状態に戻すということですか?
 それとも、全行を表示させるという意味ですか?

 どうも、よくわからないのですが、矛盾ないですか?
 どこかに入力がなければ非表示にする?
 そうなってしまうと、そのあと、そこに何かいれようとしても、非表示だから入力できませんよね?

(β) 2015/01/24(土) 21:21


説明が分かりにくくてごめんなさい。
 列 B   C  J K L U

5  1日  木  1 1 1
6  2日  金
7  3日  土  1 1
8  4日  日
9  5日  月
10  6日  火  1 1 1
11  7日  水
12  8日  木

35

「表をくずさないで」とは行5〜35の罫線はそのまま
列B〜U 行5〜35です
先に列Jに数字が入っている時で後からマクロ起動して、列Jに数字が無い行は非表示する。
「一度マクロを起動してから、また戻す」とは全行を表示させるという意味です。
本当にわかりにくくてごめんなさい。
(take) 2015/01/24(土) 22:01


 処理をするタイミングのイメージがわかりませんが、とりあえず一括処理で。
 一括処理なら、4行目をタイトル行にしておいてオートフィルタを使えばいいのでは?とも思いますが)
 また、罫線をくずさないという意味が、この表の全体の外枠が太線で、仮に、35行目が非表示になっても一番下は太線
  ということだと、やっかいですが。

 Sub 非表示()
    Dim c As Range

    For Each c In Range("A5:A35")
        If WorksheetFunction.CountA(c.EntireRow.Range("J1:L1")) = 0 Then c.EntireRow.Hidden = True
    Next

 End Sub

 Sub 全表示()
    Range("A5:A35").EntireRow.Hidden = False
 End Sub

(β) 2015/01/24(土) 22:18


いつもお世話になってます。
20人分、シートを分けている事でオートフィルタはシート保護はかけている為、解除する手間がかかるのでマクロボタンでと思ってました。

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

欲を言えば非表示にした時も31行(表示3行、非表示28行)なんて都合のよい事は出来ないですね?
もしあればお願いします。
(take) 2015/01/24(土) 22:53


 こんなことですか?

 Sub 非表示2()
    Dim c As Range

    For Each c In Range("A5:A35")
        If WorksheetFunction.CountA(c.EntireRow.Range("J1:L1")) = 0 Then c.EntireRow.Font.Color = vbWhite
    Next

 End Sub

 Sub 全表示2()
    Range("A5:A35").EntireRow.Font.ColorIndex = xlAutomatic
 End Sub

(β) 2015/01/24(土) 23:13


 Sub 非表示()
    Dim c As Range

    For Each c In Range("A5:A35")
        If WorksheetFunction.CountA(c.EntireRow.Range("J1:L1")) = 0 Then c.EntireRow.Hidden = True
    Next

 End Sub

 Sub 全表示()
    Range("A5:A35").EntireRow.Hidden = False
 End Sub

を使わせてもらいます。
計算式などシート保護した時はやっぱり解除が必要ですか?
(take) 2015/01/24(土) 23:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.