0

基本上,我只需要在大写字母范围内保留一些 ASCII 数字。

我的程序有很多字符,然后被转换成 ASCII 码。然后我在这个 ASCII 码中添加一个介于 -5 和 5 之间的随机数,然后将其转换回字符形式。虽然,如果字符是 Z(ASCII 代码 90),我不希望它转换为符号。它将以某种方式需要从 65 开始(即 A)。

如果字符是 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 之前等于 1,则使其等于 Z),如果 ASCII 码等于 91,则使其等于 65(如果在 Z 之后等于 1,使其等于 A)。

4

1 回答 1

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)))
于 2013-10-24T08:17:14.090 回答