[[20160527122729]] 『☆マークから☆マークまで行非表示』(☆マーク) ページの最後に飛ぶ

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

 

『☆マークから☆マークまで行非表示』(☆マーク)

B列に☆がランダムに入力されています。
☆の入力されているセル右のC列に◯が入力された場合
一つ下の行から次に☆が入力されている一つ上の行までを
非表示にしたいのですが方法を教えていただけますか?
◯を消すと表示されると尚良いです。
宜しくお願いします。

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


 B列の星のほうが変更されることはあるのか?

 たとえばC列に○が入っている行のB列に☆が入れられてその場合にその下の行から次に星の入っている行の上まで
 非表示にするということはあるのか?

 また、右横に○が入力された☆のある行より下に☆がない場合はどうするのか?
(ねむねむ) 2016/05/27(金) 13:06


お返事ありがとうございます

 B列の星のほうが変更されることはあるのか?

  行を増やしたり削除したりしますので間の行数は変わります

たとえばC列に○が入っている行のB列に☆が入れられて
その場合にその下の行から次に星の入っている行の上まで

 非表示にするということはあるのか?

◯を入れるのは必ず☆の右横です。
☆の無い右横はなにも入力しません。

また、右横に○が入力された☆のある行より下に
☆がない場合はどうするのか?

すいません、考えていませんでした。
D列にデータが入力されている行までです。
もしくは最終行に☆を入力しておきます。

宜しくお願いします。


Private Sub Worksheet_Change(ByVal Target As Range)
'シートモジュール
    Dim rg As Range, nr As Long
    If Target.Count <> 1 Then Exit Sub
    If Target.Column <> 3 Then Exit Sub
    If Target.Offset(, -1).Value <> "☆" Then Exit Sub
    If Target.Offset(1, -1).Value = "☆" Then Exit Sub
    Set rg = Target.Offset(1, -1).End(xlDown)
    If rg.Value = "☆" Then nr = rg.Row - 1
    If nr < 1 Then Exit Sub
    If Target.Value <> "○" Then
        Rows(Target.Row + 1 & ":" & nr).EntireRow.Hidden = False
    Else
        Rows(Target.Row + 1 & ":" & nr).EntireRow.Hidden = True
    End If
End Sub
(mm) 2016/05/27(金) 14:02

 C列の変更(○を○以外、あるいは○以外から○)や、B列、C列の複数セル変更(クリアやコピペやフィルコピー)も対応してみました。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    Dim f As Range
    Dim c As Range

    If Intersect(Target, Columns("B:C")) Is Nothing Then Exit Sub

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Rows.Hidden = False

    With Range("A1", UsedRange)

        .Columns("B").Replace What:="☆", Replacement:="#N/A", LookAt:=xlWhole
        On Error Resume Next
        Set r = .Columns("B").SpecialCells(xlCellTypeConstants, xlErrors)
        On Error GoTo 0

        If Not r Is Nothing Then
            r.Value = "☆"
            For Each c In r
                If Not f Is Nothing Then Range(f.Offset(1), c.Offset(-1)).EntireRow.Hidden = True
                If c.Offset(, 1).Value = "○" Then
                    Set f = c
                Else
                    Set f = Nothing
                End If
            Next
        End If

    End With

    Application.EnableEvents = True

 End Sub

(β) 2016/05/27(金) 17:06


コメント返信:

[ 一覧(最新更新順) ]


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