質問
[VB2008]リストボックスで項目の重複を避ける
- 投稿日時:2009/07/29 00:56
タイトル通り、リストボックスに項目を追加した時に
同じ項目が2つにならないようにするにはどうすればよいでしょうか?
例えば
「あ
い
う」とリストボックスに入っていたとして
ここに「あ」を追加した時に
「い
う
あ」という風になるようにしたいです。
ご回答よろしくお願いします。
回答 (3件)
- 最新から表示
- 回答順に表示
- ベストアンサーのみ表示
No.3ベストアンサー20pt
- 回答日時:2009/08/05 16:29
補足に示した書き方で大丈夫です。あとは***のところに適当な変数名を入れてください。
あるいは次のようにFor Eachの中でAs宣言しちゃっても大丈夫です。
Dim objItems As Object() = {"あ", "い"}
For Each objItem As Object In objItems
AddItem(ListBox1, objItem)
Next
この回答へのお礼
解決しました!
かなり頭を悩ませていたものだったので
ちゃんと動作して気分爽快です!
ご丁寧なご回答ありがとうございます!
No.2
- 回答日時:2009/08/04 23:28
#1 Wizard_Zeroです。以下、補足に対する回答です。
単純に考えれば、同じコトを2回やればよいだけです。その場合は、イベントメソッド内ではなく独立したメソッドにしたほうがコーディングの効率があがります。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
AddItem(ListBox1, "あ")
AddItem(ListBox1, "い")
End Sub
' Controlに指定したリストボックスにItemを追加
' すでにItemが存在している場合は削除する
Private Sub AddItem(ByVal Control As Windows.Forms.ListBox, ByVal Item As Object)
Dim intIndexOf As Integer = Control.Items.IndexOf(Item)
Do While intIndexOf >= 0
Control.Items.RemoveAt(intIndexOf)
intIndexOf = Control.Items.IndexOf(Item)
Loop
Control.Items.Add(Item)
End Sub
ただし、リストの項目数が多くなった場合にこの方法だと時間がかかってしまうかもしれませんね・・・。
(ためしに「あ」「い」「う」をそれぞれ1000個ずつ、合計3000アイテムに増やして上記コードを実行してみた結果、0.3秒ほどで処理できました。大して問題ないかも??)
この回答への補足
何度も何度も申し訳ないんですが
実際には「あ」「い」が同じ配列の中に代入されているので
配列を1行目から順番に処理するようにしたいんです。
例えば
Dim 配列 As String() ={"あ", "い"}
Dim *** As String
For Each *** In 配列
AddItem(ListBox1,***)
Next
のようにすればできると思っているのですが
間違っているでしょうか。
For Each ~ Nextの使い方がよくわかっていないので
たぶん間違っていると思います。
ご教授よろしくお願いします。
- 質問者のみ
- この回答にお礼をつける
No.1
- 回答日時:2009/07/29 02:42
手順としては、
1. 同じ項目があるかを調べる。
2. 存在する場合はその項目を削除。
3. 1~2で削除する項目がなくなるまで繰り返し、項目を追加
となります。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.Items.Add("あ")
ListBox1.Items.Add("い")
ListBox1.Items.Add("う")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 追加する項目
Dim strAddItem As Object = "あ"
' 追加する項目をリストから検索
Dim intIndexOf As Integer = ListBox1.Items.IndexOf(strAddItem)
' リストに項目が存在する限りループ
Do While intIndexOf >= 0
' 重複項目を削除
ListBox1.Items.RemoveAt(intIndexOf)
' 再び検索
intIndexOf = ListBox1.Items.IndexOf(strAddItem)
Loop
' 項目を追加
ListBox1.Items.Add(strAddItem)
End Sub
この回答への補足
では、もし
リストボックスのアイテムが
「あ
い
う」
となっているときに
「い
あ」
という項目を追加し、「い」と「あ」で重複チェックをかける場合はどうすればいいでしょうか。
strAddItemにそのまま入れてしまえばいいのでしょうか?
ご回答よろしくお願いします。
- 質問者のみ
- この回答にお礼をつける
このQ&Aを見た人はこんなQ&Aも見ています
- ListBoxにAddItemする際、重複しないようにしたい
- Excel VBA リストボックスの複数列表示の方法について
- 配列の中に重複文字列があるか否かをチェックしたいのですが、アルゴリズムを教えてください。
- 4VB.NETのListBoxで指定した項目のValueを取得する方法
- 5VB.NETのコンボボックスについて
- 6EXCEL VBA で現在開いているブックのファイル名を取得する方法
- 7Functionの戻り値を配列にしたいのですが
- 8TextBoxに半角数字のみの入力しかできないようにしたい
- 9データセットのレコード更新がしたい
- 10配列の内容に重複をなくすには・・・
- 11CloseとDisposeの違い
- 12エクセルマクロ 特定の文字列を含む行を削除
- 13【VB】コンボボックスにデータベースから取り出した値を入れたい
- 14VB上で実行中の無限ループの止め方
- 15Excel VBA コンボボックスの初期値の設定について
- 16Excel(VBA)で配列の要素数を調べるには?
- 17ListView 項目の選択/選択解除について
- 18ラジオボタンの初期指定
- 19VB6.0 CSVファイル読み込みについて
- 20EXCEL マクロ リストボックスよりシート名を選択してシートを選択
注目の記事
GoogleChromeで開いているタブをiTunes風にする方法
Google Chromeで、開いているタブをiTunes風にかっこよく表示できるアドオンを紹介します。タブで開いているページすべてを、こんな感じでずらりと立体的に並べて表示できるアドオンです。...
このQ&Aを見た人がよく見るQ&A
このカテゴリで人気のQ&Aランキング
- 4Sub ***( ) と Private Sub ***( ) ...
- 5スプレッドシートの基本的な事
- 6VBA初心者の勉強法とお勧めの書籍
- 7EnumとType
- 8VBA マクロ実行時エラー 1004
- 9実行時エラー429
- 10VBAで別エクセルファイルから指定エ...
- 11Functionの戻り値を配列にしたいの...
- 12他言語で言うcontinue文
- 13定数配列の書き方
- 14VB2010で、シリアル通信の方法を教...
- 15VB6.0で、ランタイムエラーを全て出...
- 16TextBoxに半角数字のみの入力しかで...
- 17Excelで400というエラー
- 18Exel VBA 別ブックから該当データ...
- 19エクセルVBAでファイル・シート名を...
- 20VB6で印刷の幅を調べたい