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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

701閲覧

VBA セルに変更があったときに起動、セルの入力内容に応じてドロップダウンリストを作成

321Kurumins

総合スコア18

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/04/16 07:23

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("C")) Is Nothing Then Exit Sub

If Target.Value = "パイプ" Then MsgBox "are you ready?"
With ActiveCell.Offset(0, 1).Validation
.Delete
.Add xlValidateList, 1, , "10,15,20,25,32,40,50,65,80,100,125,150,200,250,300,350"
End With
With ActiveCell.Offset(0, 3).Validation
.Delete
.Add xlValidateList, 1, , "SGP-E,SGP(W)-E,STPG370-S,SUS304TP-S,SUS304TP-A,SUS316TP-A"
End With
With ActiveCell.Offset(0, 5).Validation
.Delete
.Add xlValidateList, 1, , "SCH10S,SCH40,SCH80"
End With

If Target.Value = "45°エルボ" Then MsgBox "are you ready?"
With ActiveCell.Offset(0, 1).Validation
.Delete
.Add xlValidateList, 1, , "15,20,25,32,40,50,65,80,100,125,150"
End With
With ActiveCell.Offset(0, 3).Validation
.Delete
.Add xlValidateList, 1, , "FCMB,FCMB+ZN,FSGP,FSGP(W),S25C,SUS304,SUS304W,SUS316,SUS316W"
End With
With ActiveCell.Offset(0, 5).Validation
.Delete
.Add xlValidateList, 1, , "Rc1/2,Rc3/4,BW,SCH80 SW,SCH80 Rc1/2,SCH80 Rc3/4,SCH10S BW"
End With

・ 同じようなコードが続きます。

C列にドロップダウンリストを設定していて、そこの入力が変更されたときにVBAが起動。C列の入力内容に応じてドロップダウンリストをセルに作るように設定したいのですが、一番下に設定しているものが参照されて途中のものがうまくいきません。何が間違っているかわからないので教えてください。

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

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

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

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

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

jinoji

2021/04/16 09:33

まず、質問を編集して「コードの挿入」を使ってコード部分を見やすくすることをお勧めします。
guest

回答1

0

ベストアンサー

VBA

1 Select Case Target.Value 2 Case "パイプ" 3 With Target.Offset(0, 1).Validation 4 .Delete 5 .Add xlValidateList, 1, , "10,15,20,25,32,40,50,65,80,100,125,150,200,250,300,350" 6 End With 7 With Target.Offset(0, 3).Validation 8 .Delete 9 .Add xlValidateList, 1, , "SGP-E,SGP(W)-E,STPG370-S,SUS304TP-S,SUS304TP-A,SUS316TP-A" 10 End With 11 With Target.Offset(0, 5).Validation 12 .Delete 13 .Add xlValidateList, 1, , "SCH10S,SCH40,SCH80" 14 End With 15 16 Case "45°エルボ" 17 ' 18 ' 19 ' 20 Case Else 21 22 End Select 23 24

・ ActiveCell は Target とは別のセルになるはず。
(たとえばEnterで入力を確定したらActiveCellは次の行になる)

・If文がMsgBox を出すかどうかだけの役割になっていて、Target.Valueの値にかかわらず全てのValidation設定の行が実行されてしまいます。結果、最後の条件のものが生き残るのだと思います。

投稿2021/04/16 09:43

jinoji

総合スコア4592

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

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

321Kurumins

2021/04/18 23:44

お早いご回答ありがとうございます。 教えて頂いた通りのコードでうまくいきました! ただ、セルを1度変えてしまうと処理が止まってしまいます。 何度セルを変えても処理してくれるようにしたいのですがどうしたらいいですか?すみませんがお願いします。
jinoji

2021/04/19 03:38

Select Case Target.Value の上に Application.EnableEvents = False を入れ、 End Select の下に、 Application.EnableEvents = True を入れたらどうでしょう。
321Kurumins

2021/04/19 23:10

ありがとうございます。 その方法でうまく処理するようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問