VBA27_自作フォームに命を吹き込む(中)

こんばんは! 今度は自分のHPで四苦八苦していたBenです。
前回に引き続きオートフィルタオプションの自作ですが、今日のお題はコンボボックスにアイテム追加で選択肢を作ろうです。今回は以前ノートしたグラフの軸の一括設定ワークシート上でオートフィルタを行ったときの合わせ技です。

20151213a.png
まず、グラフの軸を一括設定したときのように、オブジェクト名に規則性を持たせて繰り返し処理で省力化を図ります。以前はグラフ1からグラフ5までを一括処理するために、オブジェクト名をグラフ1,2,3,4,5と1ずつ増えるようにして繰り返し処理で一括設定しました。今回もそれを利用します。

20151213b.png
まず、「と等しい」とか表示させる右上のコンボボックスのオブジェクト名をHantei1に変えます。プロパティウィンドウからすぐ変えられます。同じユーザーフォーム内で重複するオブジェクト名はつけられないので注意してください。同じように、右下のコンボボックスをHantei2にします。

20151213c.gif
左側2つのコンボボックスのオブジェクト名はそれぞれAtai1、Atai2としました。これで準備は完了です。あとはコードを記述していきます。

20151213d.png
以前、ユーザーフォームでもどのコントロールでもダブルクリックすると勝手にコードが追加されると書きました。実際に、ユーザーフォームをダブルクリックすると、コードが出てくるのですが、そこで御覧のように、UserformのInitializeを選択してProvate Sub Userform Initializeのイベントプロシージャを出します。これはユーザーフォームが呼び出されるときの処理の一つとしてフォームの初期化の段階で実行される部分で、今やろうとしている選択肢の準備とかにうってつけのものです。ここのプロシージャにコンボボックスに追加するコードを記述しましょう。

Private Sub UserForm_Initialize()
 Dim i As Integer
 For i = 1 To 2
  With Me.Controls("Hantei" & i)
   .AddItem ("と等しい")
   .AddItem ("と等しくない")
   .AddItem ("より大きい")
   .AddItem ("以上")
   .AddItem ("より小さい")
   .AddItem ("以下")
   .AddItem ("で始まる")
   .AddItem ("で始まらない")
   .AddItem ("で終わる")
   .AddItem ("で終わらない")
   .AddItem ("を含む")
   .AddItem ("を含まない")
  End With
 Next
End Sub
以前のグラフ軸の一括設定と同じく、オブジェクト名を「Hantei & i」としてiを1から2までにすると一つの命令で2つのオブジェクトを設定できます。WithからEnd Withはこの間でドット(.)から始まるものはWithで指定したオブジェクトのことですよ! というもので、この場合、.AddItem="以上"というのはWith文のMe.Controlls("Hantei" & i)に付け加えるものなので、i=1のときだったら、Hantei1.AddItem="以上"ということです。つまりHantei1というオブジェクト名のコンボボックスの選択肢に「以上」を追加するものです。

ちなみにMeは「私を」という意味ですが、この場合Userformが「私」になります。片言の日本語を話せる外国人が「ミーの趣味は・・・」と言っていますが、それだと思いましょう。Me.ComboBoxはミーのコンボボックスという感じです。

 Dim j as integer , n As Boolean
  i = 3 'データの始まりの行
  Do Until IsEmpty(WorkSheets("Sheet1").(Cells(i, 1))
   n = True
   For j = 0 To Atai1.ListCount - 1
    If Atai.List(j) = Cells(i, 2) Then n = False
   Next
   If n = True Then Atai1.AddItem (Cells(i, 2).Value)
   i = i + 1
  Loop
これは冒頭で説明した、以前シート上でオートフィルタをしたときのコードをそのまま使用して一部改造したものです。これを先ほど出てきた判定のコンボボックス用のコードの後ろにそのまま付けると。

20151213f.gif
御覧のようにシート上のデータが選択肢として表示されます。ちょっと今回はボリューミーだったので、この辺の説明は次回にします。ではおやすみなさい

この記事へのコメント


この記事へのトラックバック