OfficeExcelVBAExcelのシートに書いてあるリストをリストボックス内に表示して、そこで選択したアイテムの、Excelシート上での行数を取得するというVBAです。伝わりますかね...?リストボックスの中身が毎回変わる場合によく使うのでまとめてみました。リストボックスをつくるユーザーフォームを作って、その中にリストボックスを作ります。ユーザーフォームの作り方はこちらの記事を参考にどうぞ。ExcelBookのSheet1にこんな感じのものを作ります。これがリストボックスの中身になります。後で使う「処理」ボタンも付けてみました。肝心のリストボックスを選択して、プロパティを見てみます。赤枠の中を変えてみます。ColmunWidthはホントは50で設定したんですが、勝手に変わっちゃうっぽいです。ColumnCount・・・リストボックスに表示する列の数ColumnHeads・・・見出しの有無。RowSourceの直前の行が使われるColumnWidth・・・列幅。複数の場合は“;”で区切るRowSource・・・リストボックスの中身プロパティを設定すると、こんな感じに!デフォルトだとリストボックスはひとつしか選択できないので、複数選択が必要な場合はこちらの項目をMultiSelectに変えておきましょう。起動のためのコード処理ボタンを押した時に動くプログラムを先に設定してしまいます。Subこう記述します。(中身は後で書きます。)ボタンを押すと、Module1の処理に飛ぶという流れです。ところで、ExcelVBAはプロシージャ名や変数名などに日本語を使うことができます。プログラムといえば半角英数が基本ですが、昔と違ってそうエラーが起こるものでもない、そして可読性が良いという面から、私としては(規模が小さい、限られた人しか使わない、などの場面に限って)「有り」じゃないかなと思っています。別の言語でプログラムを組みたいとか、不特定多数の人が使う、関わるものは多数の人が「常識」と思える形のほうが受け入れやすいのは確かです。ExcelBookのほうには、ボタンを押したらUserForm1が表示できるボタンを作ります。詳しくはこちらの記事もどうぞ。Subフォームを表示させる前に、RowSorceをデータのあるところだけに再設定すると、リストの中身が変わっても、空白を読み込まずに無駄なスクロールバーを出さずに済みます。選択されている位置を取得するコードやっと本題です。さっき作った“処理”のコードの中身を書きます。Sub1行だけならrowsはintegerでいいんですが、複数の場合を想定してStringで宣言しています。選択なし1行選択リストボック内では3つめですが、Excelのシート上では5行目です。行さえ分かれば、Cells(row,○)とかで他の値は簡単に指定できますね!データベースなどからExcelにデータを抽出して、それをフォームで選択してまた処理をする、なんてときにリスト内の位置じゃなくてシート上での位置が欲しいんだよ!と思って作りました。どなたかのお役に立てれば幸いです。公開日:2012/04/20ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。私がExcelVBAでよく使う便利なコード・スニペットまとめプログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいことExcelVBAのクラスモジュールって何?という人向けの使い方まとめ書籍を執筆しています。OfficeExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。欲しいと思っていたコードだったのでとても助かりました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。週間人気記事ExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。-2019/09/27運営者*you非IT系の会社で社内業務アプリ開発したりWeb担してたり。ExcelとかAccessの本を書いてます。