柔軟に働き方を選ぶ時代に必要なこと >>

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

A 回答 (2件)

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/15 16:12

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/15 16:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング