リストボックスをつくる

120420-1

ユーザーフォームを作って、その中にリストボックスを作ります。ユーザーフォームの作り方はこちらの記事を参考にどうぞ。

120420-2

ExcelBookのSheet1にこんな感じのものを作ります。これがリストボックスの中身になります。

120420-3

後で使う「処理」ボタンも付けてみました。では肝心のリストボックスを選択して、プロパティを見てみます。

120420-4

赤枠の中を変えてみます。ColmunWidthはホントは50で設定したんですが、勝手に変わっちゃうっぽいです。

  • ColumnCount・・・リストボックスに表示する列の数
  • ColumnHeads・・・見出しの有無。RowSourceの直前の行が使われる
  • ColumnWidth・・・列幅。複数の場合は“;”で区切る
  • RowSource・・・リストボックスの中身
120420-5

プロパティを設定すると、こんな感じに!

120420-6

デフォルトだとリストボックスはひとつしか選択できないので、複数選択が必要な場合はこちらの項目をMultiSelectに変えておきましょう。

起動のためのコード

120420-7

処理ボタンを押した時に動くプログラムを先に設定してしまいます。ボタンをダブルクリックして、出てきたUserForm1のコードに

と記述して、Module1のほうに

こう記述します。(中身は後で書きます。)ボタンを押すと、Module1の処理に飛ぶという流れです。めんどくさいので「処理」という名前にしてしましましたw

ExcelVBAはプロシージャ名とか変数名などに普通に日本語が使えます。最初は気持ち悪くて全部半角英数でやってたんですが、日本語のほうが断然分かりやすいし、昔と違ってそうエラーが起こるものでもないので最近は日本語も使うようになってきました。

120420-8

ExcelBookのほうには、ボタンを押したらUserForm1が表示できるボタンを作ります。詳しくはこちらの記事もどうぞ。

フォームを表示させる前に、RowSorceをデータのあるところだけに再設定すると、リストの中身が変わっても、空白を読み込まずに無駄なスクロールバーを出さずに済みます。

選択されている位置を取得するコード

やっと本題です。長くてすみません。さっき作った“処理”のコードの中身を書きます。

1行だけならrowsはintegerでいいんですが、複数の場合を想定してStringで宣言しています。リストボックス上での0行目はシート上での3行目に当たるので、i+3 が行数になります。

動作

選択なし

120420-9 120420-10

1行選択

120420-11 120420-12

リストボック内では3つめですが、Excelのシート上では5行目です。

複数選択

120420-13 120420-14

行さえ分かれば、Cells(row,○)とかで他の値は簡単に指定できますね!

データベースなどからExcelにデータを抽出して、それをフォームで選択してまた処理をする、なんてときにリスト内の位置じゃなくてシート上での位置が欲しいんだよ!と思って作りました。どなたかのお役に立てれば幸いです。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly 646
  • RSSを登録

公開日:2012/04/20


コメントを残す




*印は必須項目です。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にですがスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)


back to top