電子書籍の厳選無料作品が豊富!

Sub AからZで乱数を発生させる()
Dim 最大値 As Integer
Dim 最小値 As Integer

Randomize

最小値 = 1
最大値 = 10

Debug.Print Int((最大値 - 最小値 + 1) * Rnd + 最小値)

End Sub
---------------------------------------------------------
これを実行すると、1から10の間で乱数を発生させられるのですが、
AからZの間で乱数を発生させたい場合は、
このコードをどのようにすればいいでしょうか?

アドバイスよろしくお願いします。

A 回答 (5件)

○基本の考え


A=0,B=1,...,Z=25
とすれば、
AからZまでの乱数 → 0から25の乱数
と考えることができます。
「発生させたい物を連続の数値に対応させる→乱数→数値から元の物に逆変換」
というのは、他にも応用が効きます。

○文字に特化すれば
コンピュータで扱う文字には、それに対応した番号が割り振られています。
VBAで使われる文字コードでは
A 65
B 66
C 67
..
Z 90
と連続で割り振られています。
そして、コード→文字列に変換するchr関数があります。

となれば
・発生させたい物を連続の数値に対応させる: 文字コードとして対応済み
・乱数: AからZの文字コードに相当する範囲を発生させる
・数値から元の物に逆変換: chr関数で文字列に
となります
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/03 22:01

こんにちわ



試してみて

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/03 22:01

環境がなくて試せないのでヒントだけ。



* 乱数の範囲を 65 ~ 90 にする
* 発生した乱数を変数 x に入れるとして、Chr(x) で 'A' ~ 'Z' の文字が取得できる

なぜそうなるかは次のページを読めばわかると思う。

 アクセスVBA講座_関数編_文字列関数/05.文字列コードを操作する
 http://www.geocities.jp/cbc_vbnet/function/mojir …

アスキーコードの一覧も参考に。

 Access Study | Vol.9 VBA開発に役立つ資料集/アスキーコード一覧表
 http://www.tsware.jp/study/vol9/vbanote_02.htm

質問文からは何のVBA(Excel か Access か。あとバージョン)かわからないけど、基本的な関数だから使えるんじゃないかな。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/10/03 22:01

こんにちは。



 ヒントだけです。

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

では。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/07/07 12:34

大まかに、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/07/07 12:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!