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!

当我单步执行该功能时,它永远不会到达第二站。怎么了?

4

2 回答 2

3

RANDOM不是 Excel 中的函数。 RAND()是,它返回float介于 0 和 1 之间的 a。您需要 ainteger来进行模数计算。

要获取随机整数,请使用:

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

然后,一旦seed Mod 27 - i变为 0 或更少,该函数就会终止,因为在 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 回答