○第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)
これで選んだ文字と配列変数の番号が表示されます。
※骨格はこれでおしまいです。後はこれをアレンジしていきます。
2009年2月14日土曜日
登録:
コメントの投稿 (Atom)

0 件のコメント:
コメントを投稿