プロが教える店舗&オフィスのセキュリティ対策術

アルアベットを用いたロット番号からエクセル関数を用いて”日付データ”に変換は可能でしょうか?


R・・・2015
S・・・2016
T・・・2017


A・・・1月
B・・・2月
C・・・3月
D・・・4月
・・・

日(10の桁)
A・・・10日
B・・・20日
C・・・30日
X・・・0日

日(1の桁)
A・・・1日
B・・・2日
C・・・3日
D・・・4日
E・・・5日

例えば、ロット番号TGBGは、2017/7/27となります。

一発で日付データに出来る関数はありますでしょうか?

よろしくお願いします。

A 回答 (2件)

L1:P26 ⇒ table


B1: =MID($A1,COLUMN(A1),1)
F1: =VLOOKUP(B1,table,COLUMN(B1),FALSE)
J1: =(F1&"/"&G1&"/"&(H1+I1))*1
「ロット番号からエクセル関数を用いて日付デ」の回答画像2
    • good
    • 0

関数でも出来ない事はありませんがとても長くなりそうなのでマクロ(VBA)でユーザー関数を作成しました。

以下を標準モジュールへ書き込んで下さい。
'--------------------------------------------------------------------------------
Function LNo2Date(ロット番号 As String) As Date
Dim 年月日 As String
Dim 桁 As Integer
Dim 文字(4) As Integer
If Len(ロット番号) = 4 Then
For 桁 = 1 To 4
文字(桁) = Asc(Mid(ロット番号, 桁, 1))
Next
Select Case 文字(1)
Case Is < 65 '< A
LNo2Date = CVErr(xlErrValue)
Case Is > 90 '> Z
LNo2Date = CVErr(xlErrValue)
Case Else
年月日 = CStr(文字(1) + 1933) & "/"
End Select
Select Case 文字(2)
Case Is < 65 '< A
LNo2Date = CVErr(xlErrValue)
Case Is > 76 '> L
LNo2Date = CVErr(xlErrValue)
Case Else
年月日 = 年月日 & Format(文字(2) - 64, "00") & "/"
End Select
Select Case 文字(3)
Case 88 'X
年月日 = 年月日 & "0"
Case Is < 65 '< A
LNo2Date = CVErr(xlErrValue)
Case Is > 67 '> C
LNo2Date = CVErr(xlErrValue)
Case Else
年月日 = 年月日 & CStr(文字(3) - 64)
End Select
Select Case 文字(4)
Case 88 'X
年月日 = 年月日 & "0"
Case Is < 65 '< A
LNo2Date = CVErr(xlErrValue)
Case Is > 73 '> I
LNo2Date = CVErr(xlErrValue)
Case Else
年月日 = 年月日 & CStr(文字(4) - 64)
End Select
Else
LNo2Date = CVErr(xlErrValue)
End If
If LNo2Date = 0 Then LNo2Date = CDate(年月日)
End Function
'--------------------------------------------------------------------------------

※ 使い方ですが通常の関数と同じで、例えば A1セルに「TGBG」とあったならば「=LNo2Date(A1)」とします。もちろん関数を入れるセルの書式は日付型の物にしてください。シリアル値なので書式が標準だと「42943」と表示されます。
※「年」は A~Z (1998~2023) が使えるように拡張しています。
※「日(1の桁)」にも X が使えるようにしています。
※ 対象外の文字が有る等規定外の物は「#VALUE!」になります
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています