Excelには「データ型」を指定する機能が特に用意されていないため、各データが「文字列」なのか、それとも「数値」なのかを曖昧にしたまま使用することも不可能ではなかった。一方、「Power Query エディター」は、各列のデータ型を明確に指定できるようになっている。今回は「データ型」と「エラー」について解説していこう。
データ型の自動指定について
Excelにもデータ型の概念はあるが、かなり曖昧に扱われているケースが多いといえる。たとえば、セルの表示形式に「文字列」を指定していても、そこに入力されているデータを数値とみなすことができれば、計算を実行することが可能となっている。
一方、パワークエリのデータ型は厳密で、データ型が「文字列」(テキスト)の場合は計算不可、という仕様になっている。このため、各列に「どのデータ型が指定されているか?」を確認し、必要に応じて修正しておく必要がある。
ということで、今回は「データ型」の指定と、データ型に違反しているため「エラー」になってしまったデータの活用方法を紹介していこう。
まずは、自動指定されるデータ型について紹介する。「Power Query エディター」にデータを取得すると、各列のデータ型が自動判別される仕組みになっている。この工程は「変更された型」という名前でステップに記録されている。
前回の連載で紹介した「1行目をヘッダーとして使用」の処理を指定したときも同様だ。この場合も、各列のデータ型を自動判別する工程が「変更された型1」という名前でステップに追加される。
ちなみに、ステップ名の最後にある「1」は、同じ名前のステップを区別するために付加される文字となる。名前が同じステップが登場する毎に、ステップ名の末尾に1、2、3、……の数字が付加されていく仕組みになっている。
続いては、各列に指定されているデータ型を確認する方法を紹介していこう。各列のデータ型は、「列名の左に表示されているアイコン」を見ると確認できる。
「123」のアイコンが表示されている列は「整数」、「ABC」のアイコンが表示されている列は「テキスト」(文字列)、としてデータ型が指定されている。そのほか、「日付」などのデータ型も用意されているが、これについては後ほど詳しく紹介していこう。
データ型を自分で指定する方法
先ほど示した例では、各列の「データ型」が適切に自動判別されていた。しかし、状況によっては、不適切なデータ型が指定されているケースもある。今度は、以下の図に示したExcelファイルを例に解説を進めていこう。
このExcelファイルからデータを取得すると、「Power Query エディター」に以下の図のようなデータ表が表示される。「日付」のデータが「X月X日」ではなく、シリアル値で表示されていることを確認できるだろう。
これは「日付」の列が「整数」のデータ型として自動判別されていることが原因だ。これを日付として表示するには、自分でデータ型を指定しなおす必要がある。
各列のデータ型を変更するときは、「列名の左にあるアイコン」をクリックし、一覧から「最適なデータ型」を選択すればよい。今回の例では「日付」を選択する。
続いて、以下の図のような画面が表示される場合もある。この画面は、直前のステップが「変更された型」であったときのみ表示されるもので、今回の工程(データ型の変更)を「どのようにステップとして記録するか?」を指定する画面となる。
「現在のものを置換」ボタンをクリックした場合は、直前のステップ(データ型を自動判別する工程)の処理内容が修正される。このため、新しいステップは追加されない。一方、「新規手順の追加」ボタンをクリックした場合は、今回の工程が“新しいステップ”として追加される仕組みになっている。
話を「データ型の変更」に戻そう。以下の図は「新規手順の追加」ボタンをクリックした場合の例だ。「変更された型1」というステップが新たに追加され、「日付」のデータが「年/月/日」の表示に変化しているのを確認できるだろう。
このように、自動判別されたデータ型が適切でなかった場合は、自分でデータ型を指定しなおす作業が必要となる。
データ型の種類
続いては、「Power Query エディター」で指定できる“データ型の種類”について紹介していこう。各列には、以下の12種類のデータ型を指定することが可能となっている。
特に注意が必要なのは「通貨」のデータ型だ。このデータ型は、数値の前に「\」や「$」の記号を付けるものではない。また「期間」というデータ型も、Excelユーザーには馴染みのないデータ型といえる。
以下に、各データ型の概要を簡単に紹介しておくので、これを参考に適切なデータ型を指定するとよい。
◆10進数
「小数点以下を含む数値データ」を扱うときは、このデータ型を指定するのが基本。このデータ型を指定すると、浮動小数点の形式で数値データが記録される。
◆通貨
数値データを「常に小数点以下4桁」に固定して記録する。「\」や「$」などの通貨記号を付ける機能ではない。なお、プレビューに表示される数値は少数点以下2桁まで、となる。各データをクリックして選択すると、実際に記録されている数値(小数点以下4桁)を確認できる。
◆整数
数値データが「整数」に限定される列に指定する。取得したデータに小数点以下が含まれていた場合は、小数点以下を四捨五入した整数としてデータが記録される。
データ型に「整数」を指定すると、記録される数値データそのものが「整数」に変更される。Excelの表示形式のように、数値の見た目だけを整数にするものではない。このため、データ型に「整数」に変更すると、以降は“整数の数値データ”として処理が進められていく。他の処理を追加した後に、データ型を「10進数」に戻しても小数点以下の数値は再現されないことに注意しておく必要がある。
◆パーセンテージ
基本的には「10進数」と同じデータ型になる。このデータ型を指定すると、1/100を1%として表示するようになる。
◆日付/時刻
日付と時刻の両方が記録される。「2024/04/15 15:30:00」といった形式でデータが表示される。
◆日付
日時データ(シリアル値)のうち、日付の部分だけが記録され、時刻の部分は削除される。「2024/04/15」といった形式でデータが表示される。
◆時刻
日時データ(シリアル値)のうち、時刻の部分だけが記録され、日付の部分は削除される。「15:30:00」といった形式でデータが表示される。
◆日付/時刻/タイムゾーン
UTC(協定世界時)を基準に「2024/04/15 15:30:00 +09:00」といった形式でデータが表示される。
◆期間
日付や時刻ではなく、「X日間」や「H時間MM分SS秒」のように「期間」を示す列に指定する。「日数.時:分:秒」といった形式でデータが表示される。
◆テキスト
「文字列」を扱う列に指定する。このデータ型を指定すると、数値も文字列として扱われるようになり、計算を実行できなくなる。
◆True/False
TRUEまたはFALSE(ブール値)を記録する列に指定する。
◆バイナリ
バイナリ形式のデータを扱う列に指定する。
データ型に違反するエラーについて
同じ列に「数値」と「文字列」の両方が記録されている場合もあるだろう。このようなデータ表を「Power Query エディター」に取得すると、その列のデータ型は「指定なし」に自動判別される。この場合、データ型を示すアイコンは「ABC」と「123」の両方が記された表示になる。
上図は、これまでに何回も紹介している「4月の売上」の日別データを結合して取得した例だ。ただし、各日の売上を合計した「合計の行」まで取得されるため、「数量」の列は「数値」と「文字列」が混在する形になっている。
もちろん、このような場合であっても、各列のデータ型を自由に変更することが可能だ。ここでは「数量」の列に「整数」のデータ型を指定した例を紹介しておこう。
この場合、「合計」の文字はデータ型に違反するデータになるため、Error(エラー)として扱われる。エラーといっても、それほど深刻なものではない。この状態のまま以降の処理手順を指定したり、Excelに出力したりすることも可能だ。
試しに、この状態のままExcelに出力してみると、Errorの部分を「空白セル」に置き換えたデータ表(テーブル)が出力されることを確認できる。
エラーを活用した行の削除
エラーと聞くと、何となくマイナスのイメージを持ってしまうが、必ずしもそうとは限らない。わざとエラーを発生させて、それを上手に活用する方法もある。今度はフィルターを使わずに「合計の行」を削除するテクニックを紹介しておこう。
先ほど紹介したように、「数量」の列に「整数」のデータ型を指定して「合計」の文字を「Error」に置き換える。その後、「数量」の列を選択する。
この状態で「行の削除」→「エラーの削除」を選択すると、「数量がErrorになっている行」だけを削除できる。結果として「合計の行」を削除できたことになる。
このように、わざとエラーを発生させて「エラーを基準に行を削除する」というテクニックもある。
上記の例は、削除したい行に記録されている文字列が「合計」の1種類しかないため、フィルターで行を削除しても構わない。しかし、状況によっては「さまざまな文字列が記録されている……」というケースもあるだろう。この場合、それぞれの文字列についてチェックを外していく必要があり、少しだけ面倒な作業を強いられてしまう。
このような場合に、すべての文字列を「Error」に変換しておくと、「エラーの削除」で行を削除できるようになる。
「データ型」の指定に慣れていないと少し難しく感じるかもしれないが、パワークエリを使用するにあたって「データ型」は避けて通れない問題といえる。この機会にいちど勉強しておく必要があるだろう。よく分からない方は、「10進数」、「整数」、「テキスト」の違いを理解しておくだけでも、たいていの状況に対応できるはずだ。