• ベストアンサー

EXCELの数値から年月への変換

EXCELで日付(年月)が数値で入力されているものがあります。 年月へ書式変更すると10月だけ上手く行きません。 良い方法はないでしょうか? 例)変換前 2016.10 (書式 "0.00")    ↓   変換後 1905年7月 (書式 ”yyyy年mm月”) 以上

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 変換前の数値が入力されているセルが例えばA1セルであった場合には、変換後の日付を出力するセルに対して、セルの書式設定の表示形式を[ユーザー定義]の yyyy"年"mm"月" に設定した上で、次の様な関数を入力されると良いと思います。 =IF($A1="","",IFERROR(TEXT(SUBSTITUTE(IF(LEFT(CELL("format",$A1),1)="F",TEXT($A1,"0."&REPT(0,MID(CELL("format",$A1),2,2))),$A1&""),".","/"),"yyyy年mm月")+0,"変換不能"))

charlie3333
質問者

お礼

回答ありがとうございました。 ご提示いただいた数式で希望通りの変換ができる様です。 数式の内容を理解できる様に詳しく見てみたいと思います。

その他の回答 (3)

  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.4

「2016.10」を関数を使って、別のセルに「2016年10月」に変換するのは簡単ですが、現在入力されているセルの書式をいじるだけで 「2016年10月」と表示させることはできないと思います。 一つの方法は「置換」です。 ただし、10月の置換は一筋縄ではいきません。 2016.01 2016.02 2016.03 ・ ・ ・ 2016.09 2016.10 2016.11 2016.12 と入力されているとします。 2016.10 は、書式を 0000.00 に設定して表示させていますが、数値は2016.1 です。 これらのセルを選択して、置換ウイザードを開き、「.」を「/」に置換します。 すると、これらの数値は「年月」として入力されたものとなり、 書式を yyyy年mm月 に設定すると、 2016年01月 2016年02月 2016年03月 ・ ・ ・ と表示されますが、10月だけは、1月になってしまいます。 それを避けるために、まず、2016.10 だけを先に置換します。 選択範囲は対象セル全体でOK です。 置換ウイザードで、2016.1 を2016/10 に「すべて置換」します。 置換前を 2016.10 にすると、検索にヒットしません。 そのとき、「セル内容が完全に同一であるものを検索する」にチェックを入れる必要があります。さもないと、2016.11 も、2016.12 も2016年10月 になってしまします。 2015.10 や、2014.10 があればそれらについても 2015/10 または、2014/10 に置換します。 つぎに対象セル全体を範囲選択して、 「.」を「/」に「すべて置換」します。 この2回の操作(2015年、2014年のデータがあれば、4回の操作)ですべて、xxxx年xx月 になります。 少々面倒な操作ですが、データ数がたくさんあるときはやってみる価値があると思います。 10月を置換するまえに「.」を「/」に「すべて置換」すると、1月と10月の区別がつかなくなってしまいますので注意してください。やってしまったら、「元に戻す」で戻ります。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>年月へ書式変更すると10月だけ上手く行きません。 例に提示の 2016.10 と言う値は2016年10月のことですか? 月だけでなく西暦の年も書式設定の変更では無関係の年月として表示されるはずです。 >良い方法はないでしょうか? A1セルに2016.10と入力されている値を2016年10月1日のシリアル値に変換してから書式をを"yyyy年mm月"の指定しないといけません。 関数で変換するにはDATE関数を使うと確実です。 =DATE(A1,MOD(A1*100,100),1) 西暦年月をキーボードで入力するときは2016/10のようにタイプしてEnterキーで確定すると日付のシリアル値に変換されますが、2016.10と入力してEnterキーで確定すると数値の2016.1と言う値になります。 これはExcelの処理ではプログラム上の規定事項なので変えられません。 日付のシリアル値とは1900/1/1を1とする経過日数なので2016.1を日付の書式で表示すると1905年7月8日になります。 2016年10月1日のシリアル値を「標準」の表示形式にすると42644と言う数値であることが分かるでしょう。 この機会にExcelで扱う数値データの表示形式について知識を広めてください。 例えば時刻は1日(24時)を1とした小数であり表示形式で12:25:15のように変化させることができることも知っておくと良いでしょう。

回答No.1

> 10月だけ上手く行きません。 そもそも、他の月日でも上手く行かないと思いますが。 逆に、どういう日付なら上手く行ったんでしょう? 書式どうこうでは無理だと思うので、 A1セルに「2016.1」という数値が入っているとして、 B1セルに、=DATE(INT(A1),MOD(A1*100,100),1) B1セルの書式を「yyyy年mm月」 とか。

関連するQ&A

  • エクセルの日付書式を文字書式に変換

    エクセルで日付書式yyyy.mm.dd(例)を文字に直すと88418(例)になってしまいます。 やりたいことは日付で入力したものを文字書式に直し別シートに貼り付けたいのですがうまくいきません。 いい方法お教えていただけませんでしょうか。よろしくお願いします。

  • EXCEL 日付の入力形式

    こんにちは。 日付が、dd/mm/yyyyの形式で入力されたデータをもらいました。 関数を利用したいのでEXCELに日付として認識させたいのですが、 セルの書式設定で設定してもだめなようです。 質問 1)yyyy/mm/ddの形式で入力されていないと日付として認識されないのでしょうか? 2)現在の形式のまま、日付として認識させる方法はありますか? 3)dd/mm/yyyyをyyyy/mm/ddに変換する方法はありますか? 以上、よろしくお願いします。

  • エクセルでの日付の数値変換

    エクセルで8ケタ構成の日付(例20140101)を入力しているのですが#########という表示になってしまいます。他シートの日付データとVLOOKUPをしたいので数値に変換したいのですが方法をご教示頂けませんでしょうか。講師の方に教わっていただいているときに「▽マークが出てくるのでそこから数値に変換を選んでください」というようなことを言われたのですがどうすれば▽マークが出てくるのか分からずにいます。お手数ですが宜しくお願い致します。

  • Excel VBA で日付を4ケタの数値に変換させるには?

    ある日付データを 『月』と『日付』のみの4ケタの"文字列"にさせて表示処理させたいのですが、困っております。 現在、VBAを使用しないで処理させると…こんな感じで困っています。 1.日付を yyyy/mm/dd 表示 2.編集~ 『/』のみを全て『0』に変換 3.RIGHT関数で4ケタ(または5ケタ)抜き取る *データ* 日付    yyyy/mm/dd  変換      RIGHT(4ケタ) 1月5日  2005/1/5     20050105   0105 1月10日  2005/1/10    200501010   0110  ・    ・  ・    ・ ▲不具合状況 1."1月10日" のように日付が2ケタになる日は "1010" のように表示がずれる。RIGHT(○,5) で対処する方法もあるが…効率があまり良くない。 2."yyyy/mm/dd" のデータを直で "RIGHT( )" で処理させると思ったとおりの値が戻ってこない。 yyyy/mm/dd      RIGHT() 2005/1/5    →   8537 …変な値が戻ってくる? VBAで一気にやる方法ありますでしょうか? お知恵を拝借ください!

  • Excelでセルの表示形式を「yyyy年mm月」から「yyyy/mm/dd」へ

    エクセルで数式をあてはめて6ヶ月後の日にちを「yyyy年mm月」形式で出しているセルがあります。その該当月に作業をしたら、作業日をセルに上書きで入力するのですが、手入力によって「yyyy/mm/dd」形式で入れたいのです。 今、セルの表示形式が「yyyy年mm月」なので、手入力で入れても「yyyy年mm月」としかならず、「yyyy/mm/dd」にするためにセルの書式設定→表示形式の変更を行っている状態です。「yyyy年mm月」形式を解除したいのですが、Delボタンでは入力された数値しかクリアーされず、形式は残ってしまいます。「yyyy年mm月」を解除して「標準」または「yyyy/mm/dd」にもっていく簡単な方法はありますでしょうか?

  • Excelの数値読み替え

    Excelで数値で入力されている日付を日付データに読み替えたいのですが、方法がわからず困っています。教えて下さい。 現在 : 20021018というように数値で入力されてしまっている。 変換 : 2002/10/18のように日付として認識させたい。 宜しくお願いします。

  • Excelが勝手に変換する書式を変えたい

    Excelのおせっかい機能を働かせなくする方法、もしくは働くにしても自分が意図する書式に変えてくれるように変更する事はできるのであれば、方法を教えていただきたいと思います。 例えば、セル内で"09/01"と入力すると、そのように表示させたいにも関わらず、勝手に"9月1日"と変えられてしまいます。 気を利かせたつもりの機能なのでしょうが、正直言って「おせっかい」です。 そう思われる方も、特に使い込む方に、多くいらっしゃるのではないでしょうか? ・おせっかい機能を働かせなくする方法 (全セルの書式を文字列にしてしまうと、計算ができなくなるのでダメですね。) ・おせっかい書式変換を意図する書式にさせる方法 例えば、"yyyy/mm/dd"、"mm/dd"、"[hh]:mm"など、桁が揃って見やすい・誤解の少ない表記に統一したいのですが、そういったニーズは一般的でないのでしょうか? いずれかで私のニーズは解決するかと思いますが、どなたかお知恵を貸してください。宜しくお願いします。

  • 年月だけの入力って出来ますか?

    AC2000/WIN2000です。 年月だけの入力をしたいんですが出来ないので教えて下さい。 プロパティの書式に、 『yy\年mm\月』としてあるので 表示は年月だけです。 ただ、実際は 2/4/1のつもりで2/4と入力すると、 2/2/4と認識してしまうのです。 例えば2/4と入力したら 2が年、4が月、日が全て1日になるようには出来ませんか? 宜しくお願いします。

  • エクセルの日付表記に関して(書式の強制化

    エクセル(2003)で日付を入力すると勝手に書式が決まってしまい困ってます。 セルに 11/24/09(09年11月24日) と入力するとこのままの状態で打ち込めるのですが 11/9/09(09年11月09日)と入力すると2011/9/9に強制的に変換されてしまい書式も変更されてしまいます。 日付の部分が一桁の日(1日~9日)だとエクセルの方が月だと勝手に 判断してこのような強制変換をしているようなのですがこれを させない方法?はありますでしょうか。

  • 日付や時刻の"01"を" 1"に変換したいです。

    下記のような問題で悩んでいます。何かよいアイディアがありましたら教えて下さい。 【要件】 ・SimpleDateFormatで指定された書式の文字列にした後、年月日時分秒ミリ秒の"01"~"09"を" 1"~" 9"のように前0を半角スペースに一括変換したい(年は書式がyy形式の場合のみ)。 ・SimpleDateFormatへの書式はエラーが起きない限りどんなものでも受け入れる(通常、書くわけがない書式についても)。 例) "yyyy/MM/dd HH:mm:ss:SSS" "'yyyy/MM/dd HH:mm:ss:SSS形式:'yyyy/MM/dd HH:mm:ss:SSS"  ※''の中にあるMMはテキストなので英字のまま。 "yyyy/MMMMMMMMMMMMMMMMMMMM/dd HH:mm:ss:SSS"  ※Mの数は不明 "yyyy/MM/dd MM MM HH:mm:ss:SSS"  ※月の表示指定が複数 引数 :日付(yyyyMMddHHmmssSSS形式), SimpleDateFormatへの書式 戻り値:SimpleDateFormatで変換後に"01"~"09"を" 1"~" 9"にした文字列 自分なりの検討案としては下記になります。 a.引数の書式をそのままSimpleDateFormatに引き渡ずに、一部修正してから呼び出す。 例)"yyyy/MM/dd HH:mm:ss:SSS"→yyyy/_M/_d _H:_m:_s:__S" ※"_"は半角スペースです。 実際はMやdなどが2桁になる場合は変換しません。 かなりごりごり200行ぐらい試しに書いたのですが、対応できないケースが出てきてその都度エンドレス状態です。 ちょっとこのまま実装するわけにいきません。いつバグがでるか・・・。 b.SimpleDateFormatで変換後に年月日時分秒ミリ秒に該当する箇所に"01"~"09"があったら置換する。  引数の書式からMMやddのindexを保持して、SimpleDateFormatで変換後の該当indexに置換。 例) 書式:"yyyy/MM/dd_HH:mm:ss:SSS" 日付:"20090101010101001" "2009/01/01_01:01:01:001"→"2009/_1/_1__1:_1:_1:__1" ※"_"は半角スペースです。 但し前提として、書式とSimpleDateFormatで変換後の文字列が1対1になっている必要があります。 単純な例ですと 書式:"yyyy/MMMM/dd HH:mm:ss:SSS" 書式のddは11~12桁目ですが、SimpleDateFormatで変換後は下記のようにインデックスがずれます。 "2009/1月/01 01:01:01:001" "2009/12月/01 01:01:01:001" もしかしたら下記のような感じで吸収できるのかもしれませんが、ちょっと個人的に出来そうに思えませんでした。 月が1桁 かつ 書式が"M"の場合 月が1桁 かつ 書式が"MM"の場合 月が1桁 かつ 書式が"MMM"の場合 月が1桁 かつ 書式が"MMMM"の場合 月が1桁 かつ 書式が"Mxn"の場合 月が2桁 かつ 書式が"M"の場合 月が2桁 かつ 書式が"MM"の場合 月が2桁 かつ 書式が"MMM"の場合 月が2桁 かつ 書式が"MMMM"の場合 月が2桁 かつ 書式が"Mxn"の場合 ここ1,2週間ほど煮詰まっています。どなたかアドバイス頂けると助かります。 自分的なネックは書式が限りなくフリー形式なところです。

    • ベストアンサー
    • Java

専門家に質問してみよう