● Excel2000~ドラッグ一発で済むMicrosoft Query の「リレーション」の利点と、逐一セルに数式を埋めることが必要な・でもきっと多分便利な「VLOOKUP関数」の利点のこと

※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです

※関連記事
Excel2000にて表と表を紐付けするときに、VLOOKUP関数以外に、「DAO」というミドルウェアを使って、(閉じたxlsの)紐付いた値を、1つのセルに表示する方法
https://euc-access-excel-db.com/tips/ct09_biz-pctec/ct090201_biz_pc_basic/relationship-dao01

実は僕はExcelで「VLOOKUP関数」というものをほとんど使ったことがありません。
Excelを97の時代から始めて、でも、まったくと言っていいほど、使ったことがありません。

「何かの列をキーにして、そのキー列の値と紐付いた、別の表(マスタ=台帳など)の値を引っ張ってきたい」という時があると思いますが、そんなときは いつも、「Microsoft Query」の「リレーション」か、Accessのクエリを使っているからです。

これはExcel2000の時代からずっとそうです。

「VLOOKUP関数」が必要ないのです。

なので、「VLOOKUP関数」を使ってあるExcelファイルを頂くと、すごく苦戦します。

関数の構文からいつも調べなおして、あれこうで、これがああで、とやっています。

「頭のいい人が多いんだなあ・・・、俺バカで面倒くさがりだから、一向にVLOOKUP関数が覚えられない・・・いい加減覚えなくちゃ・・・」、とか・・・。

それで、思うことを少し書いてみたいと思います。
  
  
★ 「Microsoft Query」の「リレーション」のことについて

Excelの2013からだったかと思いますが、「リレーションシップ」という機能が追加されたらしいですね。

「Microsoft Query」の「リレーション」もあれと同じです。

ただ、どうやら、リレーションでできることは同じでも、リレーションを結んでからの操作が、Excel2013・2016以降の機能はショボいようなので、使ったことはありません。
(しょぼくなかったらごめんなさい!!!!)

といいますか、Excel2013・2016自体を持ってないです・・・。

が、買ったとしても特別な理由が無い限り、また、VLOOKUP関数の場合と同じように、誰かが、それを使っているファイルをよこしてこない限りは、まず使いません。

2000古来からある、「Microsoft Query」の「リレーション」を使います。
  
  
★ 「内部結合」と「SQL」と「VLOOKUP関数」

結局のところ、「何かの列をキーにして、そのキー列の値と紐付いた、別の表(マスタ=台帳など)の値を引っ張ってきたい」という要望を実現するのは、例えば「SQL」という「ある意味世界標準のデータ管理の仕組み」、からすると「内部結合」というものになります。

「VLOOKUP関数」も同じです。

本当の意味での、「VLOOKUP関数」の目的や機能、「VLOOKUP関数」が生まれた理由のことをは僕は知りませんが、でも『 VLOOKUP関数でやれることのひとつ、として「内部結合」がある・・・』という風に理解しています。

「内部結合」とは、まさに、「何かの列をキーにして、そのキー列の値と紐付いた、別の表(マスタ=台帳など)の値を引っ張ってくる」ということです。

Aの表と、Bの表のうちで、共通する部分をあぶりだす、という言い方もできると思います。

もう少し別の表現をすると、「内部結合」とは、皆さんが小学校(でしたっけ?)のころに習った『 「ベン図」の「円の重なり合う部分」を 抽出する・・・』、ということです。

これは、もし皆さんが、ご自分の「データ管理」の「基礎力」を上げたいなら、是非、そういう理解もお持ちになったほうがいいと思います。

ちなみに、上図の説明ですが、例えば上図のように、2つの表の間で「リレーション」を組んで、「内部結合」というものをさせると、この中央の重なり部分を求めることができます。
2つの表がモトの場合、VLOOKUP関数でもこの重なり部分を求めることができます。

「Microsoft Query」ではこのような重なり部分を求めるのに、数式などの書き込みは一切なく、ゼロで、ドラッグ一発で終わります。

また、表が、3つ、4つになった場合はどうでしょう?

ご心配いりません。

上図のように、表が、3つ、4つになった場合の「重なり部分」を求める場合でも、「Microsoft Query」では、数式などの書き込みは一切なく、ゼロで、ドラッグ「2発」「3発」・・・、で終わるので便利です。

VLOOKUP関数だともしかしたら、少し難しくなるかもしれません。(簡単だったらごめんなさい!(^^))

「Microsoft Query」が便利なのは、誰かに数式を壊される心配が要らないので、いちいちセルをロックする必要からも解放される、ということです。

もちろん、数式自体(例えば引数とか)を間違えたり、崩されたり、という数式ミスも無いので、2重の意味で、ミスやチェックが減るのでそういうところがやはり便利です。

もちろん、デメリットもあると思いますが、そういう場合には、VLOOKUP関数や2013以上のリレーション機能などを使えば良いと思います。
  
  
では以降で、リレーションシップとVLOOKUP関数の位置関係を知っていただくために、「SQL」のことを少し補足しながら、お話させて頂きたいと思います。

まず、「SQL」は、仕組みというか、機能というか、簡易的な命令語というか、理論というか・・・、説明しづらいですけど、そんなようなものです。僕はTPOで分けて、そのなかで一番しっくりくる語訳を使っています。「自動集計・自動リストアップ機能」という訳を使う場合もあります。

「SQL」は「複式簿記」と同じくらい、データ管理の世界では有名・かつ・「世界標準」で、これを知らないシステム屋さんは一人もいません。逆に言うと、データ管理・情報処理の世界では、「SQL」は複式簿記と同じくらいの有名度です。あるいは、それ以上の有名度です。集計とリストアップをラクにしてくれるものです。

Googleさんや日本の大企業さんが社内で使っている基幹データベースシステムでもこの「SQL」が使われています。

弥生シリーズや奉行シリーズなどの市販ビジネスソフト、Access、ファイルメーカー、Web上のほぼすべてのカートシステム、Wordpressサイト、掲示板サイト、レシピサイト、その他もろもろ、至るところで使われています。

商業高校の情報処理の授業においてもお教えされているようですが、商業であれば、コンピュータの仕組みや二進数のことなんかどうでもいいので、より深く教えて頂きたい技術、仕組み、理論、です。また、普通科にこそ、必要でもあります。

「SQL」はExcel97の時代から「Microsoft Query」という機能で扱えます。たしか。
ただ、使いやすくなったのは Excel2000からです。でもそれ以降、まったくといっていいほど進化していません。たしか。当時は Accessの「クエリ」という機能と、内容がバッティングしていたので、Accessを売るためにあまり力を入れなかったのかもしれません。でも今はもうマイクロソフトさんは Accessを見捨ててると思いますので、もう一回、機能を見直してもいい時期に来ていると思います。「Microsoft Query」は「ピボットテーブル」と併用すると、無駄な関数と無駄なVBAをかなり減らすことができるので、是非、子供さんたちの未来のためにも、「Microsoft Query」の機能強化をしてほしいと思います。「2013や2016のリレーションシップは「Microsoft Query」よりも機能がショボそうに見えるんですが、ショボくなかったとしても、特には必要ないと思います。

「SQL」はLinuxや昔にあったMS-DOS(今だとコマンドプロンプトやPower Shell)のような「文字ベース」の命令・機能・仕組みです。

割と複雑な条件式でも、そこそこ簡単な命令文に変形・置き換えさせることができます。

なので、それによって、かなり柔軟に・強力に、自動集計や自動リストアップができます。

特にビジネス用の定期集計や定型リストアップに限って言えば、VBAプログラミングやネスト(多段化のような感じ)させまくる関数のような難しい命令スタイルを使わなくても、柔軟に・強力に、自動集計や自動リストアップができます。

「SQL」は奥が深すぎて難しい一面もあります。

プロのエンジニアさんじゃないと太刀打ちできないところも実は多いですが、でも、その反面、ど素人の僕たちでもVBAよりは簡単かつ速く、データを取り出せる機能もたくさん・たくさん、用意してくれています。それが便利なのです。

「Microsoft Query」はその「文字ベース」の「SQL」を、「GUIで」操作するための機能です。

そして、Accessの「クエリ」という機能と「一卵性双生児」、というくらい、似ています。(どちらが先か、などは僕は知りません。)

「Microsoft Query」の「リレーション」、は、「SQL」だとちょっとした簡易命令語句を「文字ベースで」書いて「内部結合」をしないといけないところを、GUIで「ドラッグ一発」で「内部結合を完了させる」・・・そういう機能です。2013・2016のリレーションシップ機能、Accessのクエリでのリレーションシップ機能、全部同じです。

これは、Access、ExcelのMycrosoft Query、SQL Server、その他多くのデータベースソフト、でも同じで、ドラッグ操作一発でやれます。

「VLOOKUP関数」でマスタシートの複数の列の値をひっぱってくるときは、そのたびに、数式を対象となる全セルに埋めていかないといけませんが、「Microsoft Query」の「リレーション」の場合は、数千行でも十数列でも、あるいは、数万行でも、ドラッグ一発だけで数式無しで、マスタの値を芋づる式に引っ張ってくることができます。
「VLOOKUP関数」と同じことをするのに、数式が1文字も必要ないのです。引数のことなんて何も覚えなくてもいいのです。引っ張ってきたい列が増えても、ドラッグで列を追加するだけで終わりです。

以上のような理由から、僕の中では、Excelで「VLOOKUP関数」を使う利点が薄れているため、ほとんど、「VLOOKUP関数」を使ったことが無いです。

なので、「VLOOKUP関数」が使われたExcelシートがどこからから送られてくるたびに、いつも四苦八苦しています。
  
  
★ 「Microsoft Query」の「リレーション」のメリット・デメリット
  
  
★ 「VLOOKUP関数」のメリット・デメリット

はっきりいって、メリットを感じませんが、多分、次のようなメリットがあるのではないかと推測されます。

・マスタの表から1行~数十行だけ引っ張ってきたい、1列か2列分だけ引っ張ってきたい、といったような小さな表を扱うときに、もしかしたら、「Microsoft Query」よりも手軽かもしれません。「VLOOKUP関数」の引数と「できることのイメージ・絵図」が頭の中にしっかり入っている人や、大きさ的に小さなものを多く扱う方にとっては、多分ですが、逆に Microsoft Queryのほうが使いにくいと思います。

※後日追記+訂正

エラそうにメリットが無いと書いてしまいましたが、実はとてつもなく大きなメリットがありました。

僕はほんとうに救いようがないバカです。

「VLOOKUP関数」さん、「VLOOKUP関数」を愛する皆さん、本当に申し訳ございませんでした!この場を借りて謝罪致します。

実は、自分が「Excelで本当にできること」のところで、POSレジのコア部分作成のサンプルとして作ったプログラムで使ってました。

・Excel2000で30分で作るバーコードPOSレジのコア部分(定型集計効率化サンプル)ダウンロード
https://euc-access-excel-db.com/tips/ct08_exceltruebasic/ct080101_excel_true_can/excel_pos_n_fmcalc

「商品IDを入力したときに、それに紐付いたアイテム名や価格、などを自動転記するプログラム」で、です。

「VLOOKUP関数」はこういうピンポイントな使い方をするときにとても便利なことをすっかり忘れておりました。(1行分だけをリアルタイムに素早く内部結合するなどのとき。もちろん1セルに「何らかの紐付いたデータ」を表示させたいときとかも。)

こんな重要な箇所で「VLOOKUP関数」を使っていることを忘れていたとは・・・

本当に Excel音痴なこと、「本当は、Excelのことを語るなど言語道断な人間」、ということが露呈してしまいました。(自分で「TPOや機能のコーディネイトバランスが大事」とか、「いらない機能なんてない」とかエラそうなこと言っておきながらこの体たらくです・・・。)

本当にごめんなさい。

数百行~千行を超える複数の表をむすびつけてさらに大きな表を作るときには、ミスや破損を誘発するので あまり 向かないかもしれませんが、ピンポイントで、例えば「商品IDを入力したときに、それに紐付いたアイテム名や価格、などを1行分だけ、ひっぱってくる」という場合には、Microsoft Query よりもはるかに便利です。

VBA上で使う場合は、「VLOOKUP関数」ではなくて、「DAOやADOなどを使って SQLによって1行分のレコードセットとしてひっぱってくる」ということも可能ですが、どちらが使いやすいかは、慣れや好き嫌いの問題だとも思います。(もちろんファイルの構造やご自分たちで決められた仕様などにもよりますが。ただ、「VLOOKUP関数」がDAOやADOよりも手軽であることは間違いないです。)

「VLOOKUP関数」を「WorksheetFunctionプロパティ」と一緒に使えば、とても便利なのは間違いないです。

僕は 他にも、こういう愚かな間違いをしている、過ちを犯している・・・・、と思いますので、僕の話は、話半分で、あくまでもヒント、ということで信じ過ぎずにお読みください。

お若い方々におかれましては、くれぐれも、僕のような決めつけはなされぬよう、ほんとう、、僕のようなバカで程度の低い決めつけ人間、思い込み人間には、なりませぬよう、十分にお気を付けください。

不快な思いをさせてしまい、本当に申し訳ございませんでした。