• ベストアンサー

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の間で乱数を発生させたい場合は、 このコードをどのようにすればいいでしょうか? アドバイスよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

○基本の考え A=0,B=1,...,Z=25 とすれば、 AからZまでの乱数 → 0から25の乱数 と考えることができます。 「発生させたい物を連続の数値に対応させる→乱数→数値から元の物に逆変換」 というのは、他にも応用が効きます。 ○文字に特化すれば コンピュータで扱う文字には、それに対応した番号が割り振られています。 VBAで使われる文字コードでは A 65 B 66 C 67 .. Z 90 と連続で割り振られています。 そして、コード→文字列に変換するchr関数があります。 となれば ・発生させたい物を連続の数値に対応させる: 文字コードとして対応済み ・乱数: AからZの文字コードに相当する範囲を発生させる ・数値から元の物に逆変換: chr関数で文字列に となります

zxc5463czx
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.4

こんにちわ 試してみて 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

zxc5463czx
質問者

お礼

ありがとうございました。

noname#223623
noname#223623
回答No.3

環境がなくて試せないのでヒントだけ。 * 乱数の範囲を 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 か。あとバージョン)かわからないけど、基本的な関数だから使えるんじゃないかな。

zxc5463czx
質問者

お礼

ありがとうございました。

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.2

こんにちは。  ヒントだけです。   Chr関数を使うとアスキーコードを対応する文字に変えられます。   反対にAsc関数は文字をアスキーコードに変えられます。   詳しい使い方はVBAのヘルプを見てください。 では。

zxc5463czx
質問者

お礼

Chr関数とAsc関数について調べてみます。ありがとうございました。

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

大まかに、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

zxc5463czx
質問者

お礼

仕組みがいまだよくわかりませんが、試してみたら出来ました!ありがとうございました。

関連するQ&A

専門家に質問してみよう