[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『図形の表示/非表示の自動切換え』(たま)
初めまして、宜しくお願いします。
エクセルの初心者ですみません。
図形の表示/非表示を自動で制御したいです。
例えば
A1が「1」の場合、図形の「グループ化1」が表示状態となり
A1が「0」の場合、図形の「グループ化1」が非表示状態となる
様にしたいです。
調べたところVBAを使えば出来る様なのですが、
プログラミングは初心者の為、よく判ていません。
宜しくお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
こんばんは...出来るかどうかわかりませんが^^;
因みに、お聞きしますが...その図形は手動で既に作成されたものですか? それとも、図形もVBAを使用して作成するのでしょうか?
(あみな) 2022/11/07(月) 20:23:20
参考です シートモジュールで有効 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1").Value = 1 Then ActiveSheet.Shapes("グループ化 22").Visible = True Else ActiveSheet.Shapes("グループ化 22").Visible = False End If End Sub (はてな) 2022/11/07(月) 21:28:19
|[A] |[B] |[C] [1]|名前 |形態 |msotype列挙体戻り値 [2]|Picture 11 |png | 13 [3]|Graphic 13 |svg | 28 [4]|Oval 14 |エクセル図形| 1 [5]|3D Model 15|3D画像 | 30 [6]|Picture 17 |jpg | 13
Gruopになっていましたら、6 が返るようですよ。^^;
m(_ _)m
(隠居Z) 2022/11/07(月) 21:51:44
(はてな)さんの 2022/11/07(月) 21:28:19 の案ですと、 A1セル以外にカーソルを動かしても、常にそれが動作してしまうので 少し無駄かもしれません。
こんな作りにすることが考えられます。 ・A1セルの値を修正した時にだけ、表示・非表示を切り替える。 ・A1セルには、表示,非表示 を「入力規則」を利用して選択できるようにしておく。 (もちろん、1,0 でもかまわないですが、 このほうが自分以外のユーザーがいる場合は使いやすいかも知れない。)
上記の入力規則を設定したうえで、 シートモジュールに以下のコードをコピーペイストしてください。
Private Sub Worksheet_Change(ByVal Target As Range) Dim shp As Shape
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Set shp = Me.Shapes("ここは図形名にしてください") Select Case Target Case "表示": shp.Visible = True Case "非表示": shp.Visible = False End Select End Sub (γ) 2022/11/07(月) 22:46:39
(はてな)様と(γ)様よりありましたVBAを双方、試させて頂きましたが
(はてな)様VBAは動作しましたが、(γ)様VBAは動作しませんでした。
今回は、(はてな)様VBAを使用させて頂きたく、誠に有難うございました。
(たま) 2022/11/08(火) 09:50:26
修正です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1").Value = 1 Then ActiveSheet.Shapes("グループ化 22").Visible = True If Range("A1").Value = 0 Then ActiveSheet.Shapes("グループ化 22").Visible = False End Sub (はてな) 2022/11/08(火) 10:00:21
> (γ)様VBAは動作しませんでした。 ああ、そうですか残念ですね。 私は動作確認したうえで投稿しましたが。 A1セルを変更しないと動作はしませんよ。念のためですけど。
(はてな)様のマクロは、例えば、A1からA10までカーソルを移動すると、 10回、表示設定する動作が行われるけれど、気にはなりませんか? 私は絶対にやりませんけど、まあ些事ですかね。 富豪になったと思えば、けち臭いことを考えないというのもあるかもですね。 (γ) 2022/11/08(火) 10:10:58
>気にはなりませんか? 気にしなくても大丈夫です。 (はてな) 2022/11/08(火) 10:54:22
> >気にはなりませんか? > 気にしなくても大丈夫です。
私は気になりますね。 不必要にプロシージャが実行されるのもそうですが、必要な時に実行されない可能性があるのも気になります。
例えば、A1セルを変更して、Ctrl+Enterでセル移動なしに確定しても反応しない。 A1セルを変更して、ファイル保存しても反応しない。そのまま閉じて、次に開いたとき、A1セルの値と図形の表示/非表示が一致しない場合がありえる。
まあ、セル移動させれば反映しますので気にならなければいいですが、私は気になります。
ちなみに、γさんのコードは、A1セルの値が"表示"か"非表示"かで図形の表示を切り替えていますので、そこを 1 と 0 に変更すれば動作します。
(hatena) 2022/11/08(火) 11:21:47
hatenaさん、フォローありがとうございました。
リクエストどおりの1,0を使ったものは以下です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim shp As Shape If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Set shp = Me.Shapes("ここは図形名にしてください") Select Case Target Case 1 shp.Visible = True Case 0 shp.Visible = False End Select End Sub (γ) 2022/11/08(火) 13:42:09
そう言う詰まんない方向に話を持って行くなよ。
この機能を実現するのに、どっちのイベントが適切かってことだ。
因みに、私は、SelectionChangeは実務では使えたものじゃないと思う派。 鬱陶し過ぎるので。
(半平太) 2022/11/08(火) 16:24:58
SelectionChangeイベントプロシージャが有効な例は、 [[20200606192625]] の中で書いた、使い方くらいですかね。
「カーソルのある行(や列)を特定の色で塗りつぶしたい」という目的で、 「条件付き書式」と「SelectionChangeイベントプロシージャ」を巧妙に組み合わせる "アンドリューの方法"と呼ばれる手法に関連したものです。↓参考。 https://www.relief.jp/docs/001406.html
この方法では、SelectionChangeイベントプロシージャのなかで、 Application.Screenupdating=True を実行することで、 画面更新を強制的に実行し、カーソルの状態にあった条件付き書式を更新させています。
これは他のイベントプロシージャにはまねのできない効果を持ちます。 これくらいですかね。
●たいていは、クリックしたときに動作させたい、といった誤解から SelectionChangeイベントプロシージャを使う人が多いです。 SelectionChangeは、「選択状態が変わる」ことがトリガーとなることの理解が 足りない質問者さんが結構多かったです。 同じセルの上で何度もクリックしても効果はありません。
シートのどこにカーソルを動かしても一定の動作が必要になるなどというのは 結構稀なことです。半平太さんのポリシーもご尤もな話です。
●イベントプロシージャは、副作用に対する細心の注意が必要です。 効果はできるだけ限定的なものにする必要があるのです。(Changeイベントプロシージャで特に顕著) ミダス王の有名な話があるでしょう? 触るものがすべて黄金になると言って喜んでいたら、パンも何もかも黄金に代わってしまうという話。 それと同じ類の話は結構起きがちです。 イベントプロシージャは結構注意が必要な技術ということになります。 (γ) 2022/11/08(火) 18:29:02
>イベントプロシージャは結構注意が必要な技術ということになります。 1回目に書いたコードがそれですか。 指摘されて書き直したのが2回目のコードですか。 どこに注意を払ったのですか。 (NONPRO) 2022/11/08(火) 21:18:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.