- ベストアンサー
VBA AからZで乱数を発生させたい
Sub AからZで乱数を発生させる() Dim 最大値 As Integer Dim 最小値 As Integer Randomize 最小値 = 1 最大値 = 10 Debug.Print Int((最大値 - 最小値 + 1) * Rnd + 最小値) End Sub --------------------------------------------------------- これを実行すると、1から10の間で乱数を発生させられるのですが、 AからZの間で乱数を発生させたい場合は、 このコードをどのようにすればいいでしょうか? アドバイスよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
○基本の考え A=0,B=1,...,Z=25 とすれば、 AからZまでの乱数 → 0から25の乱数 と考えることができます。 「発生させたい物を連続の数値に対応させる→乱数→数値から元の物に逆変換」 というのは、他にも応用が効きます。 ○文字に特化すれば コンピュータで扱う文字には、それに対応した番号が割り振られています。 VBAで使われる文字コードでは A 65 B 66 C 67 .. Z 90 と連続で割り振られています。 そして、コード→文字列に変換するchr関数があります。 となれば ・発生させたい物を連続の数値に対応させる: 文字コードとして対応済み ・乱数: AからZの文字コードに相当する範囲を発生させる ・数値から元の物に逆変換: chr関数で文字列に となります
その他の回答 (4)
- ki-aaa
- ベストアンサー率49% (105/213)
こんにちわ 試してみて Sub AからZで乱数を発生させる() Dim 最大値 As Integer Dim 最小値 As Integer Dim i As Long Randomize 最小値 = 1 最大値 = 26 'A-Zは26文字だから 'Chr(65)は大文字のA i = Int((最大値 - 最小値 + 1) * Rnd + 最小値) Debug.Print Chr(64 + i) End Sub
お礼
ありがとうございました。
環境がなくて試せないのでヒントだけ。 * 乱数の範囲を 65 ~ 90 にする * 発生した乱数を変数 x に入れるとして、Chr(x) で 'A' ~ 'Z' の文字が取得できる なぜそうなるかは次のページを読めばわかると思う。 アクセスVBA講座_関数編_文字列関数/05.文字列コードを操作する http://www.geocities.jp/cbc_vbnet/function/mojireyu_function.html#ascchr アスキーコードの一覧も参考に。 Access Study | Vol.9 VBA開発に役立つ資料集/アスキーコード一覧表 http://www.tsware.jp/study/vol9/vbanote_02.htm 質問文からは何のVBA(Excel か Access か。あとバージョン)かわからないけど、基本的な関数だから使えるんじゃないかな。
お礼
ありがとうございました。
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 ヒントだけです。 Chr関数を使うとアスキーコードを対応する文字に変えられます。 反対にAsc関数は文字をアスキーコードに変えられます。 詳しい使い方はVBAのヘルプを見てください。 では。
お礼
Chr関数とAsc関数について調べてみます。ありがとうございました。
- YUI_AI
- ベストアンサー率45% (303/661)
大まかに、1~26までの乱数を発生させて、その値にAの文字コード分を上乗せしてあげればA-Zの乱数?が生成できます ※もちろん最大値は26です Dim 最大値 As Integer Dim 最小値 As Integer Dim a As Integer Dim b As String Randomize 最小値 = 1 最大値 = 10 a = Int((最大値 - 最小値 + 1) * Rnd + 最小値) a = a + Asc("A") b = Chr(a) Debug.Print b
お礼
仕組みがいまだよくわかりませんが、試してみたら出来ました!ありがとうございました。
お礼
ありがとうございました。