エクセルで日付を扱うおハナシ | サラリーマン八神かかしの「パソコンおシゴト日記」

エクセルで日付を扱うおハナシ

先日のページにDatevalue関数に限界があることを書きました。その時の例では「12-Oct-2009」とある文字列を、Datevalue関数は日付として扱うシリアル値に変換します。

しかし、例えば「12.10.2009」とある文字列だと変換できません。なぜならばこれを見ただけでは、いつの日付であるかが判断つかないからです。2009年10月12日かもしれないし、12月10日かもしれません。人が判断できないことを、パソコンに判断させるのは無理なことです。「12.10.2009」がどんな形式で記述されているかを、パソコンに宣言しなければなりません。でも、Datevalue関数では、残念ながら、その宣言を受け付けるような仕組みにはなっておりません。

今回は別の方法でシリアル値による日付データに変換する方法をご紹介します。

「区切り位置」

メニューバーの「データ(D)」には「区切り位置(E)」というメニューがあります。もともとはこの機能、今回のような目的のためにある機能ではありません。ひとつのセルに入力されている一連の文字列の中に含まれる特定の文字を「区切り位置」として、その文字列を分解して別々のセルに入力させるための機能です。

例えば、文字列「12.10.2009」で、「.(ピリオド)」を区切り位置と指定した場合、今までひとつのセルに入力されていた「12.10.2009」が分解されて、もとのセルには「12」が、その右隣のセルには「10」が、更にその右隣には「2009」が入力されます。

「12.10.2009」をシリアル値による日付データに変換する

さて、本題です。

対象の範囲を先ず指定して「区切り位置(E)」を実行させます。すると「区切り位置指定ウィザード」が起動します。

  1. もとデータの形式を選択します。多くの場合はデフォルト通りの選択のまま次に進んで問題ありません。
  2. 次に区切り文字の指定を求めてきます。今回の場合では何も指定せずに次に進みます。
  3. 最後に列ごとのデータ形式の指定を求めてきます。今回の場合では日付ですから「日付(D)」を選びます。
  4. さらにその日付の形式を指定します。「12.10.2009」は「日」「月」「年」の順番に並んでいるとします。その場合「DMY」を指定して完了です。

以上で、シリアル値による日付のデータに変換されますが、実はウィザード3ページ目で「12.10.2009」の意味をエクセルに宣言しているのです。

  • データ形式の指定で「日付(D)」を選ぶことで、「12.10.2009」が日付であることをエクセルに宣言します。
  • 「DMY」で「日」「月」「年」の順番で並んでいることをエクセルに宣言します。

「DMY」の意味ですが、

  • 「D」とはDateのD、つまり「日」のことです。
  • 「M」とはMonthのM、つまり「月」のことです。
  • 「Y」とはYearのY、つまり「年」のことです。

と言うことは、「12.10.2009」が12月10日のことを表現している場合ならば、「MDY」を選択すればよいのです。

余談ですが、「セル書式の設定」の「表示形式」「ユーザ定義」では、この「M」などが使われます。詳しく書いちゃうと今回のおハナシから外れてしまいますから、ここでは割愛します。

先日のページへはここからリンク しています。

実は今回ご紹介した機能は、ある人に教えてもらったものです。この機能は、わたしにとっては普段あまり目にとまらないところにありました。メニューを実行させる時、わたしは普段あまりマウスを使いません。キーボード操作に置き換えられるところは、極力マウスを使わずにキーボードを操作するようにしております。

それはそのほうが操作が速いからです。結果的にこの機能の存在にあまり気が付いていませんでした。たまにはマウスを使ってこのメニューの中にどんな名前のサブメニューがあるかを覗いてみるのも悪くはないな、と思った次第です。