Использование функций, таких как формулы в Excel - PullRequest
1 голос
/ 31 декабря 2010

Я пытаюсь использовать формулу, чтобы получить букву алфавита.

Формула:

=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 ]

3 голосов
/ 31 декабря 2010

RANDOM не является функцией в Excel. RAND() is и возвращает float между 0 и 1. Вам нужно integer, чтобы выполнить вычисления модуля.

Чтобы получить случайное целое число, используйте:

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

Затем, когда seed Mod 27 - i становится равным 0 или меньше, функция умирает, поскольку массивы нельзя индексировать с 0 или меньше в VBA (или в большинстве языков).


Но на самом деле все, что вам нужно сделать для случайного письма, это:

=CHAR(RANDBETWEEN(65,90))
0 голосов
/ 31 декабря 2010

Этот код вернет случайную букву алфавита:

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
...