プロが教えるわが家の防犯対策術!

別の質問で4桁の数字を以下の方法で34進数からor34進数へ変換する式を見付けました。
これを9ケタの数字の変換に拡張しようとするとどういうのがいいのでしょうか?
2倍チョットの分量の式にしなくてはいけませんでしょうか?
いいやり方を教えてください。

A1に値を入れて、

34進→10進
=(SEARCH(LEFT(A1,1),"0123456789ABCDEFGHJKLMNPQRSTUVWXYZ")-1)*34^3+(SEARCH(MID(A1,2,1),"0123456789ABCDEFGHJKLMNPQRSTUVWXYZ")-1)*34^2+(SEARCH(MID(A1,3,1),"0123456789ABCDEFGHJKLMNPQRSTUVWXYZ")-1)*34+(SEARCH(RIGHT(A1,1),"0123456789ABCDEFGHJKLMNPQRSTUVWXYZ")-1)

10進→34進
=MID("0123456789ABCDEFGHJKLMNPQRSTUVWXYZ",INT(A1/34^3)+1,1)&MID("0123456789ABCDEFGHJKLMNPQRSTUVWXYZ",INT(MOD(A1,34^3)/34^2)+1,1)&MID("0123456789ABCDEFGHJKLMNPQRSTUVWXYZ",INT(MOD(A1,34^2)/34)+1,1)&MID("0123456789ABCDEFGHJKLMNPQRSTUVWXYZ",MOD(A1,34)+1,1)

A 回答 (1件)

関数と同じような処理を行うユーザ関数を作ってしまった方が良いかもしれません。



手抜き版ですが、10進数をI,O抜きの34進数に変換するユーザ関数「fDEC234]、その逆「f342DEC」を作ってみました。
以下のコードを標準モジュールに入れて、A1に1234と入れ、B1に =fDEC234(A1) と入力すると、12A と表示されます。
A2にWXYZと入れ、B2に =f342DEC(A2) と入力すると、1216077 と表示されます。
桁を合わせるところは作りこんでいません。Excelの機能や関数でやるか、ご自分で実装してください。

Function fDEC234(aData As Range) As String
  For i = 1 To Int(Log(aData) / Log(34) + 1)
    nOne = aData Mod 34 ^ i
    If i > 1 Then nOne = Int(nOne / (34 ^ (i - 1)))
    sWork = Mid("0123456789ABCDEFGHJKLMNPQRSTUVWXYZ", nOne + 1, 1) & sWork
  Next i
  fDEC234 = sWork
End Function

Function f342DEC(aData As Range) As Long
  sData = aData.Text
  For i = 0 To (Len(sData) - 1)
   nWork = nWork + (InStr("0123456789ABCDEFGHJKLMNPQRSTUVWXYZ", Mid(sData, Len(sData) - i, 1)) - 1) * 34 ^ i
  Next i
  f342DEC = nWork
End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。残りは頑張ってみます。

お礼日時:2012/06/27 20:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!