適材適所

PowerShellやVBAなどのプログラミングに関すること、キャリア、子育ての3本で書いていきます

【Excel Power Query入門】他のブックからデータを取得する

前回の記事

Power Queryで他のブックからデータを取得する

とにかく御託はいいから、どうやってデータを取得するんだよ!!

そう思ったあなた、焦らないで。

私もあなたと同じで初めてだからわからないの・・・。

そう、私もPower Query どーてーだから全くわかりません。

困ったときのバイブル、マイクロソフトの公式サイトに限ります。

ありました、ありました。

他のブックからデータを取得する手順はこちらにありました。

例では、Power BI(MicrosoftのBIツール)ですが、Excelでも考え方は同じだと思われます。

よくわからないですが、実際に手を動かしてやってみましょう!

データソースに接続する

データソースとして、単純なこんなExcelファイルを用意しました。

test.xlsx Sheet1

f:id:shinmai_papa:20200914091540p:plain

このExcelファイルからPower Queryを使ってデータを取得してみます。

このExcelファイルとは別に新規のブックでPower Queryを使います。

新規のブックを開き、データタブ→データの取得→ファイルから→ブックから と選択します。

f:id:shinmai_papa:20200914092025p:plain

ファイルの選択ダイアログで先ほどのtest.xlsxを選択してみると・・

f:id:shinmai_papa:20200914092050p:plain

ナビゲーターが出てきて、シートの一覧、データのプレビューが表示されました。

ナビゲーターの編集ボタンをクリックすると、Power Query エディターが立ち上がります。

ここでデータを加工するわけですね。

特に加工が不要の場合は、「閉じて読み込む」をクリックすればデータが読み込まれます。

f:id:shinmai_papa:20200914092118p:plain

Power Queryという名前が表すように、この機能のキモはクエリなようです。

Power Queyはクエリを効率的に作る機能といっても間違いではなさそう・・・な気がします。

エディターの左ペインにクエリ一覧があります。

今は、デフォルトで作成されたSheet1というクエリだけが存在している状態です。

これがあなたと私が初めて作った記念すべきクエリということになります。

だから何だよ・・・って感じですね。

真ん中のペインには、選択されたクエリのデータプレビューが表示されています。

ここで自分が目的とするデータを抽出できるようにクエリを作成し、

プレビューで実際に抽出されるデータを確認しながらクエリをブラッシュアップしていく・・・そんな流れでしょうか。

右側ペインは・・・この時点ではよくわかりません。

データを読み込む

作成したクエリをシートに読み込んでみましょう。

といっても何も加工していませんが。

ファイルタブの「閉じて読み込む」をクリックすると、

対象のファイルのデータがテーブルとして読み込まれました。

f:id:shinmai_papa:20200914092152p:plain

テーブルをアクティブにした状態でブックの上部、タブを見ると、クエリ実行前には存在しなかった「クエリ」タブが現れました。

f:id:shinmai_papa:20200914092218p:plain

クエリタブの編集をクリックすると、先ほどのPower Query エディターが表示されました。

編集のほかにもおもしろそうな項目がありますね。

試しに接続ファイルのエクスポートをクリックしてみると、デフォルトで「クエリ - Sheet1.odc」というファイル名で何かが保存されました。

何かよくわからないですが、保存されたファイルをメモ帳で見てみると、

f:id:shinmai_papa:20200914092238p:plain

中身はxmlファイルでした。

SQLコマンドや、javascriptが書いてあるのが確認できます。

どうやら、このファイルをいじることでも自分の思い通りのクエリが作れそうです。

でもなんだか長くなりそうなので今回はこのファイルの中身には踏み込みません。

というか私も全くの初学者なのでこの記事執筆時点では中身についてはわかっていません。

ちゃんと理解して、このシリーズの後半では、かみ砕いて説明できるように頑張ります。

とりあえず他のブックからデータを読み込むという当初の目的は完了しました。

なんと簡単!

これでPower Query童貞は無事に卒業できました。

せっかくですから、Power Queryともっと戯れてみたいと思います。

年齢列を追加するクエリを作ってみる

単純に他のブックからデータを読み込むのはとても簡単であることがわかりました。

では、今度は生のデータを読み込むだけではなく、少しデータを加工してみたいと思います。

生年月日の項目があるので、ここでは生年月日と今日の日付から年齢を追加してみたいと思います。

いきなり年齢列を追加するのはなんとなくハードルが高そうなので、1歩ずつ進めてみます。

まずは生年月日から年を抽出して新しい列として追加しみようと思います。

列を追加する方法

クエリタブ→編集をクリックしてPower Queryエディターを開きます。

新規で列を追加する場合は、Power Queryエディターの「列の追加」をクリックします。

すると、全般、テキストから、数値から、日付と時刻から の4つの選択肢があることがわかります。

f:id:shinmai_papa:20200914092314p:plain

今回は生年月日から「年」だけを抽出したいので、生年月日を選択した状態で「日付と時刻から」→「日付」と選択します。

f:id:shinmai_papa:20200914092333p:plain

すると、ありました、年。

これで日付から年だけが抽出できそうです。

年をクリックすると・・・

f:id:shinmai_papa:20200914092356p:plain

生年月日から年だけが抽出され、新たな列として作成されました!!

なんと簡単!!画期的!!

今までは、わざわざワークシート関数で追加したりしていたのに、Power Queryを使えばそんなものは必要なくなりそうですね。

そして、ここで地味に右ペインにも注目。

「適用したステップ」というところに「×挿入された年」という項目が追加されています。

この欄には、これまで操作した内容が一覧で表示されています。

どのような操作をしたか、一目で確認することができます。

また、変更を取り消したいときは、「×挿入された年」の×をクリックすると、操作が取り消されます。

これまた画期的!!簡単!!

今日の日付列を追加してみる

さきほどの要領で今日の日付を追加してみたいと思います。

今日の日付はどのように求めるのか調べてみると、日付関数のページがありました。

このページの関数をこねくりまわせば今日の日付を取得できそうです。

カスタム列の式に下記のように書いてみます。

DateTime.Date(DateTime.LocalNow())

f:id:shinmai_papa:20200914091516p:plain

そうすると・・・

f:id:shinmai_papa:20200914091520p:plain

今日の日付が取得できました!!

Excel関数のように1つの関数では求まりませんでした。

他にいい方法があれば知りたいところです。

後でもっと調べてみることにします。

今のところはこれで良しとしましょう。

年齢を求める

今日の日付が求まったので、あと少しで年齢が求まりまそうです。

今日の日付と生年月日を使って、年齢は次の式で求めることができます。

((今日の日付-生年月日)/365)から小数の切り下げ

さて、日付の差はどうやって求めるのでしょうか・・・

色々探してみた結果、こちらの機能を使えばよさそう。

小数の切り下げについては、こちらの機能でイケそうです。

また、関数をこねくり回してみます。

f:id:shinmai_papa:20200914091530p:plain

Number.RoundDown(Duration.Days(DateTime.Date(DateTime.LocalNow())-[生年月日])/365)

これでイケました。

サクッと書いていますが、結構時間かかりました・・・。

f:id:shinmai_papa:20200914091525p:plain

どハマりポイント 大文字・小文字を区別する

Power Queryの式は大文字・小文字を区別するようで、

Windowsの大文字・小文字の区別がない感覚で書くと、エラーが続出します。

f:id:shinmai_papa:20200914091533p:plain

マイクロソフトにしては、わかりやすいエラー内容ですね。

あと、どういう条件で出るのかまだわかっていませんが、

f:id:shinmai_papa:20200914091536p:plain

このエラーが続出しました。

エディターの挙動が不安定なんでしょうか。それとも私の扱いが雑なんでしょうか。

すいません。さっきまでどーてーだったので、扱いがまだわからなくて・・・。

本当のところはどうなんでしょうか。

これから解明していきたいと思います。

まだまだ関数のところは未知数

手探りでなんとか生年月日から今日時点の年齢を求め、新しい列として追加することができました。

まだまだ式の部分や、エラーの部分など、謎は多いですね。

しかし、式について見ると、たくさんの関数が用意されているので様々なことができそうですね。

次は、もう少し、この式について勉強してみたいと思います。多分。

列の削除

年の列を追加してみましたが、邪魔ですね。

ということでこの列を削除してみましょう。

列を削除するときは、Power Queryエディターで該当の列をアクティブにした状態で「ホーム」→「列の削除」をクリックします。

f:id:shinmai_papa:20200914091547p:plain

f:id:shinmai_papa:20200914091543p:plain

年の列が削除されて、右ペインの「適用したステップ」に「削除された列」というステップが追加されました。

簡単!!

終わりに

Power QueryでExcelの可能性がさらに広がりそうな予感。

次は、表の結合の方法について紹介しますので、お楽しみ(?)に。

ここまでお読みいただきありがとうございました。