|
▼Misako さん:
こんばんは。
>でも何故iの変数が0〜2の動きなのでしょうかね?
ん? iが0〜2というような変化することが疑問に思う事の真意がちょっと
わかりませんが・・・。
Combobx1のメンバーはList()という配列に格納されています。
List()の最初の添え字が0なのですよ!!
例えば、上記のCombobox1にメンバとして、あ、い、う、え、お という5文字が
登録されているとすると・・・、
Combobox1.List(0) ------> あ
Combobox1.List(1) ------> い
Combobox1.List(2) ------> う
Combobox1.List(3) ------> え
Combobox1.List(4) ------> お
となります。このListという配列の添え字としてiは使われています。
ですから、iは、0,1,2という変化をFor文によって制御され、
Combobox1のメンバを全て取得することが出来るのです。
これでいかがですか?
投稿ついでに、
提示されたコンボボックスに重複なしデータの登録処理コードは、
データによっては、重複なしデータになりません。
新規ブックにて確認してください。
ユーザーフォーム(Userform1)を一つ作成してください。
このUserform1には、コンボボックス(Combobox1)を一つだけ配置してください。
このUserform1のモジュールには、提示されたコードをそのまま記述します。
'=================================
Private Sub UserForm_Initialize()
Dim k As Long
Dim i As Long
For k = 6 To Range("A65536").End(xlUp).Row
For i = 0 To ComboBox1.ListCount - 1
If Cells(k, 1).Value = ComboBox1.List(i) Then
Exit For
End If
Next i
If i = ComboBox1.ListCount Then
ComboBox1.AddItem Cells(k, 1).Value
End If
Next k
End Sub
標準モジュールに
'===============================================================
Sub main()
With ActiveSheet.Range("a6:a20")
.Value = [{1;2;3;4;5;5;5;6;7;8;9;10;9;9;9}]
MsgBox "A列にサンプルデータ作成しました。" & vbCrLf & _
"これから、ユーザフォームのコンボボックスに重複なし登録します"
End With
UserForm1.Show
End Sub
としてmainを実行してみてください。
本来なら、コンボボックスには、
1,2,3,4,5,6,7,8,9,10 というメンバが登録されなければならないのに
数字が重複して登録されていませんか?
どこかにバグがありますから、考えてみてください。
|
|