• ベストアンサー

VBA Combboxの項目について

エクセルVBAのUserFormのcombboxで表示する項目を、 AddItemで追加した後に、 項目をabc順で表示する様に並びかえる方法はありますか? AddItemで追加する前に並びかえてから AddItemで追加するしかないのですか?

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Sortプロパティといった機能が無いのでAddItemで代入する際に順序を決めておかないとダメですね 下記のようなプロシージャでアイテムを追加するとか 呼び出し方は myAddItem ComboBox1, 追加アイテム Sub myAddItem(ctl As ComboBox, obj as String)   dim n as Integer   n = ctl.ListCount - 1   if ctl.ListCount > 0 then     ' 文字列の比較になるので数値順にならない場合があります     ' 適宜修正してください     do while ctl.List(n) > obj       n = n -1       if n < 0 then exit do     Loop     n = n + 1   end if   ctl.AddItem obj,n End Sub

wepeel
質問者

お礼

追加前にソートするしかないようですね。 参考になりました。ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

excelのシートを使って並び替えてもらうのはどうでしょう たとえば、 ComboBox1.AddItem 123 とかの代わりに ComboBoxAddItem ComboBox1, 123 で追加してください。 並び替え方は、sortの部分を変更してください。 Sub ComboBoxAddItem(combo As ComboBox, newData As Variant) Dim ws As Worksheet Dim n As Integer Dim i As Integer Set ws = Sheet2 '作業用シート(適当なシートを指定してください) n = combo.ListCount 'comboのデータ数 'comboのデータを作業用シートへ ws.Cells.Clear For i = 1 To n ws.Cells(i, 1) = combo.List(i - 1) Next '追加データを作業用シートへ ws.Cells(n + 1, 1) = newData 'sort(必要に応じてパラメータを変更してください) ws.Range(ws.Cells(1, 1), ws.Cells(n + 1, 1)).Sort Key1:=Cells(1, 1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom '作業用シートのデータをcomboへ combo.Clear For i = 1 To n + 1 combo.AddItem ws.Cells(i, 1) Next End Sub

wepeel
質問者

お礼

追加前に並び替えるため、 シートを使ってソートするのも1つの手ですね。 参考になりました。 ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A