Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2337 / 13646 ツリー ←次へ | 前へ→

【68643】コンボボックスのドロップダウンについて レッズ命 11/3/31(木) 22:36 質問[未読]
【68647】Re:コンボボックスのドロップダウンについて UO3 11/4/1(金) 10:04 発言[未読]
【68648】Re:コンボボックスのドロップダウンについて UO3 11/4/1(金) 10:41 回答[未読]
【68649】Re:コンボボックスのドロップダウンについて UO3 11/4/1(金) 11:17 発言[未読]
【68650】Re:コンボボックスのドロップダウンについて kanabun 11/4/1(金) 12:10 発言[未読]
【68652】Re:コンボボックスのドロップダウンについて レッズ命 11/4/1(金) 13:13 お礼[未読]

【68643】コンボボックスのドロップダウンについて
質問  レッズ命  - 11/3/31(木) 22:36 -

引用なし
パスワード
   コンボボックス1の値によって、
コンボボックス2の選択肢を変えていて、
コンボボックス1を選択した時に
コンボボックス2をドロップダウンさせたくて、
下記のようなVBAをかきました。

コンボボックス1を空白にした時にのみドロップダウンするようなのですが、
どこがおかしいのでしょうか?

教えてください。 Excel2007を使用しています。

Private Sub ComboBox1_Change()

Set Rng1 = Columns("A").Find(What:="雑貨", lookat:=xlWhole)
Set Rng4 = Columns("A").Find(What:=ComboBox1.Value, lookat:=xlWhole)
Set Rng5 = Rng4.Offset(1, 0)
Set Rng10 = Rng4.End(xlDown)

With ComboBox2
   .BackColor = &H80000005
   .Enabled = True
   .Locked = False

If ComboBox1.Value = "" Then
  Rng7 = Cells(1, 2).Address & ":" & Cells(1, 2).Address
Else
  If Rng5.Value = "" Then
    Set Rng6 = Rng4.End(xlDown).Offset(-1, 0)
    If Rng10.Value <> "雑貨" Then
      Rng7 = Cells(Rng4.Row, 2).Address & ":" _
        & Cells(Rng6.Row, 2).Address
    Else
      Rng7 = Cells(Rng4.Row, 2).Address & ":" _
        & Cells(Rng1.Row - 3, 2).Address
    End If
  Else
    Set Rng6 = Rng4
    Rng7 = Cells(Rng4.Row, 2).Address & ":" _
      & Cells(Rng6.Row, 2).Address
  End If

Me.ComboBox2.DropDown

End If
   .RowSource = "買い物リスト!" & Rng7
End With

End Sub

【68647】Re:コンボボックスのドロップダウンにつ...
発言  UO3  - 11/4/1(金) 10:04 -

引用なし
パスワード
   ▼レッズ命 さん:

こんにちは
(もう1つの質問も同じように感じますが)やりたいことがよく理解できません。
やりたいことを、頭の中でロジックに組み立てて、そのロジックに関する質問を
投げかけておられますが、そのロジック自体が、必ずしも適切でない場合もあります。

まずは、対象としているシート上のデータの構成、そして、そこで、
【そんな処理】ではなく【どんな作業】を【どんな手順】で行いたいのかを
【言葉】で説明されてはいかがでしょう。

ざっとコードを拝見しましたが、????という部分が少なくありません。

【68648】Re:コンボボックスのドロップダウンにつ...
回答  UO3  - 11/4/1(金) 10:41 -

引用なし
パスワード
   ▼レッズ命 さん:

こんにちは

上で質問させていただいていますが、それと並行して、一生懸命(?)コードを読んで
シートのイメージを想像し、そこでおやりになりたいことを、これまた想像。
【雑貨】を特別扱いしているところが、まだ読み取れませんが、

・きっとシートのA列にComboBox1用の品種名がはいっているのだろう。
・そしてB列に、その品種の細目が入っているんだろう。

このように推測。
このコンボボックスがユーザーフォームのコントロールなのかシート上のActiveXコントロール
なのかが不明ですが、以下。

最初にComboBox1に値をセットするところのタイミングを、最初にComboBox1の▼が
おされた時にしていますが、このコントロールの正体(?)がわかれば、もっと適切な
ところにおくこともできます。
また各種オブジェクトを生成しっぱなしなのが気になっていますが、これもコントロールが
どちらなのかがわかれば、後始末処理も追加できます。

★RowSourceは使いませんのでプロパティで指定してあればなくしておいてください。

Option Explicit

Dim dic As Object

Private Sub ComboBox1_DropButtonClick()
  Static Ready As Boolean
  If Not Ready Then ComboSet
  Ready = True
End Sub

Private Sub ComboBox1_Change()
  ComboBox2.Clear
  If dic.exists(ComboBox1.Value) Then
    ComboBox2.List = dic(ComboBox1.Value).keys
    ComboBox2.DropDown 'これはEnd SUbのあとまた閉じると思いますが?
  End If
End Sub

Private Sub ComboSet()
  Dim c As Range
  Set dic = CreateObject("Scripting.Dictionary")
  ComboBox1.Clear
  ComboBox2.Clear
  For Each c In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
    If Not dic.exists(c.Value) Then
      Set dic(c.Value) = CreateObject("Scripting.Dictionary")
    End If
    dic(c.Value)(c.Offset(, 1).Value) = True
  Next
  ComboBox1.List = dic.keys
End Sub

【68649】Re:コンボボックスのドロップダウンにつ...
発言  UO3  - 11/4/1(金) 11:17 -

引用なし
パスワード
   ▼レッズ命 さん:

すこしトンチンカンな(?)レスをしたようです。
まず、コードをよく見ましたが、ユーザーフォームのコンボボックスでしたね。
で、質問は、ドロップダウンしたいのにされないということにたいするもの
だったんですね。

失礼しました。

ところで、

>コンボボックス1を空白にした時にのみドロップダウンするようなのですが

と書いておられますが本当ですか?
逆ではないのですか?
アップされたコードにインデントをつけて、骨格のみ抜きだしますと
以下となりますが、Me.ComboBox2.DropDown を記述しているブロックは
ComboBox1.Value = "" 【ではない場合】ですよね。
いずれの場合でもドロップダウンということなら記述する場所は、しの下の
End If のさらに下ではないでしょうか?

それと、上でアップしたレスで申し上げましたように2003では、この
ComboBox2.DropDown で、その瞬間はドロップダウンされますが、
このプロシジャを抜けると(End Sub) また閉じられます。
2007では、そこが改善されているのでしょうか。

  If ComboBox1.Value = "" Then
    Rng7 = Cells(1, 2).Address & ":" & Cells(1, 2).Address
  Else
    If Rng5.Value = "" Then
      Set Rng6 = Rng4.End(xlDown).Offset(-1, 0)
      If Rng10.Value <> "雑貨" Then
        Rng7 = Cells(Rng4.Row, 2).Address & ":" _
           & Cells(Rng6.Row, 2).Address
      Else
        Rng7 = Cells(Rng4.Row, 2).Address & ":" _
           & Cells(Rng1.Row - 3, 2).Address
      End If
    Else
      Set Rng6 = Rng4
      Rng7 = Cells(Rng4.Row, 2).Address & ":" _
         & Cells(Rng6.Row, 2).Address
    End If
    
    Me.ComboBox2.DropDown '<====
  
  End If

【68650】Re:コンボボックスのドロップダウンにつ...
発言  kanabun  - 11/4/1(金) 12:10 -

引用なし
パスワード
   ▼レッズ命 さん:
よこからすみません。

>コンボボックス1を空白にした時にのみドロップダウンするようなのですが、

↑ここに着目して、
 ComboBox1_Change()直後に {ENTER}でリスト選択を確定すると、
 ComboBox1のドロップダウンが閉じますので、
 そのあとで、ComboBox2に SetFocusして ドロップダウン▼する
 ようにしてみました。
 
 (RowSourceの範囲取得部分はもう少しまとめたほうが読みやすい
  と思いますが、とりあえず、ノーチェックです)

'-----------
Private Sub ComboBox1_Change()
  If ComboBox1.ListIndex > -1 Then
    SendKeys "{ENTER}", True
  End If
End Sub
'----------
Private Sub ComboBox1_AfterUpdate()
  Dim Rng1 As Range
  Dim Rng4 As Range
  Dim Rng5 As Range
  Dim Rng10 As Range
  Dim Rng6 As Range
  Dim ss As String
 
  Set Rng1 = Columns("A").Find(What:="雑貨", lookat:=xlWhole)
  Set Rng4 = Columns("A").Find(What:=ComboBox1.Value, lookat:=xlWhole)
  Set Rng5 = Rng4.Offset(1, 0)
  Set Rng10 = Rng4.End(xlDown)
  
  With ComboBox2
   .BackColor = &H80000005
   .Enabled = True
   .Locked = False
   
   If ComboBox1.Value = "" Then
     ss = Cells(1, 2).Address(0, 0) ' & ":" & Cells(1, 2).Address
   Else
     If Rng5.Value = "" Then
       Set Rng6 = Rng4.End(xlDown).Offset(-1, 0)
       If Rng10.Value <> "雑貨" Then
         ss = Cells(Rng4.Row, 2).Address(0, 0) & ":" _
           & Cells(Rng6.Row, 2).Address(0, 0)
       Else
         ss = Cells(Rng4.Row, 2).Address(0, 0) & ":" _
           & Cells(Rng1.Row - 3, 2).Address(0, 0)
       End If
     Else
       Set Rng6 = Rng4
       ss = Cells(Rng4.Row, 2).Address(0, 0) & ":" _
          & Cells(Rng6.Row, 2).Address(0, 0)
     End If
   End If
   
   .RowSource = "買い物リスト!" & ss
   .SetFocus
  End With

End Sub
'----------
Private Sub ComboBox2_Enter()
  ComboBox2.DropDown '▼
End Sub

【68652】Re:コンボボックスのドロップダウンにつ...
お礼  レッズ命  - 11/4/1(金) 13:13 -

引用なし
パスワード
   ▼kanabun さん:
▼UO3さん:

ご回答ありがとうございました。
説明不足だったようで、申し訳ありません。

お二人の回答を利用して、Combobox2にEnterした時に
DropDownすることにしました。

Combobox1もDropDownした状態で表示させているのですが、
それがCombobox2をDropDownさせない原因なのかと思われます。

何か解決策があれば、教えていただきたいですが、
とりあえずこれでいこうかとも思っております。

ご回答、本当にありがとうございました。

2337 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free