[[20161129061033]] 『チェックボックスを使用した図形の表示と非表示の』(S2) ページの最後に飛ぶ

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

 

『チェックボックスを使用した図形の表示と非表示の切り替え』(S2)

「チェックボックス」を使ってグループ化した図形や写真を
表示/非表示をする方法はありますか?

具体例としては「フォームコントロール」の「チェックボックス」
でA1をリンクさせてFALSEとTRUEの表示切替で「グループ化 1」を
表示と非表示をコントロールしたいです。

以上、よろしくお願いします。

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


対象のグループ化された図形を、どこかのセル領域枠内におさまるように配置。
画面から見えない、ずっと右のほうがいいと思います。
たとえば、AA1:AB10なら、名前定義で AA1:AB10 に "表示"、同じサイズの、使っていない領域、
たとえば、AC1:AD10 に "非表示" という名前を付ける。

で、どこかのセルに =IF(A1,"表示","非表示")

あとは、

http://www.officetanaka.net/excel/function/tips/tips14.htm

↑を参考にして、INDIRECT参照を 式を入れたどこかのセルにしておきます。
(このページで解説されている入力規則は不要)

こちらで、試しましたが、いい具合に切り替わります。

(β) 2016/11/29(火) 08:42


フォームコントロールのチェックボックスのようですね。
 Sub チェック1_Click()
    ActiveSheet.Shapes("グループ化 1").Visible = IIf(ActiveSheet.CheckBoxes(Application.Caller).Value = 1, msoTrue, msoFalse)
 End Sub

または、ActiveXコントロールのチェックボックスならば、セルにリンクする必要もなくて楽ではないかと思います。この場合は、以下。

 Private Sub CheckBox1_Click()
    Shapes("グループ化 1").Visible = CheckBox1.Value
 End Sub
(???) 2016/11/29(火) 10:47

 失礼します。

 フォームツールのほうも(リンクセルを参照するなら)

 Sub チェック1_Click()
    ActiveSheet.Shapes("グループ化 1").Visible = Range("A1").Value
 End Sub

 でもいいですね。

(β) 2016/11/29(火) 10:56


βさんの書き方も考えたのです。が、他のチェックボックス用にコピペする事を考えると、修正量が少ない方が良いかな、と。
セル値を使う案で、コピペを楽にすることを考えると、以下のように長くなってしまいまして…。

 Sub チェック1_Click()
    ActiveSheet.Shapes("グループ化 1").Visible = ActiveSheet.Range(ActiveSheet.CheckBoxes(Application.Caller).LinkedCell).Value
 End Sub
(???) 2016/11/29(火) 11:02

With文で括れば、結構判りやすくなるので、これが良いですかねぇ?
 Sub チェック1_Click()
    With ActiveSheet
        .Shapes("グループ化 1").Visible = .Range(.CheckBoxes(Application.Caller).LinkedCell).Value
    End With
 End Sub
(???) 2016/11/29(火) 11:11

 なるほどです!

 以下のようなことをすれば、コードが1つになるので、さらにいいかもしれませんね。

 表示/非表示する図の名前とそれを制御するチェックボックスの名前に関連付けをしておく。

 例えば、図_A と チェック_A、図_B と チェック_B とか。

 そうすると、すべてのチェックボックスに、???さんの最初のコードを、ちょっと変更して登録しておくことができますね。

 Sub 表示非表示()
    ActiveSheet.Shapes("図_" & Split(Application.Caller, "_")(1)).Visible = IIf(ActiveSheet.CheckBoxes(Application.Caller).Value = 1, msoTrue, msoFalse)
 End Sub

(β) 2016/11/29(火) 11:30


私も、1マクロで全てまかなう案で書いてみます。

まず、チェックボックス名は「チェック 1」として、グループ名もこの番号に合わせて「グループ化 1」となるようにしておきます。必ずスペース文字を入れてください。
後は、全てのチェックボックスで以下のマクロを登録してください。

 Sub Click()
    Dim c As CheckBox
    With ActiveSheet
        Set c = .CheckBoxes(Application.Caller)
        .Shapes("グループ化 " & Split(c.Name, " ")(1)).Visible = .Range(c.LinkedCell).Value
    End With
 End Sub
(???) 2016/11/29(火) 12:00

コメント返信:

[ 一覧(最新更新順) ]


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