2016-08-09 8 views
0

いくつかの提案を探しています。私はセル内に文字と数字の組み合わせでセル値を持っています。各値は6文字で構成され、0000に続いて4文字、次に5と8の数字が続きます。例えば。VBAの文字を数字に変換する

IIKBAR0000EEEE510002 
MQYUQF0000EEEE410003 
MWWVIQ0000ZYXW210004 
DJHZXL0000BBBB410005 

これらは多かれ少なかれ完全にランダムであり、それらの間に100kから1,048,576があります。

VBAに各文字の値を伝える必要なく、文字を数字(つまりA = 1、B = 2、Z = 26など)に変換できる方法はありますか?私が現在使用しているコードは26 If-Elseのケースがあるため、かなり遅いです。

+2

現在使用しているコードを投稿してください。また、まだ行っていない場合は、各文字にAsciiの値を使用することを検討してください。 – Brian

+2

グローバル置換(26回でも)がより速くなる場合があります。 – pnuts

+1

スケールでは、AKAの結果はKAAなどと同じになります。 – pnuts

答えて

4

私はこの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 

それはそのASCII文字に各数値以外の値を変換して、そのアルファベット同等(A = 1、B =にそれを軽減します2など)。それを正規の式として使用してください。 注:数値以外の値は大文字であることを前提としています。

補足

上述した第4世代のi5のプロセッサと8GBのRAMをわずか下2分で25万行を返すであろうようなコード。

+0

提案していただきありがとうございます。明示的にコードをテストしますが、最初の10には向いています。 – Clauric

+0

現在のコードページがASCIIである場合、AscはASCIIコードポイントを返しますが、これはほとんどありません。しかし、有望なコードページと制限された文字の範囲では、A-Zは65-90です。 –

+0

@TomBlodget私はあなたが意味するものを理解していません。明確にできますか? OPはアルファベットのために1〜26等量を望んでいる。 – Brian

関連する問題