ラベル テーブル の投稿を表示しています。 すべての投稿を表示
ラベル テーブル の投稿を表示しています。 すべての投稿を表示

2021/07/18

[Excel] よく使うエクセルのショートカットキー

Excelあるあるで、ショートカットキーの一覧がほしい、というリクエストは多いのですが、正直一覧を手に入れて使えるようになりました!という人はあまり見たことありません(苦笑)

Ctrl+C, Ctrl+V のコピー & ペーストのショートカットキーはExcel以外の場面でも使う鉄板としても、自分が今でも Excel を使っている時に多用するショートカットキーはいくつかあります。ただ、基本的にショートカットキーはその人のExcelの使い方に依存するので「自分の仕事で繰り返し使う機能はどれか?」を把握することが大事です。そこから仕事を楽にするためにショートカットキーを確認して、なんども使う練習をして覚える人が多いと思います。

自分がよく使うショートカットキー(順不同)

Ctrl+↓、Ctrl+↑

マウスをガシガシ、マウスホイールをグリグリし続けなくても、データの一番上、一番下に移動することができます。正確にはデータの「かたまり」の一番上、一番下になるので、途中に空白のセルがあればそこでとまります。Shiftと組み合わせての範囲指定もよく使います。

Ctrl+T

モダン Excelのベースである「テーブル」作成のためのショートカットキー。テーブルについては過去の投稿でいくつも取り上げていますのでそちらも参照ください。

テーブルのすすめシリーズ

http://road2cloudoffice.blogspot.jp/2014/10/vlookup.html
http://road2cloudoffice.blogspot.jp/2014/10/blog-post.html
http://road2cloudoffice.blogspot.jp/2014/10/blog-post_31.html
http://road2cloudoffice.blogspot.jp/2014/11/blog-post.html
http://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html
http://road2cloudoffice.blogspot.jp/2014/11/office-365-sharepoint.html

Ctrl+チルダ(~) (Ctrl+Shift+[へ])

このショートカットキーは、使っている人を見たり、話題にしたりする人をあまり見たことがないのですが、自分はほんとうに良く使います。それはワークシートの再利用をしているせいなのかもしれません。セルに数字をいれたら、前の設定があって「%」表示になっちゃった、という時に標準書式形式に戻すために使います。数字入れたら、「1900/1/2」などの日付になった場合も標準書式に戻すのに有効です。 

Ctrl+1

セルの書式設定のダイアログを表示するためのショートカットキーです。セルの書式設定はダイレクトに指定する方法がいくつかあって、たとえば数字の3桁カンマ表示なら Ctrl+Shift+1 ですが(そしてたまに間違える)、書式設定はさまざまな設定ができるので、Ctrl+1 でダイアログを表示してそこから選ぶ、という使い方をしています。

Ctrl+; と Ctrl+: の組み合わせ

現時点の日時を入力するために使います。Ctrl+; で日付を入力し、同じセル内で半角スペースを入力してすぐに Ctrl+: を使って時刻を入力します。自動的に yyyy/m/d h:mm の書式になります。

Ctrl+D

下方向にコピーです。使わない日はない、というほど使います。Ctrl+C, Ctrl+V より使うかもしれません。テーブル形式のデータを扱っていると、Ctrl+R(右方向にコピー)を使うことはないはずです。

これもよく「上のセルの値をコピーする」と紹介されていることがありますが、それよりも「同じ値を複数行に下方向にコピーする」という使い方です。

Ctrl+Shift+L

昔からあるフィルターのオン・オフのショートカットキーですが、モダン Excel で表形式のデータでもよく使うようになりました。モダン Excelではデータは「テーブル」になっているので、基本的にはフィルター機能はオンになっている状態です。Ctrl+Shift+Lを使う場面は、テーブルのフィルターを使って複数の列で絞り込みを指定しているものすべてを解除したい時に、Ctrl+Shift+Lをつかって全フィルターを解除して、再度ショートカットキーでフィルターをオンにする、という使い方が多く、テーブルの絞り込み条件解除に使います。フィルター機能のオン、オフだけのために使うことはないです。

Ctrl+H(またはCtrl+F)

モダン Excel ではテーブルのフィルターを使った検索が主流になるとはいえ、やはり「検索と置換」ダイアログはよく使います。

Ctrl+Alt+F5

ExcelでPower Queryを使っている人であればよく使うであろうショートカットキーだと思います。[データ]タブの[クエリと接続]の[すべて更新]に相当します。

Ctrl+S

たぶん、一番最初に全員が覚えるべきショートカットのひとつ。上書き保存です。

以上、自分がよく使うショートカットキーでした。

2021/06/25

[Excel BI] ピボットテーブルで全体に対する%を計算する

ピボットテーブルを使いこなせたら、ものすごい時間短縮になり、仕事の結果も出る!と考えている人は多いと思います。ピボットテーブルが使えない原因のほとんどは「元データ」にあって、それで行き詰まる人が多い、というのはよく聞く話なんですが、逆に、もし元データに問題がなかったらすべてうまくいくのか?というと、実はそうでもありません。

やり方さえ知っていれば超時間短縮になるのに、といつも思うのがピボットテーブルの「全体に対する(占める)割合(%)の計算方法」です。ピボットテーブル作成までできているので、本当に「あとちょっと」なんです。

以下のようにピボットテーブルの外で計算しているワークシートを見ました。数式の =E2/$E$6 が総計に対する割合を計算しています。$は相対・絶対参照云々、、、ということを言いたいわけではないんです。


Excelの素晴らしいところは創意工夫と時間をかければ何とかなるところです。しかし、そのため知っていれば楽になる本来の使い方を知らないまま、無駄に時間をかけてしまうこともしばしばあります。(余談ですが、同じ結果が出る違うやり方があったり、追加された新機能で今まで苦労してたことが楽になった、など、経験者でもそれ知らなかった、なんてことはザラなので、知らないことを卑下することはありません!)

上記のやり方でレポート終了、今後そのワークシートを再利用しないのであれば、これでも全然問題ないのですが、例えば、製品Eが追加された、Bが無くなった、などのデータの追加・更新がはいった時は行数が変わるので計算式を調整する必要があります。1つや2つなら目で確認できますが、1000個ある内の20個くらいが入れ替わる、という状況では目で追うこともできません。それを関数やマクロでチェックする、、、なんていう斜め上の方向に行く前にピボットテーブルの機能を見直してください。めんどくさいなぁ、と思うことはだいたい実現されています。

ピボットテーブルで列に対する割合を計算する

上の図のように総計 30 を 100% として、各項目 A, B, C, D の占める割合 % を出したいパターンは使うケースがかなり多いと思います。とても簡単なので是非覚えてください。

ポイントはセルの書式設定と一緒で「データの見せ方を変えてあげる」なんです。

通常のデータと、割合のデータの2つが必要なので、以下のように個数の列を2つ作ります。


個数のフィールドを同じように値のボックスに何個でもドロップすることで同じ列を作成できます。次にこのように作った「合計/個数2」の列を%の見せ方に変えます。その列にあるセルの上で右クリックをして、右クリックメニュー(コンテキストメニュー)を表示します。


上のメニューの下から4番目にある「計算の種類」を選択します。


ここで「うぁ、、何選べかいいかわからない」となりそうですが、列に対する比率を計算するので、「列集計に対する比率」か「親列集計に対する比率」のいずれかです。とりあえず、「行集計に対する比率」を選んでください。


あとは、セルの書式設定で小数点以下の桁数を調整してもよし、値フィールドの設定から表示形式を調整し小数点以下の桁数を1などにすれば以下のようになります。


いろいろな計算オプションがあるのは、いろいろなケースに対応するためです。たとえば、以下のようなピボットテーブルの場合はどうでしょう。


単純に総計の 30 に対して占める割合であれば、先ほどの「列集計に対する比率」でOKです。でも、だいたいビジネスの世界では以下のように「キッチン用品」とか「庭用品」で小計をしたりします。同じように事業部毎だったり、リージョン・地域ごとだったりします。
(せっかくなので、その小計の出し方を含めてアニメーションGIFにします)



別の計算の種類を選ぶことで、カテゴリ(キッチン用品、庭用品)を100%にして各項目の割合を出すこともできます。いろいろ試してみてください。

忙しいビジネスパーソンこそピボットテーブルを習得すべき

ビジネスパーソンのための、、、というお題で極論すれば、Excelは関数、ましてやマクロやVBAを覚える前に、ピボットテーブルだけを覚えれば、大体の計算はできます。なぜならビジネスの基本のデータは「表」形式であり、表をベースにした計算が求められるからです。

Excelの機能としての「テーブル」、それらを成形・集計するピボットテーブル、さらにクラウドやサーバーからデータを取りこむExcelの「取得と変換」、グラフはExcelの機能としてはかなり複雑で難しいのですが、それでも最新機能で必要なところだけ押さえることでかなりのことができると思います。

あまた機能を内蔵しているExcelはその学習コストがあまりに高い、大きいです。よりに自分に必要な機能を厳選して、それらの機能習得に時間やお金をかけることが望まれます。

何らかの参考になれば幸いです。

過去の投稿ですが、知識としてはまだ使えますのでお時間があればどうぞ参照ください。

[Excel BI]ピボットテーブルで予算と実績を管理する
https://road2cloudoffice.blogspot.com/2019/09/excel-bi.html

[Excel] テーブルのすすめ ピボットテーブルとリレーションシップ

[Excel] テーブルのすすめ 集計行
https://road2cloudoffice.blogspot.com/2014/10/blog-post_31.html

2017/06/23

[Excel] Microsoft Flow で Excel を使う

Modern Excel

Power BI系のツールを調べていると Modern Excel (モダンエクセル)という言葉を見ることがあります。
これは Power Query や Power Pivot といった、Power なんとか系ツールを使ってお仕事を効率的にするための新しい Excel の使い方をさす「造語」です。

WHAT IS MODERN EXCEL? - ExcelTV(英語)
https://excel.tv/what-is-modern-excel/

Excel は製品の歴史が古いにもかかわらず、今でも多くのユーザーに使われ、それも業務の第一線で利用されている珍しいソフトウェアです。そのため、現場にこれまで蓄積されたテクニックや技術が数多くあり、鉄板ネタ、その世界では常識、といった手法や使い方が存在します。その反面、レガシーな方法でも多くのことができてしまうため、新しいツールや機能を積極的に取り込む「心の」ハードルが高くなっている、という状況も散見されます。

現在、モダン Excel の世界で Power Query や Power Pivot の緩やかな Excel 本体との統合が進んでいます。最新アップデートの Excel ではデータ タブの [データの取得と変換] は Power Query です。Power Pivot アドインを有効にしていなくてもデータ モデルやリレーションシップ、メジャーを Excel で使うことが可能です。

[Excel] データの取得と変換が標準になりました
https://road2cloudoffice.blogspot.jp/2017/06/excel.html

リレーションシップとデータ モデル
https://road2cloudoffice.blogspot.jp/2015/02/blog-post.html

[Excel BI] ピボット テーブルとメジャー
https://road2cloudoffice.blogspot.jp/2017/05/excel-bi.html

さらに、これから Excel との連携が進んでいくのは Power BI だけにとどまらず、 PowerApps と Microsoft Flow といったツールであるのは、ほぼ間違いないでしょう。OneDrive などのクラウド ストレージに保存されている Excel ブックをデータ ソースとして、PowerApps や Microsoft Flow で利用するパターンです。何やら難しい仕組みのようにも見えますが、これらのツールはタブレットやスマホなどの利用を前提とし、かつアプリ開発や設定もノンプログラミングでできることを目的にしているようです。

Microsoft Flow と Excel 

将来重要性が増すだろうツールの1つである Microsoft Flow (マイクロソフト フロー) という単語を見ると、なにかワークフローを扱って、難しそう、というイメージがあるかもしれません。

Microsoft Flow
https://flow.microsoft.com/ja-jp/


自動化するワークフロー、ビジネス プロセスの自動化、などを見ると難しそうですが、Excel ユーザーの観点から以下のようなことが Flow でできます。

  • Excel を開かずにワークシートのテーブルにデータを自動追加できる
Excel ブックのデータを読み込む、取り込む、といったことは Power Query で可能でした。Power BI系ツールでは難しく、VBA を使わなければならないのはブックへのデータの「保存」や「書き込み」の処理系でした。このエリアが Flow や PowerApps によって可能になりつつあります。

ただし、対象となる Excel ブックは OneDrive や SharePoint Online のフォルダーの中に作成することが必須です。クラウドが利用可能であれば、欲しいデータを欲しい形で「Excel のワークシート(のテーブル)」で扱うことができるので、いろいろとアイディアが膨らみますよね。Excel ブックとして扱うことはもちろん、レポートや分析は Power BI の得意の分野ですから、Excel ブックをデータ ソースとして利用することができます。

どのくらい Flow による Excel ブックへのデータの追加・保存が簡単なのか、順を追って見ていきましょう。

Flow で Excel を使うポイントは「テーブル」

Flow の設定は Web 上で行います。そのため、Microsoft Flow の Web サイトに「サインイン」する必要があります。Office 365 の組織アカウントか、Microsoft アカウントの利用が可能です。Power BI と違って、hotmail などのフリーのメールアドレスの Microsoft アカウントの利用が可能ですが、作成したフローを他の人と共有できません。他のユーザーとなんらかのコラボレーションをする場合は、Office 365 の組織アカウントをベースにする方向性なのでしょう。一人で試すだけであれば、いくつかの制限がありますが Microsoft アカウントでも利用可能です。
他のユーザーとフローを共有しようとすると表示されるアラート

Flow のサイトでは数多くのテンプレート(フローのサンプル)が用意されています。もちろんゼロから作ることも可能ですが、テンプレートを利用することで開発・設定の時間を大幅に削減することが可能です。

Excel ブックを保存先として使う場合のポイントは2つあります。
  • 事前に使用するブックを用意し、ワークシートに「テーブル」を作っておく
  • Excel Online でも、Flow のテスト時にはブックを必ず閉じる(ロックを避ける)
テーブルの列名はどんな名前でもいいです。フローの設定で、用意した列と保存するデータの突合せを行うことができるからです。とはいえ、どんなデータがフローのテンプレートで用意されているかを確認し、必要な列を準備することを考えれば、事前にテンプレートでデータの名前を確認して、それとわかる列名でテーブルを作成することになります。

なお、Excel の「テーブル」をあまり使ったことがない人も結構いるようです。モダン Excel では基本、テーブルの使用が前提となっていると考えて差し支えないでしょう。行・列からなるセル範囲とは全く別の新機能を提供してくれます。テーブルについては当ブログでも過去に紹介しているのでぜひ参照してください。

自動的に Excel にデータを書き込む

Office 365 のユーザーは Office 365 の組織アカウントを使って Flow を使うのが良いでしょう。他のユーザーとのフローの共有はもちろんですが、サンプルとして使う「一定間隔で何かする」という繰り返しの設定の上限がマイクロソフト アカウントを使った場合(無料プラン)と変わります。さらに Flow の Premium ラインセンスを購入することで利用できる機能が変わります。上限を超えた設定をするとアラートメッセージなどでも表示されますが、プランの種類と制限の確認は以下を参照すると良いでしょう。

マイクロソフト フロー プラン
https://flow.microsoft.com/ja-jp/pricing/

シンプルな Flow と Excel の連携のサンプルを紹介します。とてもシンプルですが、これを Excel のみで実現するには、、、と考えながら見ると面白いでしょう。
アカウントはあえて Microsoft アカウントの無料プランと OneDrive を使ってみますが、Office 365 組織アカウントを持っているならば組織アカウントで試すのがいいと思います。サンプルの処理は「15分おきに、特定の文字列と現在の時間を Excel のテーブルに追記する(=最後の行に追加していく)」です。よって、前提として

・マイクロソフト アカウント取得済み
・マイクロソフト アカウントで OneDrive が使える
・できれば Excel が PC にインストールされている(Excel Online のみで操作可能ですが、あったほうが吉)

です。
大まかな流れは、

・Microsoft Flow で新しくフローを登録する
・OneDrive で Excel ブックを新規作成し、データ保存のためのテーブルを準備する
・フローの Excel 操作のアクションで準備したテーブルを指定する
・フローを動かす
・Excel のテーブルにデータが追加されているのを確認する

です。

1) Microsoft Flow にサインイン


Office 365 の組織アカウントを使うのであれば、ポータルのランチャーから [Flow] を選びます。直接 Flow のページへは、https://flow.microsoft.com/ja-jp/ でいきます。

Microsoft Flow サービスのページからサインインします。サインイン後にトップバー(タブ)の [マイ フロー] をクリックして、マイ フローに移動します。


2) [+ 一から作成] をクリックして、フローを新規作成、名前を付ける


フロー名 無題 の無題の部分にフロー名を入力します。[コネクタ] から [スケジュール] をクリックしてフローに追加します。このスケジュールは、設定する間隔で「動き出す」部品です。フローの開発はこのように「部品」を選択して、組み合わせていきます。

3) スケジュール 繰り返しの設定


繰り返しのスケジュールトリガーはプランの最小値の 15 分にしておきます。
Microsoft アカウントを使った無料プランでは、この間隔の最小設定は 15 分です。Office 365/Dynamics365 のプラン は 5 分(ただし、5分未満もお試し版で試すことができます)、Flow プラン1 は 3分、プラン2は 1分(最小設定)です。


次に、Excel へデータを追加するアクションを追加します。上図のように [+ 新しいステップ] から [アクションの追加] をクリックします。

4) Excel 操作アクションの追加と設定

結論から言えば、ここではアクションのみ追加します。OneDrive の Excel ブックとテーブルの事前準備ができていないためです。
[コネクタ] の下にある [アクション] から [Excel 行の挿入] を選択します。


このアクションを選択したのち、OneDrive の Excel ブックを指定することになるので、ここで、OneDrive に Excel ブックを作成します。

今回の Excel への行の追加のサンプルの「フォーマット」は自由ですが、アクションによっては追加できるデータの種類と数が決まっています。事前にテーブルと列を用意するにも、どんなデータを取得し追加するかを調べる必要があるので、実際のところはテーブルを用意する前にここでチェックすることになります。

5) OneDrive 上に Excel ブックとテーブルを作成する

OneDrive上に Excel ブックを作成します。作成するフォルダーは自由です。デスクトップ アプリケーションの Excel でブックとテーブルを作成し、OneDrive にアップロードしたものも当然使えます。私のサンプルでは 1_WORKS という名前のフォルダーを作り、そこに ブック1.xlsx を作成しました。
OneDrive の Excel Online だけで操作する場合の注意点は、テーブル ツールが使えないことです。ちょっと「?」な仕様なのですが、Excel Online にてテーブルの作成は可能で、作成されるテーブルは日本語環境であれば「テーブル1」になります。しかし、テーブルの名前の確認や、名前の変更は Excel Online からできません。

以下のアニメーションGIFは、Excel Online だけでテーブルを作る手順です。 列名は 1, 2,3,4 で連番にしました。テーブル名の指定はできないので、この場合は「テーブル1」になります。[挿入] タブの [テーブル] で作成ができます。


なお、テーブルを作成し終えたら、Excel Online のブラウザは閉じてください。
コンシューマー OneDrive の Excel Online は、ブックを開くと「編集モード」で開いているため、ブックにロックかかり、Flow によるデータ追加が失敗するからです。(これは、業務運用上大きな考慮点になりえます)

6) アクションに Excel ブックを関連付ける

Excel ブック操作のアクションを選択すると、マイクロソフト アカウントを使用しているので OneDrive へサインインになりますが、接続先のクラウド サービスを変更することは可能です。たとえば、OneDrive for Business や SharePoint Online ドキュメント フォルダーにある Excel ブックも、適切なアクセス権が設定されているアカウントを使うことで利用可能です。

Excel 行の追加のアクションを追加して、OneDrive 上のブックを指定します。ブックを指定することで、ブックに含まれるテーブルがリスト表示されるので、それを選ぶと、テーブルに含まれる列すべてが表示され、列に追加するデータを指定することが可能になります。


7) 追加データを列に設定する(行の追加日時の設定方法)

業務利用の場合は、イベント間隔の部品 [スケジュー 繰り返し] と Excel ブックへのデータ追加の部品 [行の挿入] の間に「なんらかの処理をする部品」を配置して、その結果を Excel に取り込みますが、今回は直接 [行の挿入] で入力データを設定します。
文字列はそのまま同じ文字列挿入の繰り返しになりますが、ここに変数や関数があれば、イベント毎に処理をして Excel に書き込むことができます。
Excel ユーザーとして、だいたい一番最初にやりたくなるのは、行が追加された日時(タイムスタンプ)を入れることです。ワークシート関数に NOW() を入れたけど、ワークシート更新するたびに数値が変わる、どうすればいい?のアレです。

列1に文字列の「Excel-Flowテスト」
列2に Flow で日時を取得するワークフロー定義言語の関数 utcnow()
列3に 世界標準時刻 utc に 9 時間追加した日本標準時刻
列4に yyyy/MM/dd HH:mm:ss 表示の日付・時刻

上記データを追加するための列設定は以下です。

列1
Excel-Flowテスト

列2
"@{utcnow()}"

列3
"@{addhours(utcnow(),9)}"

列4
"@{formatDateTime(addhours(utcnow(),9),'yyyy/MM/dd HH:mm:ss')}"

特に列4の英文字の大文字・小文字に注意してください。大文字の MM は月を、小文字の mm は分を、HH は24時間表示など、それぞれ意味があります。
utcnow() や addhours()、formatDateTime() は「ワークフロー定義言語」の関数です。M言語や DAX、R言語も Power BI でやらなきゃなぁ、と思っていたところにワークフロー定義言語 (Workflow Definition Language)がやってきました!これも避けては通れない言語でしょうね。ただ、大きなトレンドは「如何にコードを書かせないか」なので、将来的に学習コストは最小限になることを期待しましょう。
また、関数の前後についているダブルコーテーションは必要です。


ワークフロー定義言語については、まずは以下を参照されるといいでしょう。

Azure Logic Apps のワークフロー定義言語
https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-workflow-definition-language

また、Microsoft Flow は Azure Logic Apps をベースに作成されています。上記のようにワークフロー定義言語などの資料は Azure Logic Apps のものが参照できたりします。
Microsoft Flow と Azure Logic Apps の関係は以下のページが参考になります。

Flow, Logic Apps, Functions, WebJobs の比較
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs

8) フローを保存し、動かす

フローの作成をクリックすると、保存され、実行されます。


エラーがなければ、完了をクリックのメッセージが表示されます。[完了]5D; の 5D; はバグですね。


完了を押さずとも、初回のフローが実行されて、その結果が再描画され表示されます。


完了をクリックすると、編集モードが終了します。
Excel ブックを確認すると、以下のようにデータが追記されていることが確認できます。


ダブルコーテーションで囲まれている文字を挿入しているので、Excel としては "2017/06/22 16:20:05" は日付データのシリアル値ではなく、文字列です。列2から列4のワークフロー定義言語の書き方の検討余地はまだあると思いますが、たとえば "@{utcnow()}" の両端のダブルコーテーションを最初からとると駄目です。少し動きが怪しいのですが、ダブルコーテーションをつけることで確実に関数として動きますが、最初から外して関数を利用しようとすると「文字列」として処理されます。ただし、一度ダブルコーテーション付きで登録し動いているフローを、あらためてフローの編集で両サイドのダブルコーテーションをはずすと、ダブルコーテーションがない日付文字列が入ります。どうやらデータ挿入のためのワークフロー定義言語関数の処理と JSON の構成方法に課題がありそうです。まずはダブルコーテーション必須で覚えておいたほうがよさそうです。

ちなみに、これでタイプミスなどでエラーになった、もしくは上述のワークフロー定義言語の書き方を変える、などフローを更新した場合、間隔の15分待つことはありません。[再送信] や [今すぐ実行] をすることで、最小設定時間以内でもフローを動かすことができます。


Excel のテーブルと Flow

Flow で Excel を使う場合は、事前にExcelのテーブルを用意しますが、Flowにおけるテーブル利用時の特徴・注意点は「セルの数式は使用できない」です。数式によって値を算出するセルをテーブルの列として使うことができません。Flow によって新しく追加した行には、テーブルで事前に定義された数式はコピーされません。A列に1、B列に2だけをいれて、C列で =A+B で 3 にするようなパターンです。コピーされないというより、数式がクリアされる感じです。

文字列や数値はそれほど扱いに困りません。何も設定していないセルの書式「標準」で事足ります。一方で、シリアル値は、上記の 8) で紹介したように utcnow() で世界標準時をとり、addhours() で9時間足せば日本の時間になりますが、 2017-06-22T09:50:51.0064743Z のような記述になり、このままセルに入力しても日付データとして Excel は認識せず、文字列として扱います。また繰り返しになりますが、ダブルコーテーション問題もあります。

なんだ、結局使えないじゃないか、と考える前に、この「Excel を起動することなく、自動的に、ブックにデータを追加する」という仕組みは、これまでプログラム開発が必要になるものでした。それ、Excel の仕事じゃないですよね?と言われる範疇のものです。これをノン・コーディングで可能にするのが Flow です。

後処理を Excel 中心にすると、どうしてもビックテーブル(ビックデータじゃありませんよ)で考えがちです。ビックテーブルとは、すべてのデータを含んだ1枚の大きな表です。その Excel のビックテーブルと、数式が使えない、ブックを開いているとロックする、といった Flow の制限を組み合わせると活用が難しく感じられますが、Power BI を使ってデータ ソースとして Excel ブックを指定すると Excel でブックを開くことなくデータを取得することができ、Power Query のデータクレンジングとデータの型変換を持つ ETL 機能を使えば、ダブルコーテーション付きのテキスト文字列を日付のシリアル値に変えることはクリック操作のみで可能です。異なるブックのテーブル間のリレーションシップによるマージも可能です。

制限や考慮点がある、情報がまだまだ少ない、といった状況ですが、モダン Excel の重要な要素の1つであることは間違いないので、引き続きウォッチしていく価値はあると思います。

まとめ

Excel と Flow の関係を紹介してきましたが、Excel を扱うアクションは行の挿入だけではなく、行の取得もあります。取得するを開始する行番号をスキップ数で指定し、そこから指示した行数分のデータを全列分取得します。Flow の内部では、取得したデータは JSON形式で保持され、次のアクションで利用されます。

どんなことが Flow と Excel の組み合わせでできるかはテンプレートを参照するのが一番です。Excel を含むテンプレートの一覧は、Flow のトップページの検索ボックス [最初に使用するテンプレートまたはサービスを探す] で Excel を入力して検索すると表示されます。


以上、長くなりましたが、参考になれば幸いです。

2016/08/09

[Power Query / 取得と変換] ブックにある複数のワークシートをまとめる 2

前の投稿で、複数のワークシートをまとめる、というお題を取り上げましたが、これ、「今、Excel で開いているブックにある、複数のワークシートにあるテーブルをまとめる」という処理でした。

Excel でデータを扱うのなら、Excel でブックを開くのが鉄則

ただ、この手の処理は、同じブックで処理するよりも、元データと、加工・処理するブックは「違う」パターンが多いです。元データのブックは、別の部門だったり担当者が準備したり、更新したりしていて、そこから加工するのは自分、みたいな感じです。

Excel の処理として、扱うことのできるブックは「Excelで開いている」ことが鉄則です。

そのため、基本的には Excel でデータを扱いたいのであれば、まずは Excel でブックを開く、という処理が「必須」でした。 Excel で一度開けば、Excel という Application を頂点とした、「ブック - シート - セル」という階層構造で処理することができるからです。

VBAでも同じです。ただし、裏技的にブックを開かずにデータを取り出すことが技術的には可能でしたが、広くお勧めできるものではありませんでした。

[VBA] ブックを開かないで読む (Office TANAKA)
http://officetanaka.net/excel/vba/tips/tips28.htm

Power Query でブックを開かずにデータを参照する

という前置きは置いておいて、Excel でブックを開かずに、別ブックから、そこに含まれている各ワークシートのテーブルを一気に取り込んでしまう処理は、アニメーションGIFで一気に紹介できるくらい「簡単」なんです。
 前回は、既に開いているブックのシートにあるテーブルから、それぞれクエリを作成しましたが、今回は、ブックをExcelで開くことなく、指定するだけで、そこにあるテーブルを「テーブル」という条件で絞り込み、リスト化して、一気に展開する、という流れです。


(1) ブックを選んで、テーブル選ばす

[新しいクエリ]  - [ファイルから] - [ブックから] で、Excel ブックを指定できます。このとき、ブックに複数のワークシートがあれば、ナビゲーターウィンドウにそれぞれが表示されます。テーブルも同様です。


通常はここでワークシートやテーブルを選ぶ、または、[複数のアイテムの選択] オプションをチェックして、複数のワークシートやテーブルを選びます。

複数のワークシートやテーブルを選んだ場合は、その数ぶんの「クエリ」を自動的に作成します。それぞれのクエリが作成された後の、たとえば追加(ユニオン)の処理は、前の回で紹介した手順と同じです。


このテーブルやワークシートのオブジェクトを「選択する」条件を含めてクエリ化したいのです。
もう一度、ナビゲーターウィンドウをみると「フォルダー」のようなアイコンがあります。実は、これは Excel のブックそのものを表しているんです。


このフォルダの形をした「ブックアイコン」を選択して、[編集] ボタンを押すと、ブック内のオブジェクトとその属性がテーブル形式で編集可能になります。


ここで、オートフィルターの要領で、必要なオブジェクトの絞り込みが可能になります。

アニメーションGIFでは種類(Kind)でTableを指定して、テーブルオブジェクトだけに絞り込んでいます。

もちろん、名前で「~から始まる」や「~を含む}で絞り込みをかけることも可能です。

そして、このブックだけしか選ばない方法の最大のポイントは、作成するクエリはたった1つしかない、ということです。よって、テーブルが何個あろうが、クエリは1つであり、以下で紹介するように、複数のテーブルを追加するのは、たった1回ボタンを押すだけでいいのです。

(2) 追加(Append = Union)は「同じ形式」であることだけ気を付け、展開する

絞り込んだ後、テーブルの中のデータを取りだす(展開する)のは、ボタン1つを押すだけでOKです。

ただし、展開する前に不要な列を削除します。不要な列を削除、というよりは、「必要な列だけを残す」という作業が本質になります。

アニメーションGIFでは、展開する [Data] 列と、元のデータがどこかわかる [Name] 列を残して、他の列を削除しました。

[Data] 列の先頭行にある展開・集計するボタンで、展開します。




(3) 別のシートが増えても対応可能なクエリ

このクエリはクエリ内の適用済みステップで、ワークシートやテーブルを明示的に指定していません。 「指定したブックにある、テーブルオブジェクトをすべて集めて展開する」というクエリになっているからです。

元データのブックが更新されたら、加工用に用意したクエリを更新することで、最新のデータを取り込みます。もちろん、名前の知らない新しいワークシートの新しいテーブルが追加されても、クエリの編集なしにデータを取り込むことができます。

(4) 列順序は関係なく、列名が重要

テーブルオブジェクト(ListObject)は「構造化参照」されますが、このクエリにおいても構造化参照されています。列名を使って、それぞれのテーブルの列の追加を行っているのです。
そのため、列の順序、順番は関係なく、同じ「列名」を持つオブジェクトが「追加」されます。

[日付] [番号] [数値] という列順序のテーブルと、[数値] [日付] [番号] というテーブルは、問題なく追加可能だ、ということになります。

業務のほとんどは、まとめるべきワークシートの名前が決まっていることが多いですが、日付や期間、時期のようなワークシート名だと、ブックを開くたびにワークシートの数と、新たなワークシートが追加されている、というケースも少なくありません。
VBAを使えば解決していましたが、逆にいえば VBA を使わなくても、Power Query / 取得と変換の機能でここまでできることは、知っていて損はないと思います。

2016/05/11

[Excel 取得と変換] Power Query でクロス集計表・マトリックス表を表形式・テーブル形式に変換する

前回に引き続き、これも今は Power BI で簡単にできる、Excelユーザーにとっての長年の夢、というか、実務でよく直面する課題です。
(この話題の2018年更新版の投稿はこちらです。https://road2cloudoffice.blogspot.jp/2018/03/blog-post.html

クロス集計表をリスト形式・テーブル形式に変換したい、というものです。これ、Power Query だと一瞬でできるんですよ。

この変換には、Power Query の機能を使いますので、Excel 2016 であればデータタブの [取得と変換]、Excel 2013 であれば Power Query をマイクロソフトのサイトからダウンロード、Excel 2010 の Professional Plus (企業向けのライセンス)ならば Excel 2013 同様に Power Query をダウンロードし利用することで、解決できます。

以下のようなクロス集計表(マトリックス表)あります。


ここから、ある日突然「A001だけの4月の合計と、地域を数値の大きい順番で・・・」など言われるわけですよね。できないことはないんですが、関数を駆使したり、コピーしたり、と手間と時間がかかります。

もし、このデータを以下のようなリスト形式で管理していたら、ピボットテーブル操作だけで完了しますよね。


クロス集計表から、このようなリスト形式のテーブルを作成するのは手間と時間がかかる、数が多ければVBAをつかって展開していました。

Power Query (Excel 2016 では 取得と変換)を使ったテーブルへの変換はアニメーションGIFでみられるほど「一瞬です」(笑)。


手順は以下です。

1) クロス集計表をテーブルにします。テーブルにする方法はアクティブセルをクロス集計表の中にいれて Ctrl+T または L、 リボンからは同じくアクティブセルをクロス集計表にいれて、[挿入]の[テーブル]グループの[テーブル]をクリックします。

2) テーブル形式にするのは、Power Query(取得と変換)で読み込みためです。テーブル内にアクティブセルをいれて、Power Query または取得と変換の [テーブルから] をクリックします。

3) テーブルになったクロス集計表を読み込んだクエリ エディターが立ち上がります。地域の列で null になっているセルがあります。


この null へ入力するデータはその上にあるデータのコピーになります。
このような場合、[変換]タブの[任意の列]グループの[フィル]の[下]を使います。


4) 4月から9月までの列を選択します。4月の列選択は [4月] の見出しをクリックします。Shift キーを押しながら [9月] の見出しをクリックすると、4月から9月までの列を選択することができます。

5) 選択した状態で、[変換]タブの[任意の列]グループの[列のピボット解除]をクリックします。これでクロス集計表がリスト形式のテーブルに展開されます。



6) 展開された列名を「月」に変更して、[閉じて読み込む]でワークシート上にテーブルを作成します。

この手順が上のアニメーションGIFになります。

なお、このテーブルの作成に使ったクエリを削除すると、元のクロス集計表とリンクしていないテーブルになります。クロス集計表の更新はあまりお勧めできませんが、クエリを保持しておけば、クロス集計表の数値が変わっても、[更新] でクエリ結果のテーブルを更新することもできます。

2016/02/09

[Excel] テーブルと Excel VBA

ワークシート関数を使う時、これまでの「範囲」の変化に対応することができるテーブル機能は Excel 2007 以降の最大の機能拡張、、、なんてことも言われています。

過去にこのブログでもいくつかテーブル機能について紹介しました。

テーブルのすすめシリーズ
http://road2cloudoffice.blogspot.jp/2014/10/vlookup.html
http://road2cloudoffice.blogspot.jp/2014/10/blog-post.html
http://road2cloudoffice.blogspot.jp/2014/10/blog-post_31.html
http://road2cloudoffice.blogspot.jp/2014/11/blog-post.html
http://road2cloudoffice.blogspot.jp/2014/11/blog-post_7.html
http://road2cloudoffice.blogspot.jp/2014/11/office-365-sharepoint.html

機能、関数で多くのメリットを提供するテーブルですが、Excel VBA の世界ではどうでしょう?

まず、表としての範囲が、テーブルというオブジェクト(ListObject オブジェクト)になるため、最終行+空白問題(上から End モードで下に行ったとき、空白があったら止まる)、もしくは最終行+ごみ問題(行の一番下から上に上がっても、途中にごみがあればそこで止まる)は基本的になくなります。

というのも、テーブルではテーブルの行数は End モードを使わずとも、テーブルのプロパティで確認することができるからです。テーブルの行数は ListRows.Count でわかります。

ここで標準的なテーブルを実践ワークシート協会の田中亨が推奨する「黄金テンプレート」で処理するコードを見てみると以下のようになります。

サンプルテーブル
サンプルテーブル
テーブルでも表の処理同様の VBA コードを書くことができます。
名前が田中だったら、個数X単価を合計に代入する、といった処理だと、田中亨の黄金テンプレートで考えると、

範囲はどこか? 

行は 3 から 12。もちろん、最終行の 12 が可変だとしても、End モードで特定します。

条件はなにか?

条件は、名前のセルが "田中" だったら、ですね。

処理は何か?

合計セルに個数X単価を代入する、です。

そうすると VBA のコードは以下のようになりますね。

Sub sample1()
    Dim i As Long
    For i = 3 To Range("B2").End(xlDown).Row
        If Cells(i, 2) = "田中" Then
            Cells(i, 5) = Cells(i, 3) * Cells(i, 4)
        End If
    Next i
End Sub

これをテーブルのオブジェクトを使って、テーブルらしく書いてみると、上記の表形式とは大きく違う点があります。それは「列番号」であり、「行番号」の考え方になります。

テーブル オブジェクトの世界では、ワークシートの「A列」や「D列」は意味がなく、あくまでテーブル内での列順序の番号です。上の例でいえば、名前の列は、B列で列番号2ではなく、あくまで名前フィールドであり、フィールドの番号はテーブル内で「1」になります。

さらに、テーブルというオブジェクトは「ListRowsコレクション」からデータ部分が構成されています。テーブルの行の各1行は ListRow オブジェクトとして扱うことができます。このことより、「何行あるか、わからないけど、For Each を使えば、そのテーブルのすべての行(ListRowsコレクション)を扱うことができる」として処理可能になります。

そのサンプル コードが以下です。

Sub sample2()
    ''1 名前, 2 個数, 3 単価, 4 合計 ←テーブル内での順序
    Dim tb As ListObject
    Set tb = ActiveSheet.ListObjects("TestTable")  ''テーブル名がTestTableだった場合
    Dim R As ListRow
    For Each R In tb.ListRows
        If R.Range(1) = "田中" Then
            R.Range(4) = R.Range(2) * R.Range(3)
        End If
    Next R
End Sub

たぶん、R.Range(1) という書き方ってあまり使っていなかったと思います。
この R.Range(1) という書き方は、以下の書き方と同じものです。

R.Range.Item(1)
R.Range.Cells(1)

おもしろいですね。
VBAセミナースタンダードで田中亨がよく「上級者は2次元配列は使いません。だって、Excel VBA にはワークシートがあるんですから!」と言いますが、上記の表記はその流れです。(正確にはこれは一次元配列ですけど)

For Each でとってくる R は一次元配列(的なもの)です。(要素の型が違うので配列とは言えませんが、便宜上お許しを)この1次元配列は1列または一行で複数セルを選択した「セル範囲」のイメージです。今はテーブルなので、以下のような横方向の1行のセル範囲です。

[[名前] [個数] [単価] [合計] ]

この順序です。ですから、名前は (1) で、個数が (2)、、、となるわけです。
その表記方法が R.Range(1) だったり、R.Range.Item(1) だったり、R.Range.Cells(1) になるわけです。セル範囲の Range オブジェクトを配列のイメージとして扱っているんですね。

繰り返しますが、ポイントは A列、B列といったワークシート上の絶対的な番地では無い!ということです。

上記の例はサンプルなので処理や条件がシンプルなものですが、これが複雑になってくると、Cells(行, 列) でセルを指定するやり方と、R.Range(要素) で処理すべきセルを指定する方法のどちらがいいかはだんだん変わってきます。

その意味から、変数を使って、テーブルの列順序を定義すると、さらに可読性が高まります。(IMEオン・オフの操作があるので日本語変数がいいわけではありませんが、サンプルとして定義します)

Sub sample3()
    Dim tb As ListObject
    Set tb = ActiveSheet.ListObjects("TestTable")
    Dim 名前 As Long, 個数 As Long, 単価 As Long, 合計 As Long
    名前 = tb.ListColumns("名前").Index
    個数 = tb.ListColumns("個数").Index
    単価 = tb.ListColumns("単価").Index
    合計 = tb.ListColumns("合計").Index
    
    Dim R As ListRow
    For Each R In tb.ListRows
        If R.Range(名前) = "田中" Then
            R.Range(合計) = R.Range(個数) * R.Range(単価)
        End If
    Next R
End Sub

たった5~6行の処理のための変数宣言と変数設定で7行は、、、と思いますが、通常はもっと条件や処理が複雑になるので、これだけで「行数が多い、無駄だ」と判断するのは早計だと思います。 For Each から Next R までの処理の「可読性」を見てください。実にわかりやすい表記になっています。

たぶん、テーブル ListObject オブジェクトを VBA で扱うのは、このオブジェクト変数を使ってテーブルを設定し、テーブル内のフィールドの順序を変数として設定していくのが一番良い方法だと思います。

ここでテーブル機能で重要な「構造化参照」が出てきてませんよね?

いろいろ試した結果、この「構造化参照」は VBA を編集するツールである VBE で実装されていないため、インテリセンスのような形で、文字通りの「構造化参照」という機能は実装されていないようです。テーブル名を指定すれば、そのテーブルにあるフィールドが表示される、、、ような機能は VBE には無い、ということです。

では、VBE に期待しないで表記したらどうなるでしょう?

ここでも Excel の Range オブジェクトの実装、、、「すげー」となるわけです(笑

VBE では構造化参照のメリット享受できないので使う理由がないのですが、無理やりやると以下のようなコードを書くことができます。

Sub sample4()
    ''1 名前, 2 個数, 3 単価, 4 合計 ←テーブル内での順序
    Dim R As Range
    For Each R In Range("TestTable").Rows
        If R.Cells(1) = "田中" Then
            R.Cells(4) = R.Cells(2) * R.Cells(3)
        End If
    Next R
End Sub

テーブルを ListObject として宣言しない分だけ行数が短いですが、R.Cells(1) などを番号ではなくフィールド名で、、、となると、宣言や設定のためそれなりに行数が増えます。さらに、構造化参照が VBE でサポートされていないために、複雑、長くなればなるほどめんどうなことが発生してきます。(*1 最後に追記してます)

以上のことより、通常、テーブルを VBA で扱うのであれば、テーブルは ListRow のかたまりであり、テーブルを ListRows コレクションとして処理するのが王道でしょう。
そのときの For Each として1つ1つ処理するのは ListRow オブジェクトであり、その ListRow オブジェクトの扱いは「一次元j配列」的になる、と言えるでしょうね。

今後、データ接続でテーブル形式でデータを取り込むことが多くなります。そのときは、上記の考え方でテーブルをマクロで扱うことも多くなると思います。

(*1) 構造化参照が少なすぎるとおもったので追記。
構造化参照方式で以下のような表記が可能です。

Range("テーブル1[名前]")

上記でテーブル1の名前フィールドのデータ部分の範囲を指し示すことができます。
しかし、この Range(構造化参照) は、あくまで Range による範囲(つまり、named range) のため、ListObject との関連がありません。

そのため、Range("テーブル[名前]").Column は、ワークシート上の列番号を返します。


[PR] VBAセミナーを受けた後は、これさえあれば何もいらない。

2015/11/09

Excel 2016 と Power Query (取得と変換)

Excel 2016 の 「取得と変換」 は Power Query

このブログで紹介してきた Power BI Excel アドインの Power Query ですが、Excel 2016 の「データ」タブの「取得と変換」グループにあるリボンコマンドは、Excel 2013まで Power Query アドインとして提供されていたものが Excel 2016 の標準機能になったものです。

Power Query や Power Pivot などの機能は「Power BI」ブランドの仲間としてマイクロソフトから様々な形で提供されていますが、Excel 2016 のトピックとしては、これまでアドインだったり、Homeなどのエディションで利用不可能だった Power Query が標準機能の「取得と変換」となって Excel に組み込まれたことがあげられます。

取得と変換グループ

このため、似たような外部からのデータの取り込み機能が「データ」タブのすぐ近くにあったり、「Power Pivot」の機能でもデータの取り込み機能があったり、ちょっと複雑な状況になりました。

これまでのマイクロソフトの Excel の機能拡張から考えると、どれかの機能がばっさり「切り捨てられる」ことはないと考えられますが、その中でも機能拡張の優先順位がつけられ、あるものは引き続き機能拡張され、あるものは機能拡張されずに機能として残りながらもそのうちリボンから消え、ユーザーの目の届かないところに位置づけられていく、ということが考えられます。

その意味で、外部とのデータ連携、外部からのデータ取得といったエリアでは [データ] タブにある [取得と変換] のリボンコマンドが今後の主流になる可能性が高いことが予想されます。多種多様なデータソースにつながることももちろん重要ですが、この「取得と変換」は他にはない特徴があります。それはクラウド (Office 365) を中心とした「データの取得方法(クエリ)の共有」と「取得したデータの公開」が可能なことです。

 

外部データの取り込みの置き換えではない「取得と変換」

そして、上述したクエリやデータの共有や公開という「拡張機能」も重要ですが、「基本機能」そのものも強化されています。共有などを考えずに、ただ単に Excel の外にあるデータをワークシートに取り込む、という機能を見ても「取得と変換」(Power Query)は強力です。

1) 閉じているブックからデータを取得したい

他のブックのデータを Excel で開かずに取り込むは「鉄板ネタ」でしょう。
これができるからといって、Excel 4.0 のマクロを今の時代に使うのは辞めにしませんか。またはそのような情報をありがたく(使ってもいないのに)紹介するのも、もうどうかと思います。

取得と変換 (Power Query)の強力な機能のひとつは「他で保管されている Excel ブックからデータを取得」することができる、です。

取得と変換ーブックから

それも単純にすべてのデータをワークシートに取り込むのではなく、必要なデータを絞り込んで、変換(文字→数値、シリアル値・日付の表示形式の設定など)し、ワークシートに取り込むことができます。上級者であればワークシートにデータを取り込まず、データモデル・データ接続のみで外部の Excel ブックのデータをピボットテーブルのソースとして利用することもできます。

ネットワーク上にある Excel ブックを対象にできます。\\サーバー名\共有フォルダ\ で表現されるファイルサーバー上の Excel ブックはもちろん、Office 365 の OneDrive for Business や、SharePoint ドキュメント ライブラリー内の Excel ブックも利用可能です。

取得と変換(Power Query)によるデータ取得は「クエリ」をベースにしているため、「接続(クエリ)の更新」をすることで、最新のデータに更新されます。
そのため、一度取得する場所や条件、変換の設定をしてしまえば、あとは「更新」をするだけで最新のデータを利用することができます。

この例は以下ですでに紹介しています。

2015/7/7 Power Query から https 経由で SharePoint の Excel ブックを開く


2) 指定したフォルダー内のすべてのファイルからデータを取り込みたい

「ファイルから」のサブメニューの「フォルダーから」は、フォルダにどんなファイルがあるか、を調べる機能だけではありません。

取得と変換ーフォルダから

クエリエディタ-フォルダから1
フォルダだけを指定した場合のクエリ結果

これも Excel VBA での「鉄板ネタ」になりますが、指定したフォルダー内にある CSV ファイルや Excel ブックを「すべて」読み込む機能をプログラミングなしに実現することができます。
この機能が強力なのは、一度設定してしまえば、ファイルが増えても OK、サブフォルダーが増えても OK という点です。もちろん、基本的にすべてのファイルを参照することができるので、そこから「ある名前の規則で絞り込む」ということもオートフィルターの設定同様容易に可能になります。

ポイントは Excel の中のデータを取り出す「列」を追加してやることです。その追加する列で使われる関数が Excel.Workbook 関数になります。

当たり前ですが、取り出す先の Excel ブックのワークシートは同じフォーマット、もしくはその構造をあらかじめ理解していて、そこから何を取り出したいかは決まっているものとします。
取り出し先のデータは「テーブル」形式でなくても大丈夫ですが、テーブルであれば「ヘッダー」と「データ」を自動識別してくれます。テーブルでない「範囲」の場合は明示的に指示する必要がでますが、難しい作業・指定ではありません。とはいえ、テーブル形式は今後は必須になっていくので、できればこのタイミングでテーブル形式を使うようにすれば幸せになれるでしょう。

ざっくりと手順を紹介します。

まず、対象となるブックが入っているフォルダーを指定します。

PQ001

指定したフォルダーから該当するファイルを絞ります。この例では “Book” から始まっている名前の Excel ブック「だけ」に絞り込みます。
この絞り込みの設定手順も Excel のオートフィルターで慣れた手法になります。

PQ002

絞り込んだファイルから Excel.Workbook 関数を使って、ブックの中のデータ情報を抜き出す「列」を追加します。
ブックそれぞれのデータ情報は [Content] のバイナリデータから Excel.Workbook 関数を使って参照することができます。
そのため、バイナリデータの [Content] 以外の列は不要なので、削除してから新規列を追加します。
ただし、この段階ではまだ「セル」や「テーブル」のデータそのものを参照しているわけではありません。

PQ003

それぞれのブックにはテーブル形式でデータが入っていますが、 Power Query からは「テーブル形式」のデータと「シート」の範囲データの2つを認識しています。
今回使うのは「テーブル形式」のデータなので、「テーブル形式」のみのデータに絞り込み、不要な列を削除し、テーブルのデータを列として展開します。
テーブル形式のデータを利用するため、列ヘッダーとデータ部分を明示的に区別・指定する必要はありません。

PQ004

このクエリの結果をワークシートに読み込みます。ワークシートに読み込んだときに「日付」がシリアル値のままで読み込まれるので、この表示形式の設定をクエリ エディタで行います。あわせて日付で昇順ソートの設定も行います。

PQ005

ここで作成したクエリの情報は「ブック」に保存されています。このブックを開いて、「データ」タブの「接続」の「すべて更新」または「更新」や、「クエリ」ツールの「クエリ」タブの「読み込み」の「更新」、さらに結果テーブル上のコンテキストメニュー(右クリックメニュー)の「更新」によって、最新のデータ、最新のファイルをクエリで指定しているフォルダーから読み込んで、テーブルのデータを更新します。

Excel Online と Excel データの共有

Excel Services という機能が SharePoint Serer 2016 で無くなる、というリリースがありました。ですが、Office 365 / SharePoint Online 利用者にはほとんど影響ありません。
MOSS2007などの昔、Excel Services は SharePoint 上で Excel ブックを表示させる、という目的の機能でしたが、今の SharePoint ポータル上での Excel ブックの共有には Office Web Apps/Excel Online の Excel Web Access が使われ、Excel Services は使われていないからです。

Technet: SharePoint Server 2016 IT Preview で使用されなくなった機能と削除された機能
Technet: SharePoint Server 2016 IT Preview の既知の問題

そのため現状、Excel ブックの共有という意味では、SharePoint Onoine の例から見ても Excel Online が主流になってきているといえるでしょう。
さらに Power BI サービスと OneDrive との組み合わせにより、Excel Online を使った共有機能がさらに拡張されてきています。

つまり、田中メソッドでいうところの「入力・計算・出力」の「出力」の部分の大きな変革が始まっています。

いままでは「印刷」する、もしくはブックを「コピーして配布」するが主でしたが、今後は

  • OneDrive にアップしたブックのリンクで Excel ブックを共有する
  • SharePoint サイトのポータルページに埋め込み共有する
  • Power BI サービスを使って、ダッシュボードとして共有する
  • Power BI サービスを使って、最適化されたアプリでデータを閲覧する、させる

といった Excel Online をベースにした「出力」方法が主流になっていくと考えられます。

Power BI については、こちらのブログ記事も参照にしてもらえればと思います。

 

クエリの共有

実際に現場でデータを分析したい、データの傾向をみたい人が、必要なデータへのアクセス権限をすべて持っている、または、その権限を持っている人が現状を踏まえて分析できる、ということは稀でしょう。
規模が大きくなくても、パッケージやアプリケーションに組み込まれているデータは「正規化」され、複数のファイル、テーブルに分割されていることが多く、そのリレーションをすぐに把握できるものではないでしょう。

Power Query や Power Pivot を駆使して、正規化された複数のテーブルから必要なリレーションシップを基にして分析元のリストを作成することに労力をかけるよりも、必要であろうデータを収集できるクエリがすでにあり、そこから必要なデータを絞り込む、もしくは、いくつか用意されたクエリを結合して必要なデータを作り出し、傾向を把握する、分析することに時間をかけたほうがいいと考えるでしょう。

Power BI では「データ カタログ」としてクエリの共有機能を提供しています。データ カタログにクエリを登録、それを共有することによって、エンドユーザーがクエリをゼロから作らずに、データ管理をしている担当者がクエリを作成し、エンドユーザーに近い分析する部門がピボットテーブルを活用してデータの傾向を見る、といった活用が可能になります。

support.office.com Power BI データ カタログのクエリを共有する

 

パーソナルツールとしての Excel 機能拡張の限界

このようなことから、少なくとも今後の Excel の機能拡張の方向は Office 365 といったクラウドの進む方向と一緒だと考えるのが妥当でしょう。
そうすると、Excel を使いこなしたいユーザーにとって、以下を「知りません、得意じゃないんです」と言ってられなくなっています。

  • Office 365、SharePoint、各種データソースへのアクセス権限についての理解
  • 自分が共有したいブックの、他の人へのアクセス権設定

Excel ユーザーの方とお話をしていると「サーバー」や「アクセス権」、「認証」という言葉を聞いただけで拒否反応する人も少なくないのですが、それらの管理や設定を自分たちがすることがなくても、システム部門やデータ管理の担当者に適切な権限をください、もしくは組織内のデータを活用するために設定してほしい、というリクエストを出す、常々話をするくらいの考えは持ったほうがよいでしょうね。

また、管理者側からすれば、すべてをエンドユーザーに任せるのではなく、あらかじめ適切に権限設定された共有クエリを用意することで、必要なデータに対して必要な権限でアクセスさせることができます。そのような設定が管理者側で可能であることをエンドユーザーも知っておくべきでしょうね。

もう、一人で Excel ブックをいじってそれらのコピーを配布する時代の先行きは長くないようですから。

 

その他の参考情報

Power Query のクエリ編集についてはマイクロソフトからまとまった情報が出ているようには見えませんが、根気強く探すと出てきます。

キーワードは「M言語」ですが、検索するときは “M Language” で探しましょう。 “Power Query M Language” あたりのキーワードで msdn などの公式技術文書にいきつきます。

msdn: Power Query (informally known as “M”) Formula reference
https://msdn.microsoft.com/en-us/library/mt211003.aspx

そのほか、サイトに support.office.com を指定して Power Query のキーワード (& 1041 日本語指定)で検索するのも有効でしょう。

https://support.office.com/ja-JP/search/results?query=Power%20Query&lcid=1041

また、MSMVP の kagata さんが以下の方法による Power Query 関数のヘルプの確認方法を紹介しています。

http://mukkumuku.blogspot.jp/2015/10/power-bi-10-power-query-reference.html

最近では Power BI の新しい自習書が日本マイクロソフトさんから出ました。しかし、それは Excel の範疇では検索できません。
以下のリンク ページの「Power BI 自習書」の「Word版ダウンロード」や「PDF版ダウンロード」から自習書のデータをダウンロードしてください。

BI/Data Analytics – microsoft.com/ja-jp/ : Power BI 自習書

この自習書を作成した SQLQuality の松本さんのブログがこちらになります。

http://www.sqlquality.com/column/column_50.html

Powered by Blogger.

自己紹介

自分の写真
1989年新卒で日本IBMに入社しダウンサイジング担当としてホストコンピュータと繋げるオフコン、UNIX、PCサーバーのプロジェクトを担当。1997年 MSKK(現日本マイクロソフト)入社、NT4出荷に伴い企業向けサポート部門のビジネスマネージャーとして Excel 使いとなり、2002年 にMSMVPなどをサポートするユーザーコミュ二ティ部門を設立、部門をリード。2006年にMSKK退職後、企業向けのITトレーニング会社・団体に携わり、2014年頃よりPowerBI勉強会主催メンバーの一人として参画、そのコミュニティ活動で MSMVP for Data Platform PowerBI 2017受賞。https://mvp.microsoft.com/ja-jp/PublicProfile/5002635 同年にMVP Awardを返上し、アマゾン ウェブ サービス ジャパンに入社、コミュニティプログラム担当として現在に至る。