2016-08-09 141 views
0

Auf der Suche nach ein paar Anregungen. Ich habe Zellenwerte mit einer Kombination aus Buchstaben und Zahlen in einer Zelle. Jeder Wert besteht aus 6 Buchstaben, gefolgt von 0000, gefolgt von 4 Buchstaben und dann zwischen 5 und 8 Ziffern. Z.B.Konvertieren von Buchstaben in Zahlen in VBA

IIKBAR0000EEEE510002 
MQYUQF0000EEEE410003 
MWWVIQ0000ZYXW210004 
DJHZXL0000BBBB410005 

Diese sind mehr oder weniger völlig zufällig, und es gibt zwischen 100k und 1,048,576 von ihnen!

Gibt es eine Möglichkeit, dass ich die Buchstaben in eine Zahl umwandeln kann (z. B. A = 1, B = 2, Z = 26 usw.), ohne VBA den Wert jedes Buchstabens mitzuteilen? Der Code, den ich momentan verwende, ist ziemlich langsam, da er 26 If-Else-Fälle hat.

+2

Bitte senden Sie den Code, den Sie gerade verwenden. Ziehen Sie auch in Betracht, die Ascii-Werte für jeden Buchstaben zu verwenden, wenn Sie dies nicht bereits tun. – Brian

+2

Global Replace (sogar 26 mal) kann schneller sein. – pnuts

+1

Auf Ihrer Skala wäre das Ergebnis von AKA dasselbe wie für KAA usw. – pnuts

Antwort

4

Ich denke, das UDF wird für Sie arbeiten:

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 

Es wird jedes nicht-numerischen Wert auf seine ASCII-Äquivalent konvertieren und es dann dem Alphabet Äquivalent (A = 1, B verringern nach unten = 2, usw.). Benutze es einfach als normale Formel. HINWEIS: Es wird davon ausgegangen, dass Ihre nicht numerischen Werte in Großbuchstaben sind.

NACHTRAG

Der Code, wie oben angegeben, kehrt 250.000 Zeilen in knapp 2 Minuten mit einem 4. Gen i5-Prozessor und 8 GB RAM.

+0

Danke für den Vorschlag. Wird den Code morgen testen, aber sieht gut aus für die ersten 10. – Clauric

+0

Asc gibt nur den ASCII-Codepunkt zurück, wenn die aktuelle Codepage ASCII ist, was äußerst unwahrscheinlich ist. Aber für wahrscheinliche Codeseiten und den begrenzten Bereich von Zeichen sind A-Z 65-90. –

+0

@TomBlodget Ich verstehe nicht, was du meinst. Könnten Sie das klären? Das OP möchte 1-26 Äquivalente für das Alphabet. – Brian