
ExcelのVBAでの、すごく初歩的な質問です。Comboboxに読み込まれるリストがシートのA1:A10にあります。ところどころ空白なので、ComboboxのDropDownListにも空白が出でます。この空白を消すために次のようなコードを書いて実行しますがいろいろやってもエラーになってしまいます。どうもRemoveItemのあたりがおかしいようなのですが、どうすればいいのでしょうか?よろしくおねがいします。
ComboBox1.RowSource = "A1:A10"
I = ComboBox1.ListCount - 1
For n = I To 0 Step -1
If ComboBox1.List(n) = "" Then
ComboBox1.RemoveItem (n)
End If
Next
No.2
- 回答日時:
下記はワークシートに直接コンボボックスを貼りつけています。
UserFormには貼りつけていません。後者だと結論は別になるかも知れないと思います。
(1)まず周辺から。ComboBox1.RowSource = "A1:A10" について。
これは実際には、どの様にコーディングされましたか。上のままではエラー
になると思いますが。
(A)Worksheets("sheet1").ComboBox1.RowSource = Range("a1: a10")もダメでした(このメソッドをサポートしていません。)
(B)私はいつもListFillRangeにA1:A10と入れています。
(C)Worksheets("sheet1").ComboBox1.RemoveAllItemsもエラーになりました(このメソッドをサポートしていません。)
(D)ある本に「コンボボックスコントロールにワークシートのデータが設定されている場合は、Additemメソッドが利用できませんとあります。ListFillRangeを使った場合か。
(E)項目の追加の別方法について
Sub test03()
For i = 1 To 10
Worksheets("sheet1").ComboBox1.AddItem Cells(i, 1)
Next i
End Sub
もダメでした。
(2)項目削除について
4点注意点・心配な点があります。
(A)ListIndexは0から始まるが、Forループはi=1から始めやすい。
(B)RemoveItem n のn は第n番目の項目である。ListIndexと1ずれる。
(C)1つ削除するとループの終わりが1つ手前にずれる。
(D)1つ削除すると次ぎの削除するListIndexは同じListIndex番号に
なる。
Sub test01()
For i = 0 To 9
Worksheets("sheet1").ListBox1.AddItem Worksheets("sheet1").Cells(i + 1, 1)
Next i
i = Worksheets("sheet1").ComboBox1.ListCount
' MsgBox i
p = 0
For n = 0 To i - 1
' MsgBox Worksheets("sheet1").ComboBox1.List(n)
If Worksheets("sheet1").ComboBox1.List(n) = "" Then
' MsgBox n
MsgBox p
Worksheets("sheet1").ComboBox1.RemoveItem p
i = i - 1
Else
p = p + 1
End If
Next
End Sub
でやりましたがダメでした。
(3)VB6.0で
Private Sub Form_Load()
l = Array("a", "b", " ", "c", "d", _
"e", " ", "f", "g", " ")
For i = 0 To 9
Form1.Combo1.AddItem l(i)
Next i
i = Form1.Combo1.ListCount
For n = 0 To i - 1
MsgBox n
If Form1.Combo1.List(n) = " " Then
Form1.Combo1.RemoveItem n
Else
End If
Next
End Sub
で上手く行くようです。
「内容なし項目」はスペース1字に変えています。
この場合、(2)の(C)と(D)は考えなくて良いことが判りました。
(4)エクセルVBAで
Sub test01()
l = Array("a", "b", " ", "c", "d", _
"e", " ", "f", "g", " ")
For i = 0 To 9
Worksheets("sheet1").ComboBox1.AddItem l(i)
Next i
i = Worksheets("sheet1").ComboBox1.ListCount
MsgBox i
For n = 0 To i - 1
MsgBox n
If Worksheets("sheet1").ComboBox1.List(n) = " " Then
Worksheets("sheet1").ComboBox1.RemoveItem n
Else
End If
Next
End Sub
は上手く行きます。
Worksheets("sheet1").ComboBox1.RemoveAllItemsはエラーになります(
このメソッドをサポートしていません。)
テストで何度も実行すると、項目が累積しますので注意。
結論として、エクセルVBAでワークシート上にコンボボックスを貼りつけると、RemoveIten が使えないのではないでしょうか。
であれば、ListFillRangやDatasourceを使わず、シートのセルA1:A10から自分で、空白分は除いて、、AddItemでセットすることになるでしょう。
どうも沢山情報をありがとうございます。当方がやってみたのは、UserForm上にComboBoxを張るつける方です。これだと、ComboBox1.RowSource = "A1:A10"はうまくいきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
EXCEL sheet1 と sheet2 を使っ...
-
エクセルで項目抽出
-
エクセルで赤い字のセルを抽出
-
Excel2000 VBA ダブルクリック...
-
Copyコマンドについて
-
VBA重複チェック
-
excelのマクロでrangeの選択が...
-
エクセルで別シートにある各々...
-
【Excel関数】商品コードと商品...
-
Excel VBAのComboboxのRemoveItem
-
ISERROR関数
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
エクセルでフィルタ後の条件付...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセル(勝手に太字になる)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
エクセル 1つのセル毎に入力...
-
データーを横列にしたいのですが。
-
VBA エクセル EXCEL マクロ
-
Excel 文字列一部含む場合の戻...
-
excelのマクロでrangeの選択が...
-
Excel VBAのComboboxのRemoveItem
-
Excel VBA For Each Next構文...
-
ExcelのVBAの配列に関する質問...
-
種類ごとに横に並んだ数字を別...
-
vbaにて並べ替えしたい。
-
エクセル関数内の行番号を同じ...
-
【Excel関数】商品コードと商品...
-
エクセルで項目抽出
-
エクセルで重複するセルを削除...
-
EXCEL 行内のデータを2行に分け...
-
エクセルの関数を連続コピー
-
エクセルのIF関数がうまくいき...
-
エクセルのフォームのVBAについて
-
#N/A表示を空白にしたいのです...
おすすめ情報