こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Case文による選択肢をさらにあるセルの条件によって分けたい。

EXCEL VBAについての質問です。
初心者です。宜しくお願い致します。
使用環境はWindows 2000 service pack4
Excel 2000.

=質問=
現在、以下のようなプログラムを記しています。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .Address = "$D$11" Then
With UserForm1
.ListBox1.List = Array("abc", "def","ghi")
.Show (0)
End With
ElseIf .Address = "$D$12" Then
With UserForm2
Select Case Range("$D$11")
Case "abc"
.ListBox1.List = Array("あ", "い","
う", "え", "お")
Case "def"
.ListBox1.List = Array("A, "B","C", "D")
Case "ghi"
.ListBox1.List = Array("いろ", "はに", "ほへ", "とち")

End Select
.Show (0)
End With
End If
End With

これはセルD11をクリックするとユーザーフォーム1(リストボックス1)が現れ"abc,def,ghi"が選択でき、その選択内容によってセルD12の内容が変化するといったものです。

この応用としてD11の選択肢に加えセルA1の内容(例えば1,2,3)の選択内容によってD12に表示される選択肢をさらに細分化したい。

例えばセルD11で"ghi"を選択する。
上記のプログラムそのままではセルD12をクリックした時に
("いろ", "はに", "ほへ", "とち")が選択肢としてユーザーフォーム2(リストボックス2)に表示されます。
それをセルA1の表示が"1"の時にセルD12をクリックしたら("いろ", "はに")、セルA1の表示が"2"にセルD12をクリックしたら("ほへ", "とち")
セルA1の表示が"3"の時にセルD12をクリックしたら選択肢なしという風に分けたい。

Case "ghi"から以下にif文などを挿入し作成してみましたが、うまく作動しませんでした・・・

上記、質問に対し、どのようにプログラムを変更すればよいがご教授いただくようお願い致します。

投稿日時 - 2009-09-12 12:01:16

QNo.5283300

すぐに回答ほしいです

質問者が選んだベストアンサー

Select Case Range("$D$11")
  Case "abc"
    .ListBox1.List = Array("あ", "い","う", "え", "お")
  Case "def"
    .ListBox1.List = Array("A, "B","C", "D")
  Case "ghi"
   '.ListBox1.List = Array("いろ", "はに", "ほへ", "とち")
   if Range("A1").Value = "1" then
     .ListBox1.List = Array("いろ", "はに")
   else if Range("A1").Value = "2" then
     .ListBox1.List = Array("ほへ", "とち")
   else
     .ListBox1.Clear
   end if
End Select
といった具合でしょうね ・・・

投稿日時 - 2009-09-12 14:42:01

お礼

アドバイスありがとうございます。
おかげさまでやりたいことができました。
プログラム自体も簡素でいいですね。
早速の回答をいただき感謝します。
以上、お礼申し上げます。

投稿日時 - 2009-09-15 04:13:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .Address = "$D$11" Then
With UserForm1
.ListBox1.List = Array("abc", "def", "ghi")
.Show (0)
End With

ElseIf .Address = "$D$12" Then
With UserForm1
Select Case Range("a1").Value
Case 1
Select Case Range("$D$11")
Case "abc"
.ListBox1.List = Array("あ", "い", "う", "え", "お")
Case "def"
.ListBox1.List = Array("A", "B", "C", "D")
Case "ghi"
.ListBox1.List = Array("いろ", "はに", "ほへ", "とち")
End Select

Case 2
Select Case Range("$D$11")
Case "abc"
.ListBox1.List = Array("ああ", "いい", "うう", "ええ", "おお")
Case "def"
.ListBox1.List = Array("AA", "BB", "CC", "DD")
Case "ghi"
.ListBox1.List = Array("いいろ", "ははに", "ほほへ", "ととち")
End Select

Case 3
Select Case Range("$D$11")
Case "abc"
.ListBox1.List = Array("あああ", "いいい", "ううう", "えええ", "おおお")
Case "def"
.ListBox1.List = Array("AAA", "BBB", "CCC", "DDD")
Case "ghi"
.ListBox1.List = Array("いいいろ", "はははに", "ほほほへ", "とととち")
End Select
End Select

.Show (0)
End With
End If
End With
End Sub

投稿日時 - 2009-09-12 15:04:50

お礼

丁寧に回答していただきありがとうございます。
確かにこの方法でもOKですね。
実は、初心者なので同じプログラムを数十個書いており、できるだけ簡素にしたいこともあり、次点とさせていただきました。
以上、お礼申し上げます。

投稿日時 - 2009-09-15 04:15:58

ANo.2

質問に書かれているものは動作するのですよね。
ちなみにテスト的に
Select Case Range("$D$11").Value
Case "ghi"
If Range("A1") = 1 Then
Range("A2") = "いろ"
ElseIf Range("A1") = 2 Then
Range("A2") = "はに"
End If
End Select
といった感じでは動作しましたが

実際どのようなIF文を追加したのでしょうか

投稿日時 - 2009-09-12 12:21:10

お礼

記載したIF文を書くべきでしたね。
以後、気をつけます。
実際の参照セルが他のシートにあり、その定義の仕方が間違っていたようです。初歩的なミスでした・・・
アドバイスありがとうございました。
お礼申し上げます。

投稿日時 - 2009-09-15 04:18:41

ANo.1

Select Case 分を入れ子にする。

投稿日時 - 2009-09-12 12:14:41

お礼

他の方からの回答で入れ子の意味がわかりました。
初心者なりに入れ子を試してみたのですが、うまくいかず質問させていただきました。
端的なアドナイスありがとうございました。

投稿日時 - 2009-09-15 04:20:46

あなたにオススメの質問