「Power Query エディター」には、日付/時刻/期間といったデータを処理するためのコマンドが用意されている。今回は、これらのコマンドを使って「日時データ」を「数値データ」に変換する方法を紹介していこう。日付/時刻/期間を扱うときに役立つコマンドなので、この機会に使い方を覚えておくとよい。

日付データから年、月、日を数値として抜き出す

前回の連載では、「日時の計算」と「期間の考え方」について紹介した。今回は、日時データから「年、月、日」や「時、分、秒」だけを抜き出したり、期間データを数値データに変換したりする方法を紹介していこう。

  • 日付、時刻、期間コマンドの使い方

まずは、日付データから「年、月、日」だけを数値データとして抜き出す方法を紹介する。以下の図を例に、具体的な手順を紹介していこう。このデータ表には「生年月日」のデータが「日付」として記録されている。

  • 会員の生年月日を記録したデータ表

この列を選択すると、「列の追加」タブにある「日付」コマンドを使用できるようになる。このコマンドを使って、日付データから「年、月、日」を抜き出してみよう。

  • 「日付」コマンドに用意されている処理

たとえば「年」だけを抜き出すときは、「日付」コマンドから「年」→「年」を選択すればよい。

  • 日付データから「年」だけを取得する処理

すると、表の右端に「年」という列が追加され、各行の「生年月日」から「年」の数値だけを抜き出したデータが表示される。この列のデータ型は「整数」になっているため、これらのデータは通常の数値として扱える。

  • 数値として取得された「年」

もちろん、「生年月日」から「月」だけを数値(整数)として抜き出すことも可能だ。この場合は、「日付」コマンドから「月」→「月」を選択すればよい。

  • 日付データから「月」だけを取得する処理

すると、表の右端に「月」という列が追加され、各行の「生年月日」から「月」の数値だけを抜き出したデータが表示される。こちらは「来月に誕生日を迎える人」だけをピックアップする場合などに活用できるだろう。

  • 数値として取得された「月」

同様に「日付」コマンドから「日」→「日」を選択すると、「生年月日」から「日」だけを数値(整数)として抜き出すことができる。これらの処理は、Excel関数のYEAR、MONTH、DAYに相当する機能、と考えると理解しやすいだろう。

ちなみに、「日付」コマンドは「変換」タブにも用意されている。こちらを利用した場合は、「新しい列」を作成するのではなく、「現在の列」のデータが置き換えられる仕組みになっている。たとえば、「変換」タブにある「日付」→「日」→「日」を選択すると、「生年月日」の列のデータを「日だけを抜き出した数値」に置き換えることが可能となる。

  • 「変換」タブに用意されている「日付」コマンド

  • 日付データから「日」を取得した例

時刻データから時、分、秒を数値として抜き出す

続いては、あるカラオケ店の「入室時刻」と「退室時刻」を記録したデータ表を使って、時刻データの処理方法を解説していこう。データ型に「時刻」が指定されている列を選択すると、「時刻」コマンドを使用できるようになる。

  • 「時刻」コマンドに用意されている処理

以降の考え方は、先ほど示した例と基本的に同じだ。たとえば、時刻データから「時」だけを抜き出したいときは、「時刻」コマンドから「時」→「時」を選択すればよい。

  • 時刻データから「時」だけを取得する処理

  • 数値として取得された「時」

同様の手順で「分」や「秒」だけを数値として抜き出すこともできる。これらの処理は、Excel関数のHOUR、MINUTE、SECONDに相当する機能、と考えればよいだろう。もちろん、「変換」タブにも「時刻」コマンドが用意されている。新しい列に「時、分、秒」を抜き出すのではなく、現在のデータを置き換えたい場合は、「変換」タブにある「時刻」コマンドを使用すればよい。

  • 「変換」タブに用意されている「時刻」コマンド

ちなみに、データ型が「日付/時刻」として記録されている列を選択したときは、「日付」コマンドと「時刻」コマンドの両方を使用できるようになる。つまり、抜き出したいデータ(年月日または時分秒)に合わせて、使用するコマンドを選択すればよい訳だ。

  • データ型が「日付/時刻」の列を選択した場合

ここまでの話は、わりとスムーズに理解できるだろう。問題は、パワークエリならではの考え方となる「期間」の処理方法だ。続いては、期間データを処理できる「期間」コマンドの使い方を紹介していこう。

期間データを処理する「期間」コマンド

今度は、先ほどのデータ表に「利用時間」の列を追加した例を使って解説を進めていこう。この列は [退室時刻]-[入室時刻] により計算されている。また、データ型には「期間」が指定されている。

  • 「利用時間」を計算したデータ表

「利用時間」は料金の計算などに使えるデータとなるが、データ型が「期間」のままでは扱いにくい。そこで「期間」コマンドを使ってデータを「数値」に変換してみよう。

  • 「期間」コマンドに用意されている処理

まずは、「期間」→「時間」を選択した場合の例を紹介する。

  • 期間データから「時間」を取得する処理

この結果は以下の図のようになる。この図を見ると、「利用時間」から「時間」の数値だけが抜き出されていることを確認できるだろう。たとえば、1行目の場合、「0.03:54:00」のうち「時間」の部分に相当する「3」の数値だけが抜き出されている。2行目以降も同様だ。

  • 数値として取得された「時間」

このため、「日」や「分」、「秒」の情報が抜け落ちたデータになってしまう。先ほど紹介した「日付」コマンドや「時刻」コマンドと同じ考え方になるが、このままでは料金の計算には使えない。

期間データから特定の値(日、時、分、秒)だけを抜き出すのではなく、数値に変換して利用したい場合は、「合計△△数」の項目を選択してあげる必要がある。続いては、「期間」→「合計時間数」を選択した場合の例を紹介しておこう。

  • 「合計時間数」を取得する処理

この結果は以下の図のようになり、期間データ(日.分:時:秒)を時間単位に換算した数値を得ることが可能となる。

  • 数値として取得された「合計時間数」

たとえば、1行目は「0日と3時間54分00秒」が時間単位に換算されて「3.9」という数値になっている。同様に、2行目は「0日と2時間53分00秒」が時間単位に換算されて「2.83333……」という数値になっている。

あとは、これらの数値に「1時間あたりの料金」を掛け算するだけ。これで利用料金を求めることが可能となる。

なお、実際の料金計算では「30分毎に200円」のように、ある一定の期間で区切って料金を算出するケースもあるだろう。このような場合は、「期間」→「合計分数」を使用するのも効果的だ。

  • 「合計分数」を取得する処理

すると、期間データを分単位に換算した数値を得ることができる。たとえば、1行目は「0日と3時間54分00秒」を分単位に換算した「234」という数値になる(3×60+54)。同様に、2行目は「0日と2時間53分00秒」を分単位に換算した「173」という数値になる(2×60+53)。

  • 数値として取得された「合計分数」

利用料金を30分単位で計算する場合は、この「合計分数」を30で割り算し、その結果を切り上げて整数にしてあげればよい。さらに「30分あたりの料金」を掛け算すると、利用料金を求めることができる。

このように「期間」コマンドを使うと、「日.時:分:秒」という形式のデータを「好きな単位の数値」に換算することが可能となる。

ここでのポイントは、「時間」と「合計時間数」、「分」と「合計分数」など、それぞれの処理内容の違いを十分に理解しておくこと。これが理解できていれば、期間データを「数値」として扱えるようになる。通常のExcelにはない、パワークエリならではの機能であり、また利点ともいえるので、この機会によく学んでおくとよいだろう。