抽選マクロ ListObjectから特定範囲を抜き出します

 下図のように1列に並んだ氏名のデータから無作為に1つを抜き出す 抽選マクロ を作ってみましょう。

 Excel-VBA抽選マクロ(籤引きプロシージャ)

 データ内容は何でもいいのですが、自分で用意するのが面倒な人は次の表をコピーして貼り付けてくださいな。

氏名
生末徳実(いくすえ のりみ)
友定知幾(ともさだ ともちか)
外屋敷富之(そとやしき とみゆき)
大成言美(だいなり ことみ)
高馬貴亮(たかうま たかあき)
畔見和恵(あぜみ かずえ)
八賀允敏(はちが まさとし)
稲童丸統治(いなどうまる とうじ)
専光若子(せんこう わかこ)
馬渕雅江(まぶち まさえ)

 データはテーブル形式に変えておいてください。 Excel2013 であれば [ホーム] ⇒ [テーブルとして書式設定] として好きなデザインを選びます。また「先頭行をテーブルの見出しとして使用する」には必ずチェックを入れておきます。

抽選マクロ

 別記事で作った FRANDBETWEEN 関数 と組合わせてマクロを作ります。FRANDBETWEEN は指定した範囲内の整数値を返す関数で、ワークシート上では RANDBETWEEN 関数と同じようなはたらきをします。

 Function FRANDBETWEEN(a As Long, b As Long) As Long
  Randomize
  FRANDBETWEEN = Int((b - a + 1) * Rnd) + a
 End Function

 Sub 抽選()

 Dim ct As Long
 Dim rd As Long
 Dim mydata As String

 '見出し部分を除いたデータ数を数えます
 ct = ActiveSheet.ListObjects("氏名").ListRows.Count

 '1からデータ総数までのランダム整数をrdに入れます
 rd = FRANDBETWEEN(1, ct)

 'リストのデータ部分を文字列変数 mydata に入れます
 mydata = ActiveSheet.ListObjects("氏名").ListRows(rd).Range

 'セルD3に抽選結果を書き込みます
 ActiveSheet.Range("d3").Value = mydata

 End Sub

 マクロを実行する度にセル D3 の氏名が変化するはずです。

データ数を数えます

 テーブル形式データは VBA では ListObject オブジェクトとして用います。

ct = ActiveSheet.ListObjects("氏名").ListRows.Count

という記述で現在開いているシートの ListObject コレクションから「氏名」テーブルを選択し、見出し部分を除いた行である ListRows コレクションを参照してCount プロパティでその総数を得ています。

特定の行を選択します

 単一の行が欲しいときは ListRow オブジェクトを取得します。

mydata = ActiveSheet.ListObjects("氏名").ListRows(rd).Range

 ListRows() の引数を rd という無作為整数にすることで、 ListRows コレクションの中からランダムに行を選択しています。ちなみに ListObject オブジェクトから特定の範囲を得るには必ず Range プロパティが必要になるので注意してくださいね。
 

【書籍紹介】仕事が速い人ほどマウスを使わない! 超速エクセル仕事術

 関数の使い方もマクロも載っていないけど、Excel を使う人なら1度は読んでおきたい本です。本書には数字や文字を入力したり、セルの大きさを変えたり、罫線(けいせん)引いたりするという、ごくごく日常的に行っているありふれた作業を、ちょっとした工夫で劇的に改善するトピックが詰まっています。なので「エクセルはちょっと苦手だな」とか「業務でエクセルを使うけれども、それほど高度な知識は必要ないよ」という人にもおすすめです。

仕事が速い人ほどマウスを使わない! 超速エクセル仕事術

新品価格
¥1,359から
(2020/8/16 21:53時点)

 特にいくつかのショートカットキーを覚えておくことは作業効率の改善につながります。Excel にはたくさんのショートカットキーが用意されているので、マウスを使わなくても操作できるようになっています(こういうソフトはマウスがない、マウスが壊れたという環境も想定して開発されているので当たり前です)。でもショートカットキーを全部覚えるなんて無理だし、使わない機能のショートカットを覚えるのも時間の無駄なので、本書では使用頻度の高いものを優先的に載せています。ぜひ本書を糧手に1日1つずつ、ショートカットを覚えて、マウス操作の回数を減らすことに挑戦してみてください。

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください