こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【Excel】表示形式の日付を任意の年にしたい

Excelの表示形式の「日付」についてです。

「*2001年3月14日」というアスタリスクがついている場合は、年がOSで設定した時計に合わせているそうですが、「2001年3月14日」という形でも、月と日を入れると年はその年になります。
アスタリスクがついているほうとついていないほうが同じ結果になるのに区別されているということはないと思いますが、それぞれ入力の規則があるのでしょうか?

目的は月日を入れると、設定した年になることです。これに対する方法はありますか?

*2007利用です。

投稿日時 - 2018-03-09 07:58:41

QNo.9476047

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

私なら、システム日付を変更します。終了後戻さないと大変ですが。
システム日付を変更できないなら、入力後2018を2001に置換します。余計なものを入力しないので、この方が早いと思います。

投稿日時 - 2018-03-14 22:41:52

ANo.7

これ自分も欲しかったやつだ!
私はメモ帳などに入力した 2001/ をコピーしておいて、
セルをF2で編集モードにしCtrl-Vで貼り付けてから
残りを入力したりしてました。

エクセル 年 自動入力
エクセル 来年の日付 入力方法
エクセル 去年 の 日付 入力

といったキーワードでこのサイトやWebを検索してみましたが
ここでまだ出ていない方法としては...

・入力が終わってから置換する
 一つ一つ確認・スキップしながらも、まとめて一括でもできます。

・ワークシート関数を使う
 入力するセルと表示するセルが別でいい場合、
 一旦別のシートにまとめて入力してから
 それをコピー&貼り付けするのでもいい場合は
 この方法もいいのではないでしょうか。





マクロ(VBA)でもできますので(表示形式についての質問でなく)改めて
質問してみると教えてくれる・探してくれる人もいるはずです。
じっくり探したわけではないのですが残念ながら私にはサンプルコードは見つけられませんでした。
なお、とりあえず動くっぽいねレベルであればWeb上のサンプルを切り貼りするだけで素人(私)でも作れます。自分で書いてこのサイトのような場所で添削をお願いするのも一つの手でしょう。


参考:

エクセルExcel大事典 VBAマクロ イベントプロシージャ Open Target Cancel EnableEvents Volatile
http://home.att.ne.jp/zeta/gen/excel/c04p59.htm

セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)|VBA再入門
https://excel-ubara.com/excelvba1r/EXCELVBA517.html

Excel VBA Tips
https://www.tipsfound.com/vba/05dateserial
https://www.tipsfound.com/vba/05isdate

Office TANAKA - Excel VBA Tips[選択範囲の操作]
http://officetanaka.net/excel/vba/tips/tips111b.htm


サンプル
セルが変更される度に実行されるプログラムに
日付データを書き換える処理を仕込んだもの。
仕様は添付画像のワークシート関数と概ね同様のはずです。

エラー処理を一切いれていません。ご注意ください。
変換後が閏年なら2/29は2月29日になるべきでは?とか
2/30は2月28日の次の次の日と解釈するほうが好みだけどな~とも思いますが
そうはなっていません。既存の関数に突っ込んでいるだけです。

Private Sub Worksheet_Change(ByVal Target As Range)
  '無保証です。どのような損害につながるか分かりません
  Y = ActiveWorkbook.ActiveSheet.Range("C17").Value
  If Y >= 1930 Then
    'C17セルの値が1930以上のときに動作します。
    '当該セルを空欄にするなどで止められます。
    For i = 1 To Target.Count
      v = Target(i).Value
      If IsDate(v) Then
        'セルのデータが日付に変換可能ならば以下の処理を
        M = Month(Target(i).Value)
        D = Day(Target(i).Value)
        DT = DateSerial(Y, M, D)
        If v <> DT Then
          'セルの値と再生成した値を比較。
          '一度書き換えたセルの再書き換えは行わない...はず
          Target(i).Value = DT
        End If
      End If
    Next i
  End If
End Sub





※こちらはVBAの文字列-日付変換仕様のテストです

Sub test1()

  s = "2/28"
  Debug.Print s; " ";
  Debug.Print IsDate(s); " ";
  Debug.Print CDate(s);
  Debug.Print Day(s)

  s = "2/29"
  Debug.Print s; " ";
  Debug.Print IsDate(s); " ";
  Debug.Print CDate(s);
  Debug.Print Day(s)
  
  s = "2/30"
  Debug.Print s; " ";
  Debug.Print IsDate(s); " ";
  Debug.Print CDate(s);
  Debug.Print Day(s)
  
  s = "1/0"
  Debug.Print s; " ";
  Debug.Print IsDate(s); " ";
  Debug.Print CDate(s);
  Debug.Print Day(s)
  
End Sub

test1の実行結果
2/28 True 2018/02/28 28
2/29 True 2029/02/01 1
2/30 True 1930/02/01 1
1/0 True 2000/01/01 1

投稿日時 - 2018-03-11 19:02:15

>>「”2001年"m"月"d"日"」と言う定義は可能ですが
>エラーになるのになぜ定義は可なのでしょうか?
「”2001年"m"月"d"日"」はエラーになりません。
「2001"年"m"月"d"日"」がエラーになり設定できません。
前者は”2001年"が実際の年数に関係なく固定の文字列として先頭に付加される書式です。従って、実際には2018年3月10日でも表示が2001年3月10日になります。
後者は2001の所をyyyyに指定しないと表示形式の指定の約束事に反しているのでExcelのプログラムで受付を拒否されるためと思います。

投稿日時 - 2018-03-10 15:09:13

お礼

見落としてました。「” "」があるかないかの違いですね。

投稿日時 - 2018-03-14 07:09:29

回答No.4の追加です。
「ユーザー定義」で「2001"年"m"月"d"日"」ではエラーになりますが「”2001年"m"月"d"日"」と言う定義は可能ですが「3/9」と入力したとき「2001年3月9日」と表示されます。しかし、値は「2018/3/9」になります。(表示と値の実体が異なる結果になります)

投稿日時 - 2018-03-09 14:05:05

補足

ユーザー定義で設定されている「yyyy"年"m"月"」の「yyyy」の部分を2001年に差し替えたら「入力した形式は正しくない」というエラーがでましたので

>「”2001年"m"月"d"日"」と言う定義は可能ですが

エラーになるのになぜ定義は可なのでしょうか?

投稿日時 - 2018-03-10 13:00:20

>目的は月日を入れると、設定した年になることです。これに対する方法はありますか?
表示形式は入力値を規定するものではありませんので希望に沿える方法がありません。
尚、日付を想定できる入力があると自動的に規定の表示形式に変更されます。
入力前に表示形式を日付の仲間から「*2001年3月14日」を選んでも「2001年3月14日」を選んでも月日のみ「3/9」のように入力すると「2018/3/9」と判断されます。(年を省略すると入力した年が付加される)
表示形式を「ユーザー定義」から「2001"年"m"月"d"日"」と入力するとエラーになりますので「設定した年」と言う定義ができません。

投稿日時 - 2018-03-09 13:54:42

お礼

ご回答ありがとうございます。

確かに最後の方法してのユーザー定義も不可でした。回答者2の方の言う「オートコレクトを使用する」という方法しかありませんね…

投稿日時 - 2018-03-10 12:55:58

ANo.3

セルの書式の「*2001年3月14日」は、コントロールパネルの「地域と言語」の「日付(長い形式)」と同じ物です。

添付画像の「日付(長い形式)」を変更すると、Excelの表示も「自動的に変更」されます(表示の変更は、シートを開き直した時に行なわれます)

コントロールパネルの「地域と言語」の「日付(長い形式)」が「yyyy年M月d日」になっている場合、月と日は「1桁の場合は1桁、2桁になる場合だけ2桁」になります。

コントロールパネルの「地域と言語」の「日付(長い形式)」が「yyyy年MM月dd日」になっている場合、月と日は「必ず2桁」になります。

一方、セルの書式設定の、アスタリスクの無い「2001年3月14日」は、「地域と言語」の設定とは無関係に、月と日は「1桁の場合は1桁、2桁になる場合だけ2桁」になります。

例えば、「地域と言語」の「日付(長い形式)」が「yyyy年MM月dd日」になっている場合、以下のようになります。

セルの書式「*2001年03月14」⇒表示結果「2014年03月09日」

セルの書式「2001年3月14」⇒表示結果「2014年3月9日」

このように、セルの書式「*2001年03月14」と「2001年3月14」は、異なる結果になります。

例えば、「地域と言語」の「日付(長い形式)」が「yyyy年M月d日」になっている場合、以下のようになります。

セルの書式「*2001年3月14」⇒表示結果「2014年3月9日」

セルの書式「2001年3月14」⇒表示結果「2014年3月9日」

このように、セルの書式「*2001年3月14」と「2001年3月14」は、同じ結果になります。

>目的は月日を入れると、設定した年になることです。これに対する方法はありますか?

「年を省略して、月と日だけを入力した場合」には、Excelは「システム時計の年月日の年を使う」ようになっています。

なので、システム時計が2018年3月9日になっている時に「3/14」と入力すると「2018年3月14日」が入力されます。

Excelでは「現在のシステム時計を変更する事はできない」ので「年省略時に、今年以外の年を自動入力する事は不可能」です。

投稿日時 - 2018-03-09 12:04:37

補足

ご回答ありがとうございます。

なるほど。そのような裏事情(!)がありましたか。ほんとうにオフィスは質問しないとわからないことだらけです。

結局任意の年の自動設定はできずにシステム時計に従うこととなるわけですよね。
アスタリスクがあるのは
『外国でファイルを使うときにその国の書式設定に自動的に変更させるときに「アスタリスク付き」の書式設定をする』
ということで非常に稀なことです。なのでアスタリスク付きと付いてあるのが同列に設定されてますので混乱します。

ところで

>「yyyy年M月d日」になっている場合、月と日は「1桁の場合は1桁、2桁になる場合だけ2桁」になります。

についてですが、2桁というのは「01月01日」というように入力したときの表示のことですよね?「yyyy年M月d日」の1桁、「yyyy年M月d日」の2桁についてはご回答どおりになりましたが、「yyyy年M月d日」の2桁については「yyyy年M月d日」の1桁と同じ結果となってしまいます。

投稿日時 - 2018-03-10 12:53:01

ANo.2

アスタリスク付の書式はOSの設定によって「表示形式」を変えるだけで、データ自体に変更を加えるわけではありません。
月日だけを入力すると、Excelは今年の日付と判断します。
これは変更できません。

代替案ですが、オートコレクトを使用すると多少入力が楽になります。
例えば、修正文字列に ]] 、修正後の文字列に 2015/ と設定しておくと、セルに ]]3/9 と入力すると自動で2015/3/9と変換してくれます。

投稿日時 - 2018-03-09 11:44:01

お礼

ご回答ありがとうございます。

他の方の回答も鑑みたところ、結局今のExcelでは任意の年の自動入力は不可ということがわかりました。
特定の年をたくさん入力したい場合の新たな機能が待たれますが、それまではこのオートコレクトを利用したいと思います。

投稿日時 - 2018-03-10 13:02:14

ANo.1

私もちょっとは気になってたんですが、調べてみました

 例えばセルA1に「*2001/3/14」の書式設定を、A2に「2001/3/14」の書式設定
 をし、「11111」と入力するとA1、A2両方とも「1930/6/2」と表示されまし
 た。
 そこでコントロールパネルの「地域と言語のオプション」を日本語から「英語
 (米国)」に変更し、OKボタンを押します。
 エクセルを確認してみると日付表示はどうなりましたか?
 つまり、外国でファイルを使うときにその国の書式設定に自動的に変更させた
 いのなら「アスタリスク付き」の書式設定をする必要がありますね。

というのにhitしました
『外国でファイルを使うときにその国の書式設定に自動的に変更させたいのなら
「アスタリスク付き」の書式設定をする』
という事らしいです

投稿日時 - 2018-03-09 09:50:04

補足

ご回答ありがとうございます。

>エクセルを確認してみると日付表示はどうなりましたか?

変わりません。また「2001/3/14」という形ではなく「2001年3月14日」となります。

投稿日時 - 2018-03-10 11:32:10