在VBA中将字母转换为数字

Cla*_*ric 0 excel vba excel-vba

寻找一些建议.我在单元格中使用字母和数字组合的单元格值.每个值为6个字母,后跟0000后跟4个字母,然后是5到8个数字.例如

IIKBAR0000EEEE510002
MQYUQF0000EEEE410003
MWWVIQ0000ZYXW210004
DJHZXL0000BBBB410005
Run Code Online (Sandbox Code Playgroud)

这些或多或少是完全随机的,其中有100k到1,048,576之间!

有没有什么方法可以将字母转换为数字(即A = 1,B = 2,Z = 26等)而无需告诉VBA每个字母的值?我目前使用的代码非常慢,因为它有26个If-Else案例.

Bri*_*ian 6

我认为这个UDF对你有用:

Option Explicit

Function ConvertLetterToNumber(ByVal strSource As String) As String

Dim i As Integer
Dim strResult As String

For i = 1 To Len(strSource)
    Select Case Asc(Mid(strSource, i, 1))
        Case 65 To 90:
            strResult = strResult & Asc(Mid(strSource, i, 1)) - 64
        Case Else
            strResult = strResult & Mid(strSource, i, 1)
    End Select
Next
ConvertLetterToNumber = strResult

End Function
Run Code Online (Sandbox Code Playgroud)

它会将每个非数字值转换为其Ascii等效值,然后将其降低到其等效字母(A = 1,B = 2等).只需将其用作常规配方即可.注意:它假定您的非数字值为大写.

附录

使用第4代i5处理器和8GB RAM,上述代码将在不到2分钟的时间内返回250,000行.