[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『行非表示の自動化』(右近)
お世話になります。
U10からU20に以下の関数を設定しています。
U10=IFERROR(IF(C10<>"",1,0),0)
以下、U20までオートフィルしています。
その結果、0 という結果がでた行を自動的に非表示したいと考えております。
逆に 1 という結果がでれば再表示する形にしたいのです。
よろしくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
の意味がよくわかりません。
C列またはU列でオートフィルターではだめなのでしょうか。
(マナ) 2017/05/04(木) 21:15
Sub オートフィルター()
'
' オートフィルター Macro
'
'
sh1 Unprotect. "123" Range("U10:U20").Select Selection.AutoFilter ActiveSheet.Range("$U$10:$U$20").AutoFilter Field:=1, Criteria1:="1" Range("O10").Select ReProtect sh1, "123"
End Sub
(右近) 2017/05/04(木) 22:47
近いところでは、こんな質問がありました。
[[20170503003602]] 『指定値を含む行の非表示(VBA)』(Joey)
シート保護についても、マクロの記録を利用するとよいです。
(マナ) 2017/05/04(木) 22:58
試してみたら、パスワード部分は記録されませんでした。
なので、ネット検索してみました。
http://officetanaka.net/excel/vba/sheet/sheet07.htm
(マナ) 2017/05/04(木) 23:13
Sub Macro() Dim k As Long For U = 10 To 20 If Cells(k, "U").Value = 0 Then Rows(k).Hidden = True End If Next End Sub (右近) 2017/05/04(木) 23:16
Sub Macro()
Dim k As Long For U = 10 To 20 If Cells(U, "U").Value = 0 Then Rows(U).Hidden = True End If Next End Sub (右近) 2017/05/04(木) 23:26
>以下のように修正して、テストしたらところ、うまく動作しました。
修正が間違っています。
kをUにするのではなく、Uをkにしてください。
Sub Macro() Dim k As Long
For k = 10 To 20 If Cells(k, "U").Value = 0 Then Rows(k).Hidden = True End If Next End Sub
でも、これだと、以下の点でだめじゃないですか。
>逆に 1 という結果がでれば再表示する形にしたいのです。
10〜20行について再表示しておくコードを追加してください。
わからなければ、マクロの記録です。
(マナ) 2017/05/04(木) 23:48
(右近) 2017/05/04(木) 23:58
1)シート保護解除
2)10〜20行再表示
3)U10について
4)もし、0であったら、行を非表示
5)同様に、U11〜U20まで繰り返し
6)シート保護
わたしは、もう寝ますが、あとは試行錯誤でできると思います。
(マナ) 2017/05/05(金) 00:08
シート保護の条件で、行の書式設定を許可しておけば、
マクロでシート保護を解除しなくてもよいです。
(マナ) 2017/05/05(金) 00:14
まず、再表示のコードは以下です良いでしょうか? ただ、パスワードによる保護のコードに行き詰まっております。
Sub Macro()
Dim k As Long For k = 10 To 20 If Cells(k, "U").Value = 0 Then Rows(k).Hidden = False End If Next End Sub (右近) 2017/05/05(金) 09:02
Sub Macro() Dim k As Long
For k = 10 To 43 If Cells(k, "U").Value = 0 Then Rows(k).Hidden = Not Rows(k).Hidden End If Next End Sub
(右近) 2017/05/05(金) 09:47
で、最初にもどって、オートフィルタでもよいですか。
マクロも不要です。シート保護したままで実行可能です。
(マナ) 2017/05/05(金) 10:06
おはようございます。
話が噛み合ってないようなので一点だけ、
U列(C列)の変化に対して、自動で表示非表示を切り替えたいんですよね? Worksheet_Changeイベントを調べて下さい。
回答者はあなたの画面は見えませんし、頭の中の考えも知りません。 マクロ云々以前に、やりたい事を正しく相手に伝える努力をして下さい。
(sy) 2017/05/05(金) 10:44
Option Explicit
Sub test() Const pw As String = "123" Dim rr As Range, r As Range
ActiveSheet.Unprotect Password:=pw
Set rr = Rows("10:20") rr.Hidden = False
With ActiveSheet.Shapes(Application.Caller).TextFrame.Characters If .Text = "絞り込む" Then For Each r In rr.Rows If r.Range("U1").Value = 0 Then r.Hidden = True End If Next .Text = "全表示する" Else .Text = "絞り込む" End If End With
ActiveSheet.Protect Password:=pw
End Sub
(マナ) 2017/05/05(金) 11:00
いつもフォローありがとうございます。
C列の変更(入力)するには、いずれにしても再表示が必要かと思いました。
C列も数式かもしれませんが。
(マナ) 2017/05/05(金) 11:06
>C列の変更(入力)するには、いずれにしても再表示が必要かと思いました。
あっ!そうですね。 言われてみれば、そもそも変更する為には表示しないと出来ないですね。 Worksheet_Change以前の問題でした。 失礼しました。
(sy) 2017/05/05(金) 11:57
マナさんにご教授いただいたコードで実行してみましたところ、うまく動作しました!
ありがとうございます。
ただ、もう一つ欲を言わせていただければと思います。
C10〜C20には、関数が入っておりまして、名前が入っております。
この名前が入っているかいないかで、U列 に 1 又は 0 を表示させるものです。
1 であれば表示、0 であれば非表示するというものです。
それで、例えば、C10〜C14まで名前が入っている場合、絞り込みボタンを押すと、15〜20行目は非表示となります。その後、キーとなる日付が B2 セルに入っておりまして、これを変更すると、C列の名前が変わるようにしております。
日付を変更したら、C10〜C14まで入っていた名前が、C10〜C16になると、日付を変えた時点で、C16まで表示させるようにすることは可能でしょうか?
つたない説明で申し訳ありません。
どうぞよろしくお願いいたします。
(右近) 2017/05/05(金) 14:15
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range) Const pw As String = "123" Dim rr As Range, r As Range
If Intersect(Target, Range("B2")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect Password:=pw
Set rr = Rows("10:20") rr.Hidden = False
For Each r In rr.Rows If r.Range("U1").Value = 0 Then r.Hidden = True End If Next
ActiveSheet.Protect Password:=pw
End Sub
(マナ) 2017/05/05(金) 14:35
(右近) 2017/05/05(金) 15:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.