Использование функций, таких как формулы в 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 ответа
Решение
RANDOM
не является функцией в Excel. RAND()
есть и возвращает float
от 0 до 1. Вам нужен integer
сделать вычисления модуля.
Чтобы получить случайное целое число, используйте:
INT ((upperbound - lowerbound + 1) * RAND() + lowerbound)
Потом один раз seed Mod 27 - i
становится равным 0 или меньше, функция умирает, потому что массивы не могут быть проиндексированы с 0 или меньше в VBA (или в большинстве языков).
Но на самом деле все, что вам нужно сделать для случайного письма, это:
=CHAR(RANDBETWEEN(65,90))
Этот код вернет случайную букву алфавита:
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