[[20140411130935]] 『アルファベットと数字の組み合わさった連番』(のんさびぃ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『アルファベットと数字の組み合わさった連番』(のんさびぃ)

いつもお世話になります。

 アルファベットと数字の組み合わせの連番が振られている伝票があります。
 各桁0〜9の次にA〜Z、つまり36ごとに次の位に繰り上がるようになっています。
 そして一番最初の文字"A"と最後の文字"P"が固定文字となっています。

 (例) A1459VP, A1459WP, A1459XP, A1459YP, A1459ZP, A145A0P, A145A1P, A145A2P, A145A3P, A145A4P,
         A145A5P, A145A6P, A145A7P, A145A8P, A145A9P, A145AAP, A145ABP, A145ACP, A145ADP, A145AEP,
         A145AFP, A145AGP, A145AHP, A145AIP, A145AJP.

 このように並ぶ伝票番号が25枚で1束の伝票になっています。
 またこの伝票が25束で一箱に入っています。
 いつ誰にどの伝票を渡したかを記録管理し、後に伝票番号から検索(どの箱の何番から何番か)
 をしたいのですが、記録するにもオートフィルなどでは対応できなくて困っています。
 CHAR関数を使う例など検索してみましたが、応用ができませんでした。
 何か良い方法がありますでしょうか?どうぞよろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 関数でできるかもしれませんが、ユーザ定義関数で。

 標準モジュールに下記を置いて、
   A2 =DEC2ZNUM(1873075)   または 文字列で  「A1459VP」
   B2 =DEC2ZNUM(ZNUM2DEC(A2)+1) を B2:J4 にコピー
 後にF4:J4 を削除
   A3 =Dec2ZNum(ZNum2Dec(J2)+1) を A4 にコピー
 で上のようにならにでしょうか。

 Function DEC2ZNUM(Dnum, Optional PreFix As String = "A", Optional postFix As String = "P", Optional dig = 5)
    If IsNumeric(Dnum) = False Then DEC2ZNUM = "#ERROR NOT NUMBER": Exit Function
    DEC2ZNUM = ""
    Do While Dnum > 0
        Q = (Dnum - (Dnum \ 36) * 36)
        DEC2ZNUM = IIf(Q > 9, Chr(55 + Q), Trim(Str(Q))) & DEC2ZNUM
        Dnum = (Dnum - Q) / 36
    Loop
    If Len(DEC2ZNUM) < dig Then DEC2ZNUM = Right(Application.Rept("0", dig) & DEC2ZNUM, dig)
    DEC2ZNUM = PreFix & DEC2ZNUM & postFix
 End Function

 Function ZNUM2DEC(Znum, Optional PreFix As String = "A", Optional postFix As String = "P")
    If Left(Znum, 1) = PreFix Then Znum = Right(Znum, Len(Znum) - 1) Else ZNUM2DEC = "#ERROR ZNUMBER": Exit Function
    If Right(Znum, 1) = postFix Then Znum = Left(Znum, Len(Znum) - 1) Else ZNUM2DEC = "#ERROR ZNUMBER": Exit Function
    ZNUM2DEC = 0
    Dim i As Long
    Dim ch As String
    For i = 1 To Len(Znum)
        ch = Mid(Znum, i, 1)
        ZNUM2DEC = ZNUM2DEC * 36
        If Asc(ch) < 64 Then ZNUM2DEC = ZNUM2DEC + CLng(ch) Else ZNUM2DEC = ZNUM2DEC + Asc(ch) - 55
    Next
 End Function
(Mook) 2014/04/11(金) 15:54

 だだだっと関数で。

 A1に A1459VP

 A2 =LEFT(A1)
     &MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",INT(MOD(SUMPRODUCT((FIND(MID(RIGHT("0000000000"&MID(A1,2,LEN(A1)-2),10),ROW($1:$10),1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")-1)*36^(10-ROW($1:$10)))+1,36^5)/36^4)+1,1)
     &MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",INT(MOD(SUMPRODUCT((FIND(MID(RIGHT("0000000000"&MID(A1,2,LEN(A1)-2),10),ROW($1:$10),1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")-1)*36^(10-ROW($1:$10)))+1,36^4)/36^3)+1,1)
     &MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",INT(MOD(SUMPRODUCT((FIND(MID(RIGHT("0000000000"&MID(A1,2,LEN(A1)-2),10),ROW($1:$10),1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")-1)*36^(10-ROW($1:$10)))+1,36^3)/36^2)+1,1)
     &MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",INT(MOD(SUMPRODUCT((FIND(MID(RIGHT("0000000000"&MID(A1,2,LEN(A1)-2),10),ROW($1:$10),1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")-1)*36^(10-ROW($1:$10)))+1,36^2)/36^1)+1,1)
     &MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",INT(MOD(SUMPRODUCT((FIND(MID(RIGHT("0000000000"&MID(A1,2,LEN(A1)-2),10),ROW($1:$10),1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")-1)*36^(10-ROW($1:$10)))+1,36^1)/36^0)+1,1)
     &RIGHT(A1)

 下へコピー。
 
(GobGob) 2014/04/11(金) 17:23

 関数でもできるんだ・・・。
 さすが GobGobさん。

(Mook) 2014/04/11(金) 18:55


 Mookさま、GobGobさま、早速のご回答ありがとうございました。
 どちらの方法でも思い通りの結果が得られました。素晴らしいです。
 本当に助かりました。どうもありがとうございました。
(のんさびぃ) 2014/04/11(金) 22:27

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.