- ベストアンサー
VBA コンボボックスの項目入力
お世話になります。 Excel2002のVBAにて コンボボックスへの項目の入力について 質問させて頂きます。 現在行いたい処理はB27からB56のセルに入力されている数値 のなかからB62からB91に入力されている数値と重複の無いもの をコンボボックスへ追加したいと考えております(空白セルは 追加しない)。 以下の通りではどうもうまくいかないので宜しくお願いします。 ' For i = 27 To 56 ' If Range("B" & i) <> "" Then ' ComboBox1.AddItem Range("B" & i) ' For j = 62 To 91 ' If Range("B" & j) <> "" Then ' ComboBox1.RemoveItem Range("B" & j) ' End If ' Next ' End If ' Next
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ComboBox1.RemoveItem Range("B" & j) RemoveItemメソッドはこんな構文ですか? 違うのでは? 疑問が生じたら、先ずヘルプ参照!(^^;;; ま、それは置いといて、 初めから62~91にないものを登録した方がいいでしょう。 質問者のコードを利用すると(Forを2度使用) Dim flag As Boolean For i = 27 To 56 flag = False If Range("B" & i) <> "" Then For j = 62 To 91 If Range("B" & j) = Range("B" & i) Then flag = True Exit For End If Next j If flag = False Then ComboBox1.AddItem Range("B" & i) End If End If Next i '----------------------------------------- '-------- Findメソッドを使うと ---------- Dim FoundCell As Range For i = 27 To 56 If Range("B" & i) <> "" Then Set FoundCell = Range("B62:B91").Find(Range("B" & i).Value, , xlValues, xlWhole) If FoundCell Is Nothing Then ComboBox1.AddItem Range("B" & i) End If End If Next i '--------------------------------------------- 以上です。
その他の回答 (2)
- fujillin
- ベストアンサー率61% (1594/2576)
質問者さんのやりたいことは、こういうことではないの? (方法的には、必ずしも賛成ではありませんが…) ' For i = 27 To 56 ' If Range("B" & i) <> "" Then ' ComboBox1.AddItem Range("B" & i) ' End If ' Next ' For j = 62 To 91 ' If Range("B" & j) <> "" Then ' ComboBox1.RemoveItem Range("B" & j) ' End If ' Next
補足
おっしゃる通りです。 この方法も試したのですが、下のFor~Nextのループの部分で エラーが出てしまい、うまくいかないのです。
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 貴方の書いたプログラムには、「B27からB56のセルに入力されている数値のなかからB62からB91に入力されている数値と重複の無いもの」という条件が抜けています。 具体的には、「 If Range("B" & j) <> "" Then」は「B62からB91が空白セルでなければ」という条件にしか過ぎません。ここを見直してください。 では。
お礼
ご回答ありがとうございます。 >> B27からB56のセルに入力されている数値のなかからB62からB91 に入力されている数値と重複の無いもの この指定方法が分からないので、私は取り合えずB27からB56のセルに 入力されている数値は全て項目に追加して、そこからB62からB91まで の入力値を項目から削除するという方法を取ったつもりなのですが、
お礼
意図したとおりの結果を得ることができました! 本当にありがとうございました(^^)