2019年1月3日木曜日

表と表を紐付けするときに、Excel2013以降のリレーションシップの機能、MicrosoftQueryのリレーション、VLOOKUP関数、DAOやADO、どれを使うといいか?マイクロソフトさんは愚かなので、「VLOOKUP関数は古いやり方」と言っています。自分たちの作ったソフトや機能のすごさが分かってないのかな?

勉強の為に転載しました。
(シェアしました。)
https://euc-access-excel-db.com/tips/ct09_biz-pctec/ct090201_biz_pc_basic/relationship-vlookup-fool-microsoft01

● 表と表を紐付けするときに、Excel2013以降のリレーションシップの機能、MicrosoftQueryのリレーション、VLOOKUP関数、DAOやADO、どれを使うといいか?マイクロソフトさんは愚かなので、「VLOOKUP関数は古いやり方」と言っています。自分たちの作ったソフトや機能のすごさが分かってないのかな?
  
  
まず、何かに紐付いたデータを1つのセルに表示させる方法、あるいは、複数の表を紐付けして「横に結合して」「1枚の表として」表示する方法としては・・・、
(01)VLOOKUP関数を使う
(02)「リレーションシップ」機能を使う
  (2016、2013の場合。2010はPowerPivotアドインをインストして。)
(03)Microsoft Query のリレーション(=SQL文)を使う
(04)DAOやADOなどのミドルウェア+SQL文を使う
・・・の4つくらいがあると思います。
ここではその(01)のことに関するお話です。
早速ですが、マイクロソフトさん自身がそのことに関して、ここで大変愚かなことを言っています。
「VLOOKUP は古いやり方になりました。」と書いてあります。
それは間違いです。
正しくは「表と表の紐付けを、すべてVLOOKUP関数でやる必要はなくなりましたが、VLOOKUP関数でしかできない紐付けのシーンもまだあります。」です。
マイクロソフトさんは、新しい機能を使わせたいばっかりに、「古いけど良い技術」をバカにしています。
自分達が作ってきたものなのに。
こういうことをしているから、教える立場の方々がどんどん愚かな勘違いをしてしまうのだと思います。
たしかに、2013以降の「リレーション機能」(2010はPowerPivotアドインが必要?)で、VLOOKUP関数の出番は減りますが、でもそれを言うなら、Microsoft Queryのリレーション機能のほうがSQLが直接・即座に使えるし、かつ、20年も前から実装されているわけなので、そっちをもっと使いやすく強化したほうが良かったのではないかと思ってしまいます。
「PowerPivot」なんて言って、さも新しく進化したように言っていますけど、20年も前から実装されている「MicrosoftQuery+ピボット」(+Offset関数+名前の定義)で、ほぼ似たようなことが20年前からとっくにできていたじゃないですか。
なぜ、「MicrosoftQuery+ピボット」をもっとブラッシュアップしなかったのか、意味がわかりません。
もちろん、2013以降の「リレーション機能(2010はPowerPivotが必要?)」にも適材適所で便利に使える場面があると思います。きっと、連携できるピボットやグラフ等々も、昔とは比べ物にならないくらいパワーアップしてるでしょうし。(僕自身はMicrosoft Queryで間にあってしまっているので、2013以降のリレーション機能まだ必要ないので使ったことありませんので大変申し訳ないのですが・・・。)
でも、本当なら、マイクロソフトさん自身が、VLOOKUP関数を「古いもの」と決めつけをせずに、
「2013以降のリレーション機能(2010はPowerPivotが必要?)はこれこれこういうとこに使うと活きます!」
とか
「Microsoft Queryのリレーション機能なら、大きな表単位で大きく紐付けしたい場合やSQL文を使いたいケース、閉じたxlsファイルの中の表のリレーション、VBAでSQL文の自動生成・変更等々でMicrosoft Queryのリレーションやフィルタ操作などを自動で自由に切り替えしたい時、SQL文作成自体の勉強、Accessのクエリ操作・SQLServerのビュー操作の事前勉強、などに是非使ってください!」
とか
「もちろん、VLOOKUP関数もまだ健在です!リレーション機能ではできない細かいところ、かゆいところ、小さめなケース、1セルごとに紐付け結果表示を変えたい場合、や、それらのVBA操作などには是非VLOOKUP関数で!もちろん、帳票作成時にも一番いいかも!1セル単位ではなく表として紐付けする際もテーブル機能のような余計な色が付きませんし、セル単位でコントロールできます。」
とか、
「いや、実は、”ADO” や ”DAO” というミドルウェアを使って、SQL文を発行して紐付けすることもできます。主にVBAにはなりますが、SQL文をよく使う方ならこちらのほうが簡単です!1セル単位も表単位もどっちも行けます!」
とか、
それぞれがどこで生き生きするかをもっと言うべきです。
「古くなった=ダサい=使えない」ではないです。
C言語は古いですけど、VBAなんかより、本当に世界中で使われていて、はるかに優れているのでは?もちろん、VBAだって、シーン限定ではC言語より優れています。
それぞれに効率の上がる利用シーン、良さがあるんです。
マイクロソフトさんは、いいかげん、「古くなった=ダサい=使えない」「新しい=カッコイイ=使える」なんていう、最低な価値観・固定観念・決めつけ、をユーザーに押し付けないでほしいと思います。
  
  
============================
関連記事
※「DAO」というミドルウェアにて、「SQL」というものを使って、Excelの複数の表を紐付けする例
Excel2000にて表と表を紐付けするときに、VLOOKUP関数以外に、「DAO」というミドルウェアを使って、任意のセルに紐付いた値を表示する方法
https://euc-access-excel-db.com/tips/ct09_biz-pctec/ct090201_biz_pc_basic/relationship-dao01
「ミドルウェア」とは、「中間に位置するソフト」というような意味ですが、「DAOもADOも」ミドルウェアというくくりで紹介されることが多いです。Excelで使う場合は、「Excel、Access、テキストファイル、SQL Serverなどなど」と、「Excel自体」とのあいだに(中間に)位置して、データのやり取りをしてくれるソフト・・・ということになります。
  
  
※「ADO」というミドルウェアにて、「SQL」というものを使って、Excelの複数の表を紐付けする例
以下のサイトをご参考にしてください。
https://excel-ubara.com/excelvba5/EXCEL114.html
  
  
※「ADO」というミドルウェアにて、「SQL」というものを使って、Access等々外部データベースの複数の表を紐付けする例
以下のサイトをご参考にしてください。
https://tonari-it.com/excel-vba-access-sql-join/
  
  
※その他のミドルウェア関連の参考サイト
============================
※ちなみにですが、「Microsoft Query」は次のような機能で、以下のような感じで使えます。
「Microsoft Query」とは、少々乱暴な言い方をすると・・・
(01)VLOOKUP関数やExcel2016のリレーション機能のように表と表を紐付けする。
  (2表間で複数の紐付け可能・2枚以上の表も紐付け可能)
(02)フィルタオプションのようにセルに直接細かい条件値を入れてフィルタする。
(03)複雑でないならフィルタしながら集計機能やピボットのようにグループ化集計できる。
(04)ピボットテーブルのソースにでき、そのデータ範囲を(列や行が増えても減っても)
  指定し直さずにいつでもピボット更新でき・結果反映できる。
・・・といった、4つのことを「すべて同時に」できる機能です。
20年前(Excel97の時代)からOfficeに実装されている機能です。(一応Excelからは独立しているプログラムですがExcelとの親和性がすごく良いです。)
「Microsoft Query」の画面は、Microsoft Access のクエリと酷似しています。
「SQL」と呼ばれるものも扱えますので、その勉強にもなり、AccessやSQL Server、MySQL、といったデータベース製品に触れる前に、それらの製品の基本原理を学ぶことができます。
「Microsoft Query」を使うと、たとえば
「××年××月××日~××年××月××日に商品Aを買ったお客様と××年××月××日~××年××月××日に商品Bを買ったお客様のうち、地域「イ」と地域「ロ」に住んでいる50歳以上の女性の商品AとBそれぞれの累計売上集計」・・・
といったことや、
「××年××月××日~××年××月××日に商品Aを買ったお客様と××年××月××日~××年××月××日に商品Bを買ったお客様のうち、地域「イ」と地域「ロ」に住んでいる50歳以上の女性たちの、町別のAとB合算の売上集計とAとB別々の売上集計」・・・
といったことを、「リレーションを組みつつ複数の条件の設定をする」ことで、一回の操作(というか1画面内の設定)で出せます。
ちなみに、リレーションは、2枚の表の間で複数本のリレーションがちゃんと組めますし、表の数も、2枚だけでなく、3枚、4枚と、リレーションさせていくことができます。
そのようにある程度、事前に絞り込みと計算をしておいて、ピボットにかけるということもできるのです。
もちろん、名前の定義の機能とOffset関数を使えば、その結果表の列数や行数がいくら増減しようが、ピボット側でソースのデータ範囲の再設定をする必要はありません。(多分、2013以降のリレーションシップの機能やテーブル機能にある何らかの「制限」も、Microsoft Queryには無かった気がします。それが何かは忘れちゃったのですみませんけど・・・。)
もちろん、PowerPivotというか、Excel2013や2016のリレーションシップを活用しても同等のことができるのではないかと思いますし、帳票機能やグラフ機能は、Excel2013以降のほうがはるかに優れていると思います。
なので、Excel2013以降のリレーションシップ機能のほうが便利で使いやすいシーンもいっぱいあると思います。
ただ、「Microsoft Query」は2016や2013はもちろん、2013以前のExcelのほぼ全バーションで使えますし、また、あるQueryの結果をもとにしたさらにQueryをさらにQueryにかけるというネスト(入れ子)というか多段的な調査や集計がとてもやりやすいです。そういった意味でも、未だ、使い道はかなりあると思います。
当然、同じようにVLOOKUP関数にも、ピンポイントに超便利なシーンはまだたくさんあるわけで・・・
それぞれがちゃんと「生きる」ように使ってあげることができるのが、人間が人間たる所以・・・ってかなりオーバーですけど、でも、そういう部分もあると思います。
なお、「Microsoft Query」の機能については、細かくは、例えば以下のようなことができます。
ご参考にしてください。
「Microsoft Query」 で私たち素人のエンドユーザーでもできること いろいろ
https://euc-access-excel-db.com/tips/ct08_exceltruebasic/ct081010_agg_n_listup_sql/microsoft-query-can
  
  

0 コメント:

コメントを投稿