Excel: как сохранить числа ASCII в определенном диапазоне?
По сути, мне нужно держать некоторые ASCII-числа только в диапазоне заглавных букв.
В моей программе много символов, которые затем преобразуются в код ASCII. Затем я добавляю случайное число в диапазоне от -5 до 5 к этому ASCII-коду, а затем преобразовываю его обратно в символьную форму. Хотя, если символ Z (код ASCII 90), я не хочу, чтобы он преобразовывался в символ. Это должно будет как-то начинаться с 65 (будучи А).
То же самое происходит, если символ A (код ASCII 65) и применяется -5.
Я, честно говоря, понятия не имею, как это сделать. Был треск на это с простым if
заявление, но я продолжал получать ошибки.
Вот как выглядит мой лист:
A B C
______________________________________
1 | random-number | Letter | ASCII
2 | | Z | 90
3 | | A | 80
4 | | T | 84
5 | | V | 86
6 | | W | 87
7 | | E | 69
Если random-number
равно 5, каждое число в пределах ASCII
столбец будет добавлен на 5, а затем преобразован обратно в символьную форму где-то в другой ячейке.
Проще говоря, если код ASCII равен 65, сделать его равным 90 (если он равен единице перед A, сделать его равным Z), а если код ASCII равен 91, сделать его равным 65 (если равен единице после Z, сделать его равным А).
1 ответ
Я использовал этот макрос для автоматизации всего процесса, поэтому запустил новую книгу, чтобы проверить ее.
Sub Main()
Dim i As Long
Columns("A:A").NumberFormat = "0"
Range("A1") = "random number"
Range("B1") = "letter"
Range("C1") = "ASCII"
Range("D1") = "new ASCII"
Columns("A:D").HorizontalAlignment = xlCenter
For i = 2 To 27
Range("B" & i) = Chr(i + 63)
Range("C" & i) = i + 63
Range("A" & i) = Int((5 - (-5) + 1) * Rnd + (-5))
Range("D" & i).Formula = _
"=CHAR(IF(C" & i & "+A" & i & "<65,91-(65-(C" & i & "+A" & i & "))," & _
"IF(C" & i & "+A" & i & ">90,65+(C" & i & "+A" & i & "-91),C" & i & "+A" & i & ")))"
Next i
Columns.AutoFit
End Sub
Это создаст следующее
Вы можете посмотреть на формулу в столбце D new ASCII
который должен быть (для ячейки D2)
=CHAR(IF(C2+A2<65,91-(65-(C2+A2)),IF(C2+A2>90,65+(C2+A2-91),C2+A2)))