1. はやつ~のしゃべる練習
  2. 「Excelの日付入力年またぎ問..
2026-01-03 10:54

「Excelの日付入力年またぎ問題」

2 Comments

ひろひろしさんの第3回テックLTポッドキャストカレンダー参加エピソード

 

イマドキはAIがxlsmファイルも解析&解説してくれるみたいです。すごい時代になりました。

 

Geminiが作ってくれたプログラム(VBA)(以下、Geminiのチャットログのコピペ)

Excelの場合は「設定画面」ではなく、**VBA(マクロ)**という機能の中に簡単なルールを書き込む形になります。一度設定してしまえば、あとは「1/12」と打つだけで、Excelが勝手に年を判断して書き換えてくれます。

以下の手順で、最もシンプルで確実なコードを設定できます。

Excelで「設定通りに年を変える」手順

1. VBAエディタを開く

  1. 該当のExcelファイルを開きます。
  2. キーボードの Alt + F11 を押します(VBAの画面が開きます)。
  3. 左側のリストから、この機能を動かしたいシート名(Sheet1など)をダブルクリックします。

2. コードを貼り付ける

開いた真っ白な画面に、以下のコードをそのままコピー&ペーストしてください。

VBA

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim inputDate As Date
    Dim currentMonth As Integer
    Dim inputMonth As Integer
    
    ' エラー回避と動作の高速化
    On Error Resume Next
    Application.EnableEvents = False
    
    For Each cell In Target
        ' 入力されたものが日付であり、かつ「年」が今年の場合のみ処理
        If IsDate(cell.Value) And Year(cell.Value) = Year(Date) Then
            
            currentMonth = Month(Date)     ' 今の月
            inputMonth = Month(cell.Value) ' 入力された月
            
            ' --- 【システマティックな設定ルール】 ---
            ' 例:今が10月〜12月で、1月〜3月の日付が入力されたら「翌年」にする
            If (currentMonth >= 10 And currentMonth <= 12) Then
                If (inputMonth >= 1 And inputMonth <= 3) Then
                    cell.Value = DateAdd("yyyy", 1, cell.Value)
                End If
            End If
            
            ' 他のルール(例:1月〜3月に10月以降を打ったら前年にする)も追加可能
            ' ---------------------------------------
            
        End If
    Next cell
    
    Application.EnableEvents = True
End Sub

3. 保存して閉じる

  1. VBAの画面を閉じます。
  2. ファイルを保存する際、必ず**「Excel マクロ有効ブック (.xlsm)」**という形式で保存してください。

このソリューションでできること

  • 10月〜12月に作業している時: 「1/12」と打てば、自動的に 2027/1/12 になります。
  • それ以外の月(例:5月)に作業している時: 「1/12」と打てば、通常通り 2026/1/12 のままです。
  • 特定の範囲だけに適用したい: もし特定の列(A列だけ、など)に限定したい場合は、コードを少し書き換えるだけで対応できます。

#テックLTポッドキャストカレンダー

サマリー

このエピソードでは、Excelの日付入力に関する年またぎの問題が語られています。具体的には、Google日本語入力やVBAを用いた解決策が提案され、マクロ使用時の注意点も紹介されています。

Excelの日付入力の問題
こんにちは、しゃべる練習です。今回のテーマは、「Excelの日付入力の年またぎ問題」です。
第3回テックLTポッドキャストカレンダーが絶賛進行中となっておりますが、1月2日の回がヒロヒロシさんがエントリーいただきました。ありがとうございます。
今回テーマに取り上げられているのが、Excelの日付入力絡みの話ですね。
12月とかに1月の日付を入れたりすると、本来は翌年の1月であってほしいところが、その入力したタイミングの年情報が標準で入るので、
手間が増えるということが課題なのかなと思うんですけれども、これに対してヒロヒロシさんのほうでは、今回Google日本語入力のほうで単語登録をする形でこの課題をクリアされたということで、
これでいいんじゃないかなと私も思いましたけれども、一個キーを押す数が増えるということはあるのかもしれないですけれども、
Excel、これがリスンだったらDiscordとかにこういう機能が欲しいですとか言ったら、数日後にはお知らせでやりましたみたいなのが流れてくれるかもわからないですけれども、マイクロソフトさんはなかなかそうもいかなさそうな感じはしますね。
どうなんでしょうね、最近のマイクロソフトさんは昔のマイクロソフトさんとは一味違うように感じる時もあるので、フィードバックみたいなのでこういう機能欲しいですとか言ったら実装してくれる可能性もあるのかなと思ったりもしますけれども、
やっぱり一番スマートな形としてはExcel本体が対応してくれることかなと思うんですが、それが難しいとなると別のアプローチということが出てくるのかなと思いまして、今回僕の方でもちょっと考えてみました。
ちなみに僕の場合はですね、Excelで日付入力をする頻度が多分そんなに高くないからかと思うんですけれども、自分だったらどうするかなって思った時に、普通はね、その2026スラッシュ1スラッシュ12とか打ってしばらくね。
普通はね、その12月12スラッシュ12とか1スラッシュ12とか打てばいいので楽だけれども、この年をまたぐ前後はちょっと2026スラッシュとか2025スラッシュとかいうのを頭に入れつつ入力するから入力する手間が増えるなぁ、ちょっとめんどくさいなぁと思うけれども、
まあそれで、それでまあ、しゃあないという感じかなと思いました。
今回ね、やってみて気づいたことは、20は入れなくてもいいんだなということを知りました。
だから25スラッシュ12スラッシュ12とか26スラッシュ1スラッシュ12とかいう風に打てば年を指定してくれるんだなっていうのが分かりました。
これでしばらくはいけそうですけどね、これが2100年になったらどうなるのかなとかちょっと心配になりましたけれども、まあ多分私がそんな心配をしなくてもいいのかなと思い直しました。
あとですね、そうそう、だからそういう時は10キーがいるなと思いました。
普段私10キーを使わないんで、あのキーボードのローマ字の上にある1から0の横に並んでいる数字で打っているので2025とか2026とか打つのちょっとめんどくさいんですよね。
時々打ち間違えたりもするので、もしそれだけ数字をいっぱい打つっていう、日付をいっぱい打つっていう、しかもその年またぎでね、12月とか1月に2025とか2026とかスラッシュとか何回もたくさん打たないといけないんだったら、
10キーを持ち出してきて、つなぐというか、Bluetoothだからつながないですけど、10キーで打つのかなと、自分だったらというふうに思いました。
VBAを用いた解決策
次に今回はジェミニさんに相談してみましたところ、ExcelのVBAというのでできますよということで、コードも書いてくれたので、それもやってみました。
オルトプラスF11キーを押すっていう、そんなことを長年ExcelのVBAを立ち上げるとかっていうことをしてなかったですけども、やるとですね、なんか開発環境みたいなやつが出てきて、
そのシートっていう、なんだ、場所、オブジェクトみたいなところにVBAを書き込むとですね、日付を入れて、今の日付が12月で、そこに入力した月が1月と書かれていれば、年に1を足すっていう、そういう処理が書いてくれましたので、
それをやると、さっきの問題が片付くと言えなくもないなと思いました。
ただExcelのマクロって結構、なんていうか、危険物扱いっていう感じがあるので、もちろん自分で書いたやつは問題ないことは自分でわかるし、
今回ジェミニーが書いてくれたやつとかも、10行とかっていうレベルの内容で、VBAはちょっと英語みたいな感じなので、何やってるかっていうこともわかるし、怪しい外部通信とかをするわけでもないし、大丈夫だと思うんですけれども、
それを入れたやつは、XLSMっていう拡張子で保存するらしいんですけれども、それで保存して使えばいいんだとは思うんですよね。
起動した時に警告とか出るかもなんですけども、これは信頼できるよということで、OKってやればOKだとは思うんですよね。
これ自分一人だけでやるのであればいいかなと思うんですけども、会社で共有するときに会社の人が、何でもマクロって言ったら信用すればいいんだっていう、内容はわからないけど信用すればいいんだってなると、それは問題になることもあるなと思うので、難しいですよね。
マクロは絶対に使ってはいけないっていうルールにしたいと思うときもあるような気がします。
このXLSMだけじゃなくて、こういうVBA系のやつは、担当者のブラックボックスになってしまうケースもあるかなと思うので、
その仕様書とかもよくわからないし、どこで何を処理しているのかっていうのをモーラー的に確認することもなかなか難しいので、そういうのはちょっとあまり良くないよっていうことも言われてたかなと思うんですけれども、
ただですね、今回わかったことで新たな発見としては、今回書いてもらったのはGeminiに書いてもらったんですけども、その書いたXLSMのファイルをですね、次はGPTに添付してですね、
このXLSMのファイルは危険じゃないか調べてくださいとか、このXLSMファイルに含まれるマクロはどんな内容か、またどんな処理をしているのか教えてくださいみたいなことを調べてくださいみたいなことを言うとですね、もうやってくれちゃうっていうことがわかりましてですね。
それを日本語でわかりやすく説明してくれてしまうので、じゃあこれ使ってもいいんじゃないかなって思ったりもしました。
これに限らずAIの進化によって今までの常識がどんどん変わる。今まで常識だと思ってたことが非常識になり、非常識だと思ってたことが常識になりっていうことがすごい勢いで起こり始めているような気がするんですけれども、このVBAに関してももしかするとそういうことがあるかもしれないなとちょっとだけ思いました。
というわけで今回のシャベル編は以上です。
テックLTポドカストカレンダーについては1月3日のところですね、田中さんが埋めていただいているみたいでありがとうございます。
それに伴いですね、自動的に1月5日を追加してますので、まだここ空いてますようなのでよかったらご参加ください。
というわけで今回のシャベル編は以上です。ではまた次回。
10:54

コメント

わぁ、Geminiさんにコード書いてもらったんですね!ありがとうございます! そうなんですよね、マクロ付きEXCELってあんまりいいイメージがないんですけど、会社で多様しちゃってます(笑) 私もChatGPTにマクロを作ってもらいましたけどうまく動かなかったので、諦めたことがありました(笑)でもこのコードはちょっと試してみたいと思います!

はやつ~

ぜひぜひ~ 一応私の環境では仕様通りには動いてくれました(この仕様で十分なのかどうかは疑わしいかもですが・・・) 天下のMSさんなので、イマドキはちゃんとメッセージ読んで適切に設定して使えば大丈夫だと思うのですが、うまくイメチェンできずに過去の悪いイメージを引きずっちゃってる印象があります。VBA使用OKな環境なら、AIでばんばん業務効率アップできそうですね!

スクロール