クレジットカードや銀行の明細表をCSV形式でダウンロードして、Excelなどの表計算ソフトで管理している方は多いことでしょう。しかし各社のフォーマットが異なっているため困るという方は多いのではないでしょうか。特に日付形式が異なるため困ります。そこで、今回はいろいろな日付形式を一般的な「年/月/日」形式に変換するプログラムを作ってみましょう。

  • 不揃いな日付形式を手軽に変換するツールを作ってみよう

    不揃いな日付形式を手軽に変換するツールを作ってみよう

どんな日付形式がある?

日付形式というのは文化的な影響が強く反映されるものです。海外に目を向けると、年月日の順番が異なる場合があり「月/日/年」だったり「日/月/年」だったりします。しかも、英語圏では月の部分が数字ではなく、「Jan」や「Feb」など月名の省略形式になっていることが多いようです。

日本では幸いなことに「年/月/日」の順番が保持されているのが幸いです。ただし、年月日を区切る記号が複雑です。区切り記号が漢字で「2025年2月3日」のようにすることもあれば、区切り記号がなく「20250203」のように数字8桁だけの場合、ハイフンの場合「2025-02-03」、ドットの場合「2025.02.05」など様々です。

プログラムを作ってみよう

日本のクレジットカードや銀行が海外の日付形式で出力されることは稀なので、今回はCSVファイルを与えると、日付形式を「年/月/日」形式で出力するプログラムを作ってみましょう。ついでに、日付ごとに並び替えもするようにします。

ここで変換する日付フォーマットは次のようなものです;

- 20250102 --- 年月日が数字のみで構成されるもの
- 2025年01月02日 --- ローマ数字と漢字で構成されるもの
- 2025.01.02 --- ドットで年月日が区切られているもの
- 2025/01/02 --- ハイフンで年月日が区切られているもの
- 25/01/02 --- 西暦が2桁に省略されているもの
- 2025/1/2 --- 月と日が一桁数字のものを2025/01/02のように0を足す

それでは、プログラムを確認してみましょう。

# === 全体の設定 === ---- (※1)
日付列=0 # 左端の列が日付
# === 画面設計 === ---- (※2)
「以下にCSVファイルを貼り付けてください:」のラベル作成。
改行作成。
TA=「」のテキストエリア作成。
改行作成。
変換ボタン=「日付変換」のボタン作成。
変換ボタンをクリックした時には:
  日付変換処理実行。
TA2=「ここに結果が表示されます」のテキストエリア作成
改行作成。
コピーボタン=「上記をコピー」のボタン作成。
コピーボタンをクリックした時には:
  TA2$値をクリップボード設定。
  「コピーしました」と言う。
# スタイルを指定
TA$幅=「99%」
TA$高さ=10em
TA$文字サイズ=14px
TA2$幅=「99%」
TA2$高さ=10em
TA2$文字サイズ=14px
# === 変換処理 === --- (※3)
●日付変換処理実行とは
  CSV=(TA$値)をCSV取得
  ヘッダ=CSV[0]
  CSVの0を配列削除
  # 日付形式を変換
  結果=CSVを配列複製。
  LINE=0
  CSVを反復:
    それは対象[日付列]
    空白除去
    # 記号違いの場合 --- (※4)
    「-」を「/」に置換。
    「.」を「/」に置換。
    『(\d+)年(\d+)月(\d+)日』を『$1/$2/$3』に正規表現置換
    # 20240101など数字だけのパターン
    『(\d{4})(\d{2})(\d{2})』を『$1/$2/$3』に正規表現置換
    # 2024/1/1など0で桁数が埋められていないパターン
    『^(\d{2})\/』を『20$1/』に正規表現置換
    『\/(\d)\/』を『/0$1/』に正規表現置換
    『\/(\d)$』を『/0$1』に正規表現置換
    結果[LINE][日付列]=それ
    LINE = LINE + 1
  結果の0を表ソート
  結果の0にヘッダを配列挿入
  S=結果を表CSV変換
  TA2$値=S
ここまで。

上記プログラムを、なでしこ簡易エディタ(https://nadesi.com/v3/start)に貼り付けて実行してみてください。ここでは、以下のようなバラエティに溢れた日付データを持つデータを貼り付けてみましょう。プログラムを実行すると二つのテキストエリアが表示されますが、上側に下記のCSVファイルの内容を貼り付けましょう。

取引日,入出金(円),備考,内容
"2024/01/01","-200","0","駐車料金"
2024年8月29日,-5000,0,送金
24.1.1,-3000,0,猫の餌
24年2月3日,-3000,0,猫の餌
2024/05/03,-1000,テスト
2024.1.1,-3000,0,猫の餌
20240303,-1000,0,テスト送金
2024.01.25,-10000,0,駐車料金
20240122,-12926,0,犬の餌

すると、次のように表示されます。バラバラだった日付フォーマットが「年/月/日」に変換されていることを確認できるでしょう。また、日付順に正しく並んでいるのも確認できます。

  • プログラムを実行して、CSVデータを貼り付けたところ

    プログラムを実行して、CSVデータを貼り付けたところ

ちなみに、ダウンロードしたCSVファイルはExcelで開かず、メモ帳などで開いたデータを貼り付けましょう。Excel上でコピーしたデータをコピーすると、カンマ区切りのCSVではなく、タブ区切りのTSV形式になってしまいます。プログラムをTSVに対応させるのも簡単ですので、余力があれば挑戦してみましょう。

それでは、プログラムを改めて詳しく確認してみましょう。(※1)ではプログラム全体の設定を記述します。もし日付フィールドが一番左でない場合は、この値を書き換えてください。

(※2)では画面設計を行います。ラベルやテキストエリアなどのGUI部品を生成しています。「改行作成」と記述することで部品を縦に並べることができます。

(※3)では「日付変換」ボタンをクリックした時の処理を記述します。ここでは、上側のテキストエリアの内容を読み取り、CSVデータとして取り出して、一行ずつ日付処理を変換します。

(※4)以降の部分で実際に日付フォーマットを変換します。「置換」命令や「正規表現置換」命令などを利用して置換処理を行います。

完成版はなでしこ3貯蔵庫に

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら