
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- その他(ギャンブル) BOって何歳でも始めれるんですか?当たる確率的には競馬より全然高い50%とかなんですか? 2 2022/09/06 15:13
- Excel(エクセル) Vba エクセルマクロで、 A列の、A1セルからA10セルに空白のある行を削除する、のは Range 3 2022/11/05 17:44
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA For Each Next構文...
-
種類ごとに横に並んだ数字を別...
-
vbaにて並べ替えしたい。
-
エクセル 1つのセル毎に入力...
-
エクセルの表示形式を保ったま...
-
エクセル関数内の行番号を同じ...
-
ExcelのVBAの配列に関する質問...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
2つのエクセルのデータを同じよ...
-
エクセルでオートフィルタのボ...
-
Excelで半角の文字を含むセルを...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルで、2種類のデータを...
-
エクセルで特定の文字が入って...
-
EXCELで 一桁の数値を二桁に
-
オートフィルターをかけ、#N/A...
-
エクセルのオートフィルタで最...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
Excel VBAのComboboxのRemoveItem
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
エクセルで赤い字のセルを抽出
-
Excel2000 VBA ダブルクリック...
-
VBA重複チェック
-
Copyコマンドについて
-
EXCEL sheet1 と sheet2 を使っ...
-
EXCELのマクロで一覧表に...
-
EXCEL 行内のデータを2行に分け...
-
種類ごとに横に並んだ数字を別...
-
ISERROR関数
-
エクセルのIF関数がうまくいき...
-
#N/A表示を空白にしたいのです...
-
エクセルで別シートにある各々...
-
【Excel関数】商品コードと商品...
-
エクセルで項目抽出
-
EXCELで2つの数値のうち大きい...
おすすめ情報