コンボボックス用Collectionオブジェクトにメンバを追加するAddメソッドとは?
Question 76.5 Excel VBA Borad (掲示板)より Previous Next
はじめて投稿させていただきます。いまVBAを勉強中の初心者なのですが、
このHPのMacro[コントロール1・コンボボックス] のページの [
コンボボックスのリストをセットする (重複除去)] のところで、ほかは大体理解できたのですが、Private~から14行目の
リスト.Add 各セル.Value, CStr(各セル.Value) というくだりがどうしても理解できません。
どなたかお教えいただけないでしょうか? よろしくお願いします。
Answer   2005.11.17 Yoshioh Nagai
コンボボックス このHPの主宰者の永井善王です。
熱心にご覧いただき、ありがとうございます。

ご質問にあるページのマクロは下記のとおり(コメントは今回追加しました)で、実行すると右図のように、
ワークシートにあるソースデータをコンボボックスのリストに、重複を取り除いて追加してくれます。
マクロの14行目のコードは、Collectionオブジェクトにメンバを追加してくれるAddメソッドを利用していますが、少々難しいですね。
Private Sub UserForm_Initialize()               'ユーザーフォームを初期化する
Dim リスト As New Collection
Dim 列 As String, 上端セル As String, 最下端セル As String
Dim セル範囲 As Range, 各セル As Range

    列 = "B"                                    '※3
    上端セル = 列 & "2"                         '※4
    最下端セル = 列 & "65536"
    With Worksheets("SSS")                      '※5
        Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp))
    End With
    For Each 各セル In セル範囲                 'セル範囲の各セルについて繰り返し処理
        On Error Resume Next                  '次行が実行時エラーならその次行から継続
        リスト.Add 各セル.Value, CStr(各セル.Value)
                                               'Collectionオブジェクトにメンバを追加
        If Err.Number = 0 Then                 '実行時エラーが発生していなければ
            Me.ComboBox1.AddItem 各セル.Value   'コンボボックスのリストに項目を追加
        End If
        On Error GoTo 0
    Next
End Sub
14行目のコードと機能は次のとおりです。
コード:  
リスト.Add 各セル.Value, CStr(各セル.Value)
      (1)  (2) (3)       (4)
機能:   (1) ・・・ 「リスト」という名前の新しいCollectionオブジェクトに
      (2) ・・・ 引数で指定した方法でメンバを追加する
      (3) ・・・ (Item引数) メンバのアイテムは各セルの値
      (4) ・・・ (Key引数) メンバの位置は文字列型(注)の各セルの値 (注)CStr関数で変換している

このコードはVBAの内部で行われるだけですから、実際にコンボボックスのリストに追加するのは16行目のコードになります。 何故、こんなことをしているのかですが、
Addメソッドはコレクションに既存メンバと重複する値を追加しようとするとエラーが発生するので、13、15、18行目のエラー処理コードが機能して重複が除去されることになります。

Addメソッド
構文: 
object.Add item, key, before, after
指定項目(引数)内容
object(必須) オブジェクトへの参照を表すオブジェクト式を指定
item(必須) コレクションに追加するメンバを表す式を指定
Key (省略可) コレクションの各メンバを処理するときに、位置を表す数値の代わりに使用できる、重複しない文字列を文字列式で指定
before (省略可) コレクションの中の相対的な位置を表す式を指定(この前に追加される)
after (省略可)             〃         (この後に追加される)
※ 詳細はVBAのヘルプを参照
サンプルブックのダウンロードは ここをクリック  (YNxv233_ComboBox1_Cyofuku.xls 42KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro