Excelに34進数を実装させたい

会社で連番を当てていく作業があり、
0~9、A~H、J~N、P~Z→0に戻るという34進数
(数字10個、アルファベットのアイとオーを抜いた24個)という定義を実装させたいと思っています。
アルファベットは全て半角大文字、数字は半角です。
※実装方法についてはVBAでもユーザー定義式でも構いません。
VBAを使うということであれば、数値のASCIIコードを確認してずらしていくということになると思うんですが、桁上がりの考え方がだいぶ面倒です。
何か参考になるようなサイトやコードがあればご教示下さい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2020/06/18 15:10:07

回答1件)

id:takashi_m17 No.1

回答回数120ベストアンサー獲得回数20

outofjisさんと同じ考え方かな
ざっと書いたのでてきとーですが

Function test(数値)
    Dim atai(9) As String
    shin = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
    
    keta = 0
    atai(keta) = shin(数値 Mod 34)
    zan = Int(数値 / 34)
    keta = keta + 1
    
    Do Until zan < 34
        atai(keta) = shin(zan Mod 34)
        zan = Int(zan / 34)
        keta = keta + 1
    Loop
    
    If zan <> 0 Then atai(keta) = shin(zan)
    
    For i = 0 To keta
        test = atai(i) & test
    Next

End Function
他1件のコメントを見る
id:keijun5145

@たか様
回答ありがとうございます。
要望がうまく伝わっておらずに申し訳ないんですが、
ABC…1B8のような文字列があって1行下にずれると1B9,1BA…1BZ,1C0のような桁上がりを実現させたかったというものです。
これだと単純な数値を34進数にすることはできたのですが、本来実現したかったこととは異なってしまいました。
申し訳ありませんが、追加でコメントをいただければと思います。

2020/06/16 09:27:01
id:takashi_m17

1B8、1B9 これは数式の結果ではなく値になっていて欲しいということですか?
もしくは 1B8のセルがA1だとして、 =A1+1 の結果を "1B9" としても良い?
後者でしたら34進数を一旦10進数に戻して、上記コードで再度34進数に戻せば良いと思います。

2020/06/16 13:05:51
  • id:outofjis
    表示だけの問題であれば、めんどいんでコードは省くけど、
    考え方としては、内部では10進数で持っておいて、
    表示するときに34で順々に割っていったあまりを
    「I」と「O」を抜いて定義しておいた配列(0→0、1→1、・・・10→A、・・・)で
    表示してやればいいんじゃないかな?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません