【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。
IMMRです。
今回は乱数について説明します。
なにかしらの業務で乱数の数値または、英字を使用することはあると思います。
そこでリテラル値ではなく、コンピュータがRnd関数で求めた乱数(ランダムで決めた)を算出します。
数字
関数は以下のようになっています。

図1 Rnd関数説明
赤枠の箇所に最大値を
緑枠の箇所に最小値を入力するだけです。
ここでは、1から99までの数値を乱数にしています。
※もちろん数値を変えれば、1桁や3桁や4桁も出来ます。
では、プログラムを記載してみます。
Sub TEST()
Dim R As String
Randomize
R = Int((99 - 1 + 1) * Rnd + 1)
MsgBox R
End Subまずは「Randomize」で乱数の初期化を行います。
そうしたら、Int((99 - 1 + 1) * Rnd + 1)で1~99の乱数を出力します。
出力した乱数は、変数Rにセットします。
そして、最後にメッセージボックスで変数Rに設定している数値を表示します。
今回は、こうなります。

図2 数値(1から99)の実行
きちんと、発生した乱数(1~99)が表示されています。指定していない3桁の数字は表示されません。
また、乱数の表示であるので
実行するたびに値は変わっていきます。

図3 数値の実行(多数)
このような感じで最小値~最大値の乱数の数値を表示することができます。
英字
英語(アルファベット)の場合は、ちょっと特殊な方法で行います。
それは、Rnd関数とChr関数を使います。
なぜ、Chr関数を使用しないといけないかというとRnd関数からは、アルファベットを取得できないからです。数字だけです。
Chr関数は決められた文字コードを取得します。そのため、
Chr(65)~Chr(90)は、大文字のAからZ
Chr(97)~Chr(122)は小文字のaからz
となっています。
Chr(65)→ 「A」
Chr(90)→ 「Z」
Chr(97)→ 「a」
Chr(122)→「z」
のようになります。一覧でみるとこのような感じです。

図4 大文字

図5 小文字
になっています。
つまり、
Rnd関数で65から90の間の数値を取得して、取得した値をChr関数で取得すれば、アルファベットの大文字(AからZ)
Rnd関数で97から122の間の数値を取得して、取得した値をChr関数で取得すれば。アルファベットの小文字(aからz)を
取得出来ることになります。
では、それを踏まえてプログラムを作成していきます。まずは、大文字からです。
Sub TEST()
Dim R, R2 As String
Randomize
R = Int((90 - 65 + 1) * Rnd + 65)
R2 = Chr(R)
MsgBox R2
End Subまずはランダム数で(65~90)の数値を取得します。
そして、取得した数値をChr関数でコード文字に変換します。
実行すると

図6 アルファベット(大文字)(AからZ)の実行
が表示されます。乱数のため、押すごとにアルファベットも変わります。

図7 アルファベット(大文字)の実行(多数)
AからZの文字が表示されていますね。
次に小文字ですがプログラムは以下のようになります。
プログラムは以下のようになります。
Sub TEST2()
Dim R, R2 As String
Randomize
R = Int((122 - 97 + 1) * Rnd + 97)
R2 = Chr(R)
MsgBox R2
End Sub上記の大文字と変わっているところは、
R = Int((90 - 65 + 1) * Rnd + 65)
↓
R = Int((122 - 97 + 1) * Rnd + 97)
であり、乱数の65から90を
97から122に変更しただけです。
それでプログラムを実行してみます。
Sub TEST2()
Dim R, R2 As String
Randomize
R = Int((122 - 97 + 1) * Rnd + 97)
R2 = Chr(R)
MsgBox R2
End Subこれで実行すると

図8 アルファベット(小文字)(aからz)の実行
と表示されます。
もちろん、押すたびに違う文字が表示されます。

図9 アルファベット(小文字)の実行(複数)
このように「数字」「アルファベット(大文字)」「アルファベット(小文字)」を表示しました。
では最後に、
「数字(1から9)」と「アルファベット(大文字)(AからZ)」と「アルファベット(小文字)(aからz)」の3つに対して、
Rnd関数で表示して、結合した文字を表示させます。
Sub TEST3()
Dim R As String
Dim Rd1, Rd2, Rd3 As String
Randomize
Rd1 = Int((9 - 1 + 1) * Rnd + 1)
Randomize
R = Int((90 - 65 + 1) * Rnd + 65)
Rd2 = Chr(R)
Randomize
R = Int((122 - 97 + 1) * Rnd + 97)
Rd3 = Chr(R)
MsgBox Rd1 & "-" & Rd2 & "-" & Rd3
End Subこのプログラムは、
数字(1から9)の乱数をRd1に
アルファベット(大文字)(AからZ)をRd2に
アルファベット(小文字)(aからz)をRd3に 挿入して、
最後にRd1とRd2とRd3を合わせて、メッセージボックスで表示しています。
※わかりやすく見やすくするために間にハイフン(”ー”)を入れています。
下記が結果です。

図10 3種類の実行
結果を見るとそれぞれが表示されていることがわかります。

図11 3種類実行の説明
もちろん、再度、実行すれば違う文字のメッセージが表示されます。
以上のようにやれば、数字、アルファベット(大文字)、アルファベット(小文字)で
どのようなパターンでも乱数で自由に表示することが出来ます。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート