質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1025閲覧

excel VBAを使って、セルを可視化・非可視化したい

pokemonta

総合スコア170

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/04/17 08:00

編集2020/04/17 11:47

セル A1で選択されたプルダウンによって
対象のセルをハッチングさせたいです。
これらをVBAを使って実現する方法をご教示願います。
※.プルダウンとは、「データの入力規則:リスト」を指します。
※.ハッチングとは、条件付き書式設定の機能を指します。

例えば、A1のプルダウンで1を選択したときは、
B7は、グレー and セル保護にして代わりにB8は、黄色にする。
A1のプルダウンで2を選択したときは、
B7は、黄色にして代わりにB8は、グレー and セル保護にする。

これらを実現する方法をご教示頂けないでしょうか?

プルダウンが変化したことをどう検知するのか?
また、その値をどうやって取得するのか。
さらに色が変えて保護するにはどうすればよいのかがポイントになると思います。

推測:
対象のシートで以下の関数を定義すれば、リストの変化が
検知されると考えています。
Private Sub Worksheet_Change(ByVal Target As range)

そのうえで、Target.Addressを指定することで変化が起きた
セル番号が取得でき、1 もしくは2と比較すればできると思われます。
また、Target.Addressは、チェックボックスが同シート内にあれば、
on・offにも反応して検知されるのでしょうか?
(プルダウンとチェックボックスは、同じトリガーになるのでしょうか?)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/17 08:16

タグにある内容しかタイトルにありませんので、繰り返しになっています。タイトルは要件を記載してください。
mattuwan

2020/04/17 08:18

>セル A1で選択されたプルダウンによって プルダウンというのは、入力規則のリストのことでしょうか? それとも他の機能でしょうか? それとも、コントロール系を使うのでしょうか? どれを使うかはっきり明示してください。 >対象のセルをハッチングさせたいです。 ハッチングとは、セルの塗りつぶしのことでしょうか? そうならば、 条件付き書式設定の機能で、 セルへの入力された値で、塗りつぶしの色を変えることが可能です。 (当然他のセルの値も参照可) その機能を無視して、全部自作でエクセルを制御しようということでしょうか?
pokemonta

2020/04/17 11:47

ご指摘の点を踏まえまして修正いたしました。
mattuwan

2020/04/17 13:00

条件付き書式設定の機能を使うなら、VBAでエクセルを制御しなくても、 条件式を設定すればいいと思います。 セルの書式設定とセルの条件付き書式設定は違います。 Changeイベントを利用してセルの書式設定をマクロ化するのが目的なのか、 結果がでればなんでもいいのかどちらでしょう?
pokemonta

2020/04/17 14:17

例であげていることより複雑なことを考えています。 プルダウンで選択した値と他のセルで入力された値の組み合わせにより 選択できるセルの場所(ここでもデータ入力を追加でできる)、 セルの数(入力されたデータ数に応じて増加)が変わったり、入力範囲(入力チェック方法) を変えたり、ハッチングの色が変わったりします。恐らくVBAじゃないと難しいと思います。
guest

回答1

0

ベストアンサー

例えば、A1のプルダウンで1を選択したときは、
B7は、グレー and セル保護にして代わりにB8は、黄色にする。
A1のプルダウンで2を選択したときは、
B7は、黄色にして代わりにB8は、グレー and セル保護にする。

これらを実現する方法をご教示頂けないでしょうか?

条件付き書式設定で作りこんだ方が結果が早く出てよいと思いますし、
VBAでエクセルを制御し、カスタマイズ(機能の追加)をすると、
自分で全部対処しないといけなくなって、
想定外の副作用等で、デバッグで苦労すると思います。
また、マクロを使うと「元に戻す」の履歴が消えて元に戻すことが出来なくなります。

いろいろ書き方はあるとは思いますが、ぱっと思いついた一例です。

ExcelVBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim sAddress As String 3 4 If Target.Address(False, False) <> "A1" Then Exit Sub 5 6 Me.Unprotect 7 8 Select Case Target.Value 9 Case 1 10 sAddress = "B8,B7" 11 Case 2 12 sAddress = "B7,B8" 13 End Select 14 15 If Len(sAddress) > 0 Then 16 With Me.Range(sAddress) 17 With .Areas(1) 18 .Locked = False 19 .Interior.Color = vbYellow 20 End With 21 With .Areas(2) 22 .Locked = True 23 .Interior.Color = rgbLightGray 24 End With 25 End With 26 End If 27 28 Me.Protect 29End Sub

さらに色が変えて保護するにはどうすればよいのかがポイントになると思います。

↑この辺は、マクロの記録で探ってみたりWebで検索してみるといいでしょう。
色は初心者本ではRGB関数を使う例をだいだい紹介していると思いますが、
組み込み定数というのがあるようですので、それを検索してみてください。

あと、チェックボックス等との関連ですが、
イベントが発生したときに、それの値を見に行けばいいでしょう。
もちろんそちらの操作でもイベント発生時にマクロを実行したければ、
そちらのコードも書く必要があります。

どうしてもマクロということなので、
だいぶ苦労して試行錯誤しないと完成には遠いかと思われます。

条件付き書式なら、
チェックボックスの値を見ることはできませんが、
チェックボックスとセルをリンクすることができるので、
そちらの値で操作可能かと思います。

まぁ、どちらも意味不明な呪文を組み立てるのは同じなんですが^^;

投稿2020/04/17 23:50

編集2020/04/17 23:53
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pokemonta

2020/04/18 05:08

懇切丁寧に解説頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問