別の質問で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)

このQ&Aに関連する最新のQ&A

Excel 2進数」に関するQ&A: Excelで2進数の表示

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に関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Qn進法の変換

数字の0~9および英字のA~Z(OおよびIをのぞく)の34文字を使用した34進法の4桁の数字を10進法への変換方法、およびその逆(10進法→34進法)の変換方法をエクセルの計算式またはマクロを使用し作成する方法を教えてください。

Aベストアンサー

ベタに書けばこのような式で表せます。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)

冗長な部分はセルに定数を埋め込むなどをして、式の簡略化をしてください。

ベタに書けばこのような式で表せます。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)&MI...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング