Excelのマクロを使って「文字列」としてセルに入力された日付のデータを「数値」としての日付データに変換する必要があり、どういうふうに加工すればよいかを調べてみたので備忘記録代わりに記事にしておきます。
結論、Replace関数を使って解決しました。
【文字列】としてセルに入力された日付のデータを【数値】としての日付データに変換するマクロ
今回は下記の画像のようにB3セルに「文字列」としての日付のデータが記載されていることを前提にします。

文字列とはどんな状態かというと該当のセルを選択した際にExcelの数式バーにこういった状態で表示されているものです↓
文字列のデータはセルにデータを入力した際に左側に寄った形で表示されます。

Excelで作成したデータを会計ソフトに取り込む際には「日付」のデータは必須項目になることが多く、よく使うのですが、今回のように「文字列」として日付がある場合には会計ソフトに取り込む際にエラーになることがあります。
その場合には日付のデータ形式を「文字列」から「数値」に変換する必要があります。
「数値」形式の日付のデータとは例えば下記の画像のような状態をいいます。セルに入力した際に右側に寄った形で表示されます。

数式バーの部分を確認してみるとこんな感じに表示されているはずです↓

この状態にしてあげると基本的には会計ソフトに取り込む際にも問題なく取り込むことができます。
具体的には「文字列」である「2022年11月9日分」から「数値」である「2022/11/9」に変換すればよいわけです。
で、そこで使うのがReplace関数になります。
Replace関数は指定した文字を、別の指定した文字に変換することができる関数です。
今回のケースにあてはめていくと
「2022年11月9日分」というデータのうち、「年」を「/」に変換することで
「2022/11月9日分」というデータにすることができます。
続いて
「2022/11月9日分」というデータのうち「月」を「/」に変換することで
「2022/11/9日分」というデータにすることができます。
最後に
「2022/11/9日分」というデータのうち「日分」を「(空白)」に変換することで
「2022/11/9」というデータができあがることになります。
それをマクロで表現するとこんな感じになります↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Sub test1() '■文字データの日付から数値データの日付に変換するマクロ '加工① 「年」を「/」に置き換え Range( "c3" ) = Replace(Range( "b3" ).Value, "年" , "/" ) '加工② 「月」を「/」に置き換え Range( "d3" ) = Replace(Range( "c3" ), "月" , "/" ) '加工③ 「日分」を「(空欄)」に置き換え Range( "e3" ) = Replace(Range( "d3" ), "日分" , "" ) End Sub |
マクロを実行すると下記の画像のような結果になります↓

これで「文字列」としての日付のデータから「数値」としての日付のデータを取得することができました。
変数を使用して【文字列】としてセルに入力された日付のデータを【数値】としての日付データに変換するマクロ
ここまでの説明でどういう操作で「文字列」の日付を「数値」としての日付に加工するのかについて、理解できたと思います。
が、
実際に現場でさきほどのコードを使うのは少しまどろっこしいのと、他の作業への応用も兼ね、変数を使ってコードを書きなおしてみました。
それがこちらのコードになります↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Sub test() '■文字データの日付から数値データの日付に変換するマクロ '変数宣言 Dim tmp As Variant tmp = Replace(Range( "b3" ).Value, "年" , "/" ) tmp = Replace(tmp, "月" , "/" ) tmp = Replace(tmp, "日分" , "" ) Range( "f3" ).Value = tmp End Sub |
このコードを実行すると下記の画像のようになります↓

任意の変数「tmp」というものを宣言して、その変数「tmp」の中にB3セルのデータを格納し、さきほどと同じ要領でデータを加工していきます。
その後、加工が終わったタイミングでF3セルにデータを転記するようにしています。
まとめ
Excelのマクロを使って「文字列」としてセルに入力された日付のデータを「数値」としての日付データに変換する方法を記事にしました。
今回使用したReplace関数以外のやり方でも同様の処理をすることは可能だと思いますし、わざわざマクロを使わずにExcel関数を使って処理することも、もちろん可能です。
ですが、どうしてもマクロで処理しないといけない場合もあると思います。そんな時の処理方法の選択肢として何かの参考になれば幸いです。
【本日の近況報告】
最近2022年12月3日公開の映画「スラムダンク」に関してよく話をきくことがあります。
ラジオではよく「スラムダンク」関連の曲がオンエアされていますし、友人2名からも「チケット買った??」的なことをきかれました。
ちなみにその友人は陸上部と柔道部。
バスケ部の自分より熱が高まっている友人がいる一方、同じ温度になっていない自分に少し困惑しています。
【本日の1曲】
EGO-WRAPPIN’/Move On Up
カーティスメイフィールドの名曲をEGO-WRAPPIN’がカバーした1曲。
現在NHKで放送されているドラマ「拾われた男」の主題歌はこれを下敷きにしていると思うのは自分だけでしょうか?