2009年2月14日土曜日

第107回目 計算式で参照されている場所に飛ばすことができないか(その1)

○第107回目 計算式で参照されている場所に飛ばすことができないか(その1)

 前回のうちの一つです。
 6.計算式で参照されている場所に飛ばすことができないか。
 その第一段階として、
 ・複数の場所を与えて、その中から選択して移動できる。コンボボックスを使う。
 に挑戦します。

 コンボボックスって、どうやって作って、どうやって文字を登録して、どうやって使うのでしょうか。
 1.作り方
 エクセルのVBAのシート(エクセルシートからAlt+F11で移動)において、挿入-ユーザーフォームでユーザーフォームを作ります。そこでツールを用いてコンボボックス(窓です)とその上にコマンドボタンを一つ作ります。コマンドボタンの表示文字を「終了」にします。
 2.文字の登録
 マクロ上に、次のように書きます。
  p_mm0(0) = "りんご"
p_mm0(1) = "バナナ"
p_mm0(2) = "みかん"
p_mm0(3) = "メロン"
p_mm0(4) = "ぶどう"
  UserForm1.Show
'ここでUserForm1のマクロに飛ぶ。そのマクロ場終了すると戻る。

 ここで注意点は、ユーザフォームのマクロはまったく違うプロシージャです。したがって、変数を引き継がなければならないので、使用する変数をみなパブリック変数にします。
 Public p_mm0(20)
 これは、モジュールシートの一番先頭に書いておいてください。
 3.コンボボックスの表示
 今度はユーザーフォームにいきます。
 ユーザーフォームでF7を押すと、ユーザーフォームのマクロシートが出てきます。
 ここに続きのマクロを書きます。
 Private Sub UserForm_Initialize() 'ユーザーフォームを初期化する
ComboBox1.List = p_mm0 'コンボボックスのリストに配列の値をセットする
 End Sub
 4.選んだ文字列を取得する
 コンボボックスの中から文字を選びます、これはエンターキーで決めます。
 この動きを処理するのが次のマクロです。これもユーザーフォームのマクロです。
 このマクロは、コンボボックス内に動きがあると動きます。
 Private Sub ComboBox1_Change() 'コンボボックス内に動きがあると動く
p_a = ComboBox1.Text '選択結果を取得
p_b = ComboBox1.ListIndex '選択された配列のインデックスを取得
 End Sub
 ここで、p_a、p_bもマクロシート上でパブリック変数として定義しておいてください。
 5.選択の終了
 選択を終了させるには、終了ボタンを押します。エンターキーでもいいです。文字列をきめてから、エンターキーを2回押すと終了します。
 次のマクロは、終了ボタンが押されたときに動くマクロです。
 Private Sub CommandButton1_Click()
If ComboBox1.MatchFound Then '一致する項目がリストの中にあれば
Unload Me 'ユーザーフォームを閉じる
Else 'なければ
MsgBox "やり直してください", vbExclamation, "みつかりません"
End If
 End Sub
 6.選択結果の表示
 5.が終わりますと、2.のマクロに戻ります。
 2.のマクロの後に、選択結果を表示しすマクロを続けます。
  (UserForm1.Show;分かりやすくするために重複して書いています)
MsgBox (p_mm0(p_b) & " --- " & p_b)
または
MsgBox (p_a & " --- " & p_b)
これで選んだ文字と配列変数の番号が表示されます。

 ※骨格はこれでおしまいです。後はこれをアレンジしていきます。

0 件のコメント: