1

数式を使用してアルファベットの文字を取得しようとしています。

方式:

=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番目のストップに到達することはありません。なにが問題ですか?

4

2 に答える 2

3

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

ランダムな整数を取得するには、次を使用します。

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

次に、seed Mod 27 - i0以下になると、VBA(またはほとんどの言語)では配列に0以下のインデックスを付けることができないため、関数は停止します。


しかし、実際には、ランダムな文字に対して行う必要があるのはこれだけです。

=CHAR(RANDBETWEEN(65,90))
于 2010-12-31T16:07:46.590 に答える
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
于 2010-12-31T17:46:07.210 に答える