2010-12-31 9 views
1

アルファベットの文字を取得するために数式を使用しようとしています。Excelの式のような関数を使用する

式:

=Keytable(RANDOM,ROW()) 

機能:

Function KeyTable(seed As Long, position As Long) As String 
    Dim i As Long 
    Stop 
    Dim calpha(1 To 26) As String 
    Dim alpha(1 To 26) As String 

    For i = 1 To 26 
     alpha(i) = Chr(i + UPPER_CASE - 1) 
    Next i 

    For i = 1 To 26 
     calpha(i) = alpha(seed Mod 27 - i) 
    Next i 
    Stop 
    KeyTable = calpha(position) 
End Function 

結果:私は、関数をステップ実行すると

#Value! 

、それが第2の停止になることはありません。なにが問題ですか?

+0

が、私はそれがあると思うだろうが ' 3行目の単語を停止してください... – zsalzbank

+0

アルファベットのランダムな文字を返そうとしていますか? –

+0

ええと........... –

答えて

3

RANDOMはExcelの関数ではありません。 RAND()は0から1の間でfloatを返します。モジュラス計算を行うにはintegerが必要です。

ランダム整数、使用するには:

INT ((upperbound - lowerbound + 1) * RAND() + lowerbound) 

seed Mod 27 - iが0以下になるとアレイはVBA(又はほとんどの言語)が0以下で索引付けすることができないため、そして、機能ダイ。


しかし、本当にあなたがランダムな文字を行うために必要なのはこれです:このコードは、アルファベットのランダムな文字を返します

=CHAR(RANDBETWEEN(65,90)) 
+0

優秀、ありがとう!そのためには、分析ツール(RandBetween)が必要であることに注意してください。 –

+0

+1:ランダムな手紙の素敵なRANDBETWEEN式... –

0

Function GetLetter() 
    Dim letters As String 
    Dim randomIndex As Byte 

    letters = "abcdefghijklmnopqrstuvwxyz" 
    randomIndex = Int((26 - 1 + 1) * Rnd() + 1) //Get random number between 1 and 26 

    GetLetter = VBA.Mid$(letters, randomIndex, 1) 
End Function 
+0

'(26 - 1 + 1)'とは何ですか? –

+0

2つの数値の間の乱数の一般的な公式は、Int((High - Low + 1)* Rnd()+ Low))です。アルファベットの乱数は1と26のようになりますので、方程式を入力してください。注:Intは数字が整数であることを確認するためにそこにあります。 –