ルイスは、年、月、日がそれぞれ1文字に置き換えられるように日付がコード化された情報を受け取ります。各フィールドには、1から9までの数字が使用され、その後、a = 10、b = 11、…​ v = 31の文字が使用されます。たとえば、日付コード「bc2」は、b = 11(2011年)、c = 12(月)、およびday = 2を意味します。ルイスは、コード化された日付をdd / mm / yyyyなどの一般的な日付形式に置き換える関数を考案できるかどうか疑問に思います。

この問題を解決するには、実際にはいくつかの方法があります。

1つの方法は、ワークシート内に「等価テーブル」を設定することです。左側の列にはコード文字が含まれ、右側の列にはその文字に関連付けられている数値が示されます。次に、VLOOKUPを使用して値を検索し、結果を日付に変換する数式を作成できます。

例として、データの右側にあるいくつかの未使用のセルに等価テーブルを作成します。私の場合、テーブルを列PとQに配置します。列Pに、コード文字1から9およびaからzを配置します。 (数字の1から9の前にアポストロフィを付けて、数字ではなくテキストとして格納されるようにしてください。)列Qに、数字の1から35を入力します。この範囲全体(P1:Q35)次に、DateTableの名前を付けました。 。

セルA1に格納されているコード化された日付のデコードされた日付を返す数式は次のとおりです。

=DATE(2000+VLOOKUP(LEFT(A1,1),DateTable,2,0), VLOOKUP(MID(A1,2,1),DateTable,2,0),VLOOKUP(RIGHT(A1,1), DateTable,2,0))

これは単一の連続式であることを忘れないでください。別の手法は、等価テーブルを完全にバイパスし、代わりに式を使用して変換を行うことです。以下は、セルA1の日付をデコードする例です。

=DATE(2000+FIND(LEFT(A1,1),"123456789abcdefghijklmnopqrstuvwxyz"), FIND(MID(A1,2,1),"123456789abc"),FIND(MID(A1,3,1), "123456789abcdefghijklmnopqrstuv"))

この数式は、FIND関数を使用してコード文字から値に変換し、これらの値をDATE関数で使用して目的の日付を返します。別の可能な式は、代わりに、日付を作成するために文字コード値に依存しています:

=DATE(2000+CODE(MID(A1,1,1))-87+(CODE(MID(A1,1,1))<58)39,CODE(MID(A1,2,1))-87+(CODE(MID(A1,2,1))<58)39,CODE(MID(A1,3,1))-87+(CODE(MID(A1,3,1))<58)*39)

最後に、デコードされた日付を返すユーザー定義関数を作成できます。以下は単純な例です。各文字を調べて数値に変換し、それをDateSerial関数で使用してExcelの日付シリアル番号を作成します。

Function DecodeDate(datecode As String)

Const X = "123456789abcdefghijklmnopqrstuvwxyz"

Dim D As Integer     Dim M As Integer     Dim Y As Integer

Application.Volatile     D = InStr(X, Right(datecode, 1))

M = InStr(X, Mid(datecode, 2, 1))

Y = 2000 + InStr(X, Left(datecode, 1))

DecodeDate = DateSerial(Y, M, D)

End Function

また、使用するアプローチに関係なく、日付コードには固有の欠陥があることも指摘しておく必要があります。年は、コード値1から9およびaからzを使用します。これは、日付コードが35の可能な値の1つになる可能性があることを意味します。 2000年(コードの記述方法の基準年)に追加すると、コーディングできる最大年の値は2035になります。その年以降の日付はこのコーディングでは機能しません。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12422)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります: