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)))
Другие вопросы по тегам