- ベストアンサー
VBでコーディング教えて!
- エクセルVBA初心者がコーディングについて質問。A列のセルがコンボボックスのリストに反映されるようにしたいが、どのようにすればよいかわからない。
- コンボボックス内のドロップダウンリストに選択肢がない場合、コンボボックスに入力し、Enterを押すとA列のセルに項目が追加されるようにしたい。
- エクセルVBA初心者がコーディングの方法を教えてほしい。コンボボックスのリストとA列のセルを連動させる方法、コンボボックスに項目がない場合の処理方法について知りたい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ComboBox1_Change に書くと、既にあるリスト項目から選択した時もイベントが起きますし、うまくいったとしてもListFillRangeが元に戻ってしまうので下記の様にしました。(ComboBox1_Changeには何も書きません) 最初のListFillRangeがA1:A20なら一番最初に、ComboBox1のプロパティ(編集モードでComboBox1を右クリックしてプロパティを選択)のListFillRangeをA1:A20としておけばいいでしょう。下記で追加する毎に更新されていきます。 次のように、ComboBox1_KeyDownに書き、Enterを押した時リストに無ければ、ListIndexが『-1』になります。この時、ListFillRangeを更新するようにしました。 更新する時は、まずListFillRangeを求めておき(セル範囲)、追加するべきセルを求め(1行下)、内容を書き込んでいます。その後、UnionでListFillRangeを、2つの範囲を結合したセル範囲に再定義しています。 Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Enterを押した場合の処理 If KeyCode = vbKeyReturn Then 'ComboBox1.Textがリストに無い場合 If ComboBox1.ListIndex = -1 Then Dim myFillRange As Range 'ComboBox1の内容リスト Dim myAddRange As Range '付け加えるセル '追加前のListFillRange・・・セル範囲1 Set myFillRange = Range(ComboBox1.ListFillRange) '追加する位置(追加前のListFillRangeの次の行)・・・セル範囲2 Set myAddRange = Range("A" & (myFillRange.Rows.Count + 1)) 'ComboBox1に入力した値を登録 myAddRange = ComboBox1.Text 'ListFillRangeを更新する(セル範囲1とセル範囲2の結合) ComboBox1.ListFillRange = Union(myFillRange, myAddRange).Address End If End If End Sub うまくいけばいいですが。では。
お礼
すごい! 完璧にうごきました! 大変ありがとう御座います。 それにしてもA1:A20は、 プロパティで設定出来たんですね! なんと言う無駄な努力をしていたのかと ナサケなく思います。 これからも、宜しくお願いします。