[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アルファベットと数字の組み合わさった連番』(のんさびぃ)
いつもお世話になります。
アルファベットと数字の組み合わせの連番が振られている伝票があります。 各桁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.