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

解決済みの質問

Excel VBAのコンボボックス

お世話になります。
コンボボックス1と2と3は選択されますが
コンボボックス4には何の表示もされません。
選択して条件設定は4つ以上できないのでしょうか?
Dim ITE As Variant
Dim flg As Variant
Private Sub ComboBox3_Change()
'ComboBox4セット
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("data")
KEY = Me.ComboBox1.Text
KEY2 = Me.ComboBox2.Text
KEY3 = Me.ComboBox3.Text

Me.ComboBox4.Clear

Do While .Cells(ico, 1) <> ""
If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 Then
ITE = .Cells(ico, 4).Value
flg = 0
For I = 0 To Me.ComboBox4.ListCount - 1
If ITE = Me.ComboBox4.List(I) Then flg = 1
Next
If flg = 0 Then Me.ComboBox4.AddItem ITE
End If
ico = ico + 1
Loop
End With
Me.ComboBox4.SetFocus
End Sub

投稿日時 - 2007-01-14 15:00:20

QNo.2665554

すぐに回答ほしいです

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

暇なのでまたまた登場しました。(^^;;;

VENZOUさんの回答にもありますように、
Key関係の変数が宣言してありませんのでそれらの型はVariantになり

  Key3=ComboBox3.Text

このKey3には項目「設置」の数字が入りますがComboBox3.Textは文字列ですから、
Key3に代入された数字は、「数値」ではなくて「文字列の数字」になります。
ですから、

  If Key3=.Cells(ico,3) Then

これは、「文字列の数字」と「数値」を比較することになり
同じ、100 でもイコールでないことになるわけです。

で、今回の場合、Key3には数値が入るようにすればいいわけですから

  Key3 = Val(ComboBox3.Text)
とか
  Key3 = CInt(ComboBox3.Text)

とかして数値に変換してKey3に入れてやればOKです。

が、一番大事なことは、変数は必ず宣言し、変数の型は可能な限り、Variant型ではなくて、
その変数にあった型を宣言しておき、比較などその変数を扱うときは必ず同じ型にして扱うようにしましょう。

それから、
Dim Key As String
Dim Key2 As String
Dim Key3 as Integer
Dim Key4 As Integer

このように型まで宣言しておくと

  Key3=ComboBox3.Text

このKey3には文字列の数字を代入してもエクセルの方で数値とみなしてくれますが、
やはり、先にも書いたように「数値」に変換して代入するのが正しい方法です。

以上です。
 

投稿日時 - 2007-01-14 21:03:31

お礼

いつもありがとうございます。
できました!
宣言がなかなか理解できなくて・・・。
でも、本で基本を読みました。
わかったような気がします。
今後ともよろしくお願いします。

投稿日時 - 2007-01-16 23:36:43

ANo.3

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

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

回答(3)

ANo.2

Variantの変数に数値が入った場合、文字との比較が期待どうりになってませんね。(該当箇所、多数あります。)

Variant ではなく String で宣言して見て下さい。

Dim ITE As String
Dim flg As Integer
Dim KEY As String
Dim KEY1 As String
Dim KEY2 As String
Dim KEY3 As String
Dim KEY4 As String
Dim I As Integer

投稿日時 - 2007-01-14 19:53:38

お礼

できました!

宣言がまちがっていたようです。
ありがとうございました。

投稿日時 - 2007-01-16 23:28:26

ANo.1

再度の登場です。
先ほどのComboBox3がちゃんと表示されてるのなら
今回のコードは、3を4に変えてるだけですから
条件を満たすデータがあれば表示されるはずですよね。
表示されないということは、条件を満たすデータがないと考えられます。
で、IFの後にMSGBOXを入れて条件を満足するルーチンを通ってるか確認してみたらどうですか。

If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 Then
  ● MsgBox "データあり"
ITE = .Cells(ico, 4).Value
 
以上です。

投稿日時 - 2007-01-14 17:27:20

補足

何度もすみません。
データはあるのですが・・・。
やってみましたが、メッセージはでませんでした。
文字列に問題があるのでしょうか?
番号がコンボボックス4です。
データシートのA列からE列までの表です。
処理温度設置番号号
サクイル-40~851001a
サクイル-40~851002b
サクイル-40~1255003c
サクイル-40~1255004d
連続-40~12510005d
すべてのコードです。
Dim ITE As Variant
Dim flg As Variant
Private Sub UserForm_Initialize()
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("data")
Do While .Cells(ico, 1) <> ""
ITE = .Cells(ico, 1).Value
flg = 0
For I = 0 To Me.ComboBox1.ListCount - 1
If ITE = Me.ComboBox1.List(I) Then flg = 1
Next I
If flg = 0 Then Me.ComboBox1.AddItem ITE
ico = ico + 1
Loop
End With
Me.ComboBox1.SetFocus
End Sub

Private Sub ComboBox1_Change()
'ComboBox2セット
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("data")
KEY = Me.ComboBox1.Text
Me.ComboBox2.Clear
Do While .Cells(ico, 1) <> ""
If .Cells(ico, 1) = KEY Then
ITE = .Cells(ico, 2).Value
flg = 0
For I = 0 To Me.ComboBox2.ListCount - 1
If ITE = Me.ComboBox2.List(I) Then flg = 1
Next
If flg = 0 Then Me.ComboBox2.AddItem ITE
End If
ico = ico + 1
Loop
End With
Me.ComboBox2.SetFocus
End Sub
Private Sub ComboBox2_Change()
'ComboBox3セット
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("data")
KEY = Me.ComboBox1.Text
KEY2 = Me.ComboBox2.Text
Me.ComboBox3.Clear

Do While .Cells(ico, 1) <> ""
If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 Then
MsgBox "データあり"●ここではでます。
ITE = .Cells(ico, 3).Value
flg = 0
For I = 0 To Me.ComboBox3.ListCount - 1
If ITE = Me.ComboBox3.List(I) Then flg = 1
Next
If flg = 0 Then Me.ComboBox3.AddItem ITE
End If
ico = ico + 1
Loop
End With
Me.ComboBox3.SetFocus
End Sub
Private Sub ComboBox3_Change()
'ComboBox4セット
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("data")
KEY = Me.ComboBox1.Text
KEY2 = Me.ComboBox2.Text
KEY3 = Me.ComboBox3.Text

Me.ComboBox4.Clear

Do While .Cells(ico, 1) <> ""
If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 Then
MsgBox "データあり"●ここではでません。
ITE = .Cells(ico, 4).Value
flg = 0
For I = 0 To Me.ComboBox4.ListCount - 1
If ITE = Me.ComboBox4.List(I) Then flg = 1
Next
If flg = 0 Then Me.ComboBox4.AddItem ITE
End If
ico = ico + 1
Loop
End With
Me.ComboBox4.SetFocus
End Sub
Private Sub ComboBox4_Change()
'ComboBox5セット
Dim ico As Long
ico = 1
With ThisWorkbook.Worksheets("data")
KEY = Me.ComboBox1.Text
KEY2 = Me.ComboBox2.Text
KEY3 = Me.ComboBox3.Text
KEY4 = Me.ComboBox4.Text

Me.ComboBox5.Clear

Do While .Cells(ico, 1) <> ""
If .Cells(ico, 1) = KEY And .Cells(ico, 2) = KEY2 And .Cells(ico, 3) = KEY3 And .Cells(ico, 4) = KEY4 Then
ITE = .Cells(ico, 5).Value
flg = 0
For I = 0 To Me.ComboBox5.ListCount - 1
If ITE = Me.ComboBox5.List(I) Then flg = 1
Next
If flg = 0 Then Me.ComboBox5.AddItem ITE
End If
ico = ico + 1
Loop
End With
Me.ComboBox5.SetFocus
End Sub

投稿日時 - 2007-01-14 17:42:09

あなたにオススメの質問