【发布时间】:2025-12-14 16:35:01
【问题描述】:
我想遍历一个包含数字、字母和其他不同长度字符的单元格的列,并在第二行中对该单元格的“模板”进行排序。
数字应变为“N”,字母应变为“L”,其他字符应保持不变。
例如如果 A1 包含“A35p@5”,则 B1 中的输出应为“LNNL@N”。
到目前为止,这是我的代码,但它只适用于第一个字符。同样对于其他或特殊字符,输出只是继续复制字符之后的任何内容。在下面的 Excel 和 VBA 代码中查看我的测试用例的输出。我在这里错过了什么?
Sub myMacro()
'Define variables
Dim char As String
For I = 1 To Range("A10").End(xlUp).Row
For J = 1 To Len(Range("A" & I))
char = Left(Range("A" & I), J)
If IsNumeric(char) Then
Range("B" & I).Value = "N"
ElseIf IsLetter(char) Then
Range("B" & I).Value = "L"
ElseIf IsSecialCharacter(char) Then
Range("B" & I).Value = char
End If
Next J
Next I
End Sub
Function IsLetter(r As String) As Boolean
If r = "" Then Exit Function
Dim x As Long
x = Asc(UCase(r))
IsLetter = (x > 64 And x < 91)
End Function
Function IsSecialCharacter(r As String) As Boolean
If r = "" Then Exit Function
Dim x As Long
x = Asc(UCase(r))
IsSecialCharacter = (x > 31 And x < 48) Or (x > 57 And x < 65) Or (x > 90 And x < 97) Or (x > 122 And x < 127)
End Function
【问题讨论】:
-
您的问题对每个单元格中的内容缺乏一些明确性。您是否正在处理一列字符串,其中一些可能完全包含数字字符等
-
您的代码,就目前而言,只会处理单元格的第一个字母,但它会处理与字符数一样多的次数;即如果单元格 A1 包含文本“i*2”,那么它将处理字母“i”并将“L”放入单元格 B1 中(覆盖已经存在的任何内容),然后它将处理字母“i”并将“L”放入单元格B1(覆盖已经存在的任何内容),最后,它将处理字母“i”并放入“L”在单元格 B1 中(覆盖已经存在的任何内容)。因此,单元格 B1 中的结果将是“L”