マガジン

日付が文字列のまま並び替えできない。表記ゆれをAIと直す考え方

AIを使いこなす

執筆にClaudeを使用しています。

バラバラな書き方の日付の紙片を、元の紙束を残したまま手で仕分け、確定できないものを別の保留トレーに分けている机の俯瞰イラスト
記事の内容をもとに制作したAI生成イメージです。実際の製品画面や検証結果の写真ではありません。

結論から言うと、並び替えがおかしいのは、その列の日付が「日付」ではなく「文字列」として入っているからです。直し方は、元の列には触らず、横に変換用の列を作って日付に直し、元の表記と見比べてから確定するという流れです。 この作業でAIに任せやすいのは、表記パターンの仕分けと、パターンごとの変換式の下書きです。一方で、「10/1」が何年なのか、「1/10/25」が1月10日なのか10月1日なのかは、データの出どころを知っている人にしか決められません。AIには判断材料を渡し、曖昧なものは人が決める、という分担にします。 この記事の表や式、入力例はすべて「説明用の例」です。実際の環境で動作を確かめた結果ではありません。必ず少数の行で試してから全体に広げてください。また、操作はExcelを前提にしています。

この記事の目次
  1. なぜ文字列の日付は並び替えできないのか
  2. 表記パターン別の判定表(説明用の例)
  3. 元を壊さず、別列で変換して照合する手順
  4. AIに渡す依頼文と入力例
  5. 判断が割れる4つの場面

なぜ文字列の日付は並び替えできないのか

Excelの日付は、内部では「1900年1月1日を1とする通し番号(シリアル値)」で持っています。MicrosoftのDATEVALUE関数の解説にも、2008年1月1日がシリアル値39448になるという説明があります。数値なので、並び替えも期間計算もできます。

文字列の「10月1日」や「令和7年10月1日」は、この通し番号ではなく単なる文字の並びです。そのため「1日」「10日」「2日」のように、文字として先頭から比べた順になります。Microsoftも、テキストとして保存された日付は、フィルターや並べ替え、日付計算で使うために日付形式へ変換できると案内しています(テキスト形式の日付の変換)。

表記パターン別の判定表(説明用の例)

最初にやるのは、列の中にどんな書き方が混ざっているかの棚卸しです。

  • 2025/10/1、2025-10-01、判定:年月日がそろった西暦、変換の方針:DATEVALUEで変換を試す、人が確認すること:結果が数値(シリアル値)になったか
  • 2025年10月1日、判定:漢字区切りの西暦、変換の方針:まず変換を試す。通らなければ年・月・日に分けてDATE関数で組む、人が確認すること:エラーの行がないか
  • 10/1、10月1日、判定:年がない、変換の方針:年は自動で決めず、人が年を指定してDATE関数で組む、人が確認すること:その行が何年のデータか
  • 令和7年10月1日、R7.10.1、判定:和暦、変換の方針:西暦に換算してDATE関数で組む(令和は年+2018)、人が確認すること:元年表記、改元をまたぐ年
  • 25/10/1、10/1/25、判定:2桁の年、変換の方針:年・月・日の並び順を人が決めてから変換、人が確認すること:並び順、20XX年か19XX年か
  • 10/1/2025、判定:月日の順が曖昧な可能性、変換の方針:出どころ(システム、担当者)の慣習を確認、人が確認すること:13以上の数字が入る行から順序を推定できるか
  • 10月1日(水)、全角数字、前後の空白、判定:ノイズ入り、変換の方針:曜日や空白を除いた補助列を作ってから変換、人が確認すること:曜日と日付が実際に合うか
  • 右寄せで表示される値、判定:すでに日付(数値)のセル、変換の方針:変換せずそのまま使う、人が確認すること:文字列の行と混在していないか
  • 未定、随時、空欄、判定:日付ではない、変換の方針:変換せず「要確認」または空欄にする、人が確認すること:無理に日付にしていないか

年がない表記には特に注意が必要です。Microsoftの解説では、DATEVALUEで年を省略すると、パソコンの内蔵クロックの現在の年が使われます。去年のデータが今年の日付に化ける原因になるので、年なしの行は自動変換に任せず、年を明示してください。

元を壊さず、別列で変換して照合する手順

1. 元の列は残して、作業列を増やす

ファイルを複製してから始めます。A列が元の日付だとして、次の列を足します。

  • B列:パターンの種別(判定表の分類名)
  • C列:変換後の日付
  • D列:照合用(変換後の月日を文字で出したもの)
  • E列:要確認フラグ

2. 種別をつける

数千行をAIに丸ごと渡す必要はありません。種類を知りたいだけなら、重複を除いた表記パターンを数十件渡せば足ります。依頼文は次の章に載せています。

3. 種別ごとに変換式を入れる(式は説明用)

西暦で通る行(すでに日付の行はそのまま):
  =IF(ISNUMBER(A2),A2,IFERROR(DATEVALUE(A2),"要確認"))

令和(「令和7年10月1日」形式だけを想定):
  =DATE(2018+MID(A2,3,FIND("年",A2)-3),
        MID(A2,FIND("年",A2)+1,FIND("月",A2)-FIND("年",A2)-1),
        MID(A2,FIND("月",A2)+1,FIND("日",A2)-FIND("月",A2)-1))

年なし(年は人が決める):
  =DATE(2025, 月の数字, 日の数字)

和暦の式は、「令和元年」だと動きません。先に「元年」を「1年」に置き換えてください。平成なら2018を1988に、昭和なら1925に変えます。変換した列は、セルの表示形式を日付にしないと数字(シリアル値)のまま見えます。

4. 元の表記と突き合わせる

見るべきなのは、変換できたかではなく、正しく変換できたかです。

  • D列に =TEXT(C2,"m/d") のように月日を出し、A列の月日と同じかを並べて見ます。
  • 「要確認」の件数と変換できた件数の合計が、全行数と一致するか数えます。
  • 変換後の列を昇順にして、最小と最大が想定の期間に収まるかを見ます。1年ずれた行や、200X年のような外れ値が見つかります。
  • 判定表で「人が確認」とした種別は、各種別から最低でも数行を目視します。

5. 値にして確定する

問題がなければ、C列をコピーして「形式を選択して貼り付け」で値だけを貼り付け、式を消します。この流れは、前掲のMicrosoftの変換手順にもあります。元の列は、確認が済むまで削除しないでください。

AIに渡す依頼文と入力例

渡すのは日付の表記だけにします。氏名、取引先名、金額など、日付以外の列は付けません。機密性のある表は、日付以外を落とすか、説明用の値に置き換えます。サービスの「学習に使わない」設定は、秘密を守る保証とは別の話です。

あなたは表計算の整理を手伝うアシスタントです。
次は、Excelの日付列に混在している表記のパターンです(重複は除いてあります)。

1. 2025/10/1
2. 10月1日
3. 令和7年10月1日
4. R7.10.1
5. 25/10/1
6. 10/1/2025
7. 10月1日(水)
8. 未定

お願い:
(1) 各表記を「西暦年月日」「年なし」「和暦」「2桁年」「順序が曖昧」「ノイズ入り」「日付ではない」に分類して表にしてください。
(2) 分類ごとに、Excelで日付に変換する式の案を出してください。式は私のセルがA2の場合で書いてください。
(3) 推測で補わず、年や月日の順序が決められない表記は「要確認」とし、何を確認すべきか書いてください。

この入力例は説明用で、実在のデータではありません。

AIの返答はそのまま信じず、次の3点を確かめます。

  1. 「年なし」や「順序が曖昧」な表記を、勝手に補っていないか。
  2. 和暦の換算が、令和+2018、平成+1988、昭和+1925になっているか。
  3. 式が自分のセル位置と区切り文字(/、.、「年」「月」)に合っているか。

式がエラーを返したら、そのセルの値と式をAIに戻して理由を聞きます。この場合も、渡すのは日付1セルと式だけで足ります。

判断が割れる4つの場面

AIでも関数でも決められず、人が決める場面は次の4つです。

  • 年がない日付:同じ列の前後の行、ファイル名、作成時期から年を決めます。決められないなら「要確認」で残します。
  • 日と月の順序:10/1/2025が10月1日か1月10日かは、表記だけでは決まりません。13以上の数字が入る行があれば順序を推定できますが、全行が同じ規則で作られたデータかどうかは、出どころに確認します。
  • 2桁の年:Excelのエラーチェックには「20XXに変換」「19XXに変換」がありますが、これはセルごとの機能です。列全体を一括で直すなら、世紀は自分で決めます。
  • 和暦の境目:平成31年と令和元年はどちらも2019年です。平成31年5月のように、年と月日が矛盾する行がないかを見ます。

この4つを「要確認」列に集めておけば、人が見る行は絞れます。日付を全部きれいにするより、確定できる行と確定できない行を分けることが、この作業の目的です。

出典・参考資料