[[20140728114054]] 『項目の表示・非表示をしたい』(XENO) ページの最後に飛ぶ

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

 

『項目の表示・非表示をしたい』(XENO)

いくつかの行で下記のように複数の項目を作成し、各項目をクリックしたら該当項目の詳細を表示(他項目の詳細は非表示)されるようにしたいと考えています。
グループ化で似たような状態にはなると思うのですが、文字列(またはセル)をクリック
して実行する方法はあるでしょうか。
なお、詳細項目にはそれぞれ異なるハイパーリンクを設定したいと考えています。

1)
+項目A
+項目B
ー項目C
  項目C1
  項目C2
+項目D

2)
+項目A
ー項目B
  項目B1
+項目C
+項目D

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


左クリックのイベントは拾えないので、右クリックで代用。
あと、一般的なツリー表示に合わせ、クリックした以外の詳細項目は閉じない例です。

[標準モジュール]
Public Const IMAX = 9

 Sub Auto_Open()
    Dim i As Long

    With Sheets(1)
        .Range("A1") = "+項目A"
        .Range("A2") = "  項目A1"
        .Range("A3") = "+項目B"
        .Range("A4") = "  項目B1"
        .Range("A5") = "+項目C"
        .Range("A6") = "  項目C1"
        .Range("A7") = "  項目C2"
        .Range("A8") = "+項目D"
        .Range("A9") = "  項目D1"

        For i = 1 To IMAX
            If Left(.Cells(i, "A").Value, 1) <> "+" Then
                .Rows(i).EntireRow.Hidden = True
            Else
                .Rows(i).EntireRow.Hidden = False
            End If
        Next i
    End With
End Sub

[シートモジュール]

 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim i As Long

    If Target.Value = "" Then Exit Sub

    If Left(Target.Value, 1) = "+" Then
        Target.Value = "−" & Mid(Target.Value, 2)
        For i = Target.Row + 1 To IMAX
            If Left(Cells(i, "A").Value, 1) <> " " Then
                Exit For
            End If
            Rows(i).EntireRow.Hidden = False
        Next i
    ElseIf Left(Target.Value, 1) = "−" Then
        Target.Value = "+" & Mid(Target.Value, 2)
        For i = Target.Row + 1 To IMAX
            If Left(Cells(i, "A").Value, 1) <> " " Then
                Exit For
            End If
            Rows(i).EntireRow.Hidden = True
        Next i
    End If

    Cancel = True
End Sub
(???) 2014/07/28(月) 15:44

ご回答ありがとうございます。
VBAは未経験なので勉強してやってみます。
(XENO) 2014/07/28(月) 16:59

コメント返信:

[ 一覧(最新更新順) ]


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