表といえばExcel、データといえばExcel、計算といえばExcel。
私とExcelの出会いは、まだMac版しかなかった頃。
時代は昭和で、私もまだ大学生だったころでした。
世間では、Lotus 1-2-3を使っていて、Macが軽自動車と同じ値段のころでした。
 
最初にデモも見せてもらったんですよ。
東京・千駄ヶ谷の鳩の森神社の脇にあった、
HyperDAXという店の店頭マシンで、
今風にいえば「カリスマおねーさん」がおられた。
その華麗なExcelさばきを見て、
Excelこそは「神」に違いないと確信してからのお付き合いです。
(おねーさんのほうじゃねーのかよ、とかいうツッコミはなしで)
 

 
こんなことを語っていると本題にいけないので、
いきなり本題。
 
Excelでデータをつくっておいて、
そのデータを他のワークシートで使いまわししたくなる時ありますよね。
同じデータで同じ並びなら、コピーして貼り付ければいいし、
あるいは、=A5 みたいに参照すればそれで済む。
 
しかし、作っておいた表と、新たにつくる表で、
  データの順番が違う、
  抜けているデータがある、
  何回か同じデータがある、
となると、一気に困ってしまうのです。
コピーでも、=A5 みたいな参照でも、
結局、一行・一行、やるしかなくなってしまうからです。
 
例えば、
  ・住所録(名前、住所、電話番号、メールアドレス)
が既にあるとします。
 
Excelで他の表のデータを引っ張って来たい時・・・ INDEX・MATCH関数がある
 
そこでパーティを企画し、その参加者だけのリストをつくるとしましょう。
参加者リストには、便利のために、電話番号とメールアドレスものせたいとしましょう。
さて、
  ・参加者リスト
に、もう一度、電話番号やメールアドレスを入力しないといけないのでしょうか?
アホらしいです。人数が少なければいいです。しかし、住所録が100名、参加者20名くらいだと、最低でも20回同じ作業が必要です。ミスもします。
 
世界中でこういうこと困っているはずです。
ですから、こういう問題をあっさりと解決する方法(関数)が用意されています。
 
INDEX関数とMATCH関数 です。
 
私は、Excelで表を作るとき、
  ・原則として、1シート、1表
にしています。こうしておくと、作る式が簡単になるからです。
この後の説明は、これを原則にします。
 
ワークシートに、「パーティ」シートと、「住所録」シートがあります。
「パーティ」シートに、パーティの参加者名簿をつくるのが最終目標です。
 
「パーティ」シートは、1行目に
  ・出欠(空欄、当日記入用)
  ・名前
  ・フリガナ
  ・電話番号
  ・メールアドレス
を作っておきます。 
 
Excelで他の表のデータを引っ張って来たい時・・・ INDEX・MATCH関数がある(画像2)
 
作業の目標は、「パーティ」シートで
  「名前」さえ入れれば、
  後のデータは、自動的に「住所録」シートから埋めてくれる
ようにする事です。
 
人が作業するなら、
参加者一人づつ「名前」を見て、
その人の「名前」を「住所録」シートから探し、
その人の「フリガナ」「電話番号」「メールアドレス」をコピーして
「パーティ」シートに貼る、
という作業をします。
しかし、INDEX関数とMATCH関数を使えば、
  この作業は式を書いてコピーする
だけになります。
 
先に結論を書いておくと
  =INDEX(「住所録」シートのデータの列, MATCH(「パーティ」シートの名前のセル, 「住所録」シートの名前の列, 0))
です。この呪文を唱えて、コピーすればいいだけです。
 
それでは、例として、次の表を見てください。「牧野米子」さんの名前を入れてあるので、フリガナ・電話番号・Emailを「住所録」から取ってくることを考えましょう。
 
Excelで他の表のデータを引っ張って来たい時・・・ INDEX・MATCH関数がある(画像3)
 
まず、MATCH関数からです。この関数は、
  ・「パーティ」シートの名前を、「住所録」シートの名前の列から探す
ことをしています。名前を目で追う作業を変わりにやってくれています。
MATCHというのは、近藤正彦(そういう年代なんで)ではなく、「照合」のことです。
上から何番目、という結果が得られます。
この例の場合、「牧野米子」さんの名前を「住所録」シートから探し出すことです。
この例では、上から6番目の行ですね。
 
Excelで他の表のデータを引っ張って来たい時・・・ INDEX・MATCH関数がある(画像4)
 
次に、INDEX関数です。この関数は、
  ・「住所録」シートの該当行のデータを指定行から取ってくる
ことをします。列を決めておけば、その中で指定したデータをとってきてくれます。
指定の仕方は、上から何番目という形でします。
INDEXは、「索引」という意味です。何番目といえば出てくる感じです。
先ほどのMATCHで何番目かが分かっています。
この結果をつかって、「住所録」シートの指定行の上から数え、
この行目のデータを返します。
この例では、6番目が「牧野米子」さんの行でした。
6行目からデータをとってくるのがINDEX関数の役割です。
 
Excelで他の表のデータを引っ張って来たい時・・・ INDEX・MATCH関数がある(画像5)
 
2段階になっているので、ちょっと面倒ですが、やっていることは
  ・MATCH ・・・ データの共通部分をつかって、データの行を特定すること
  ・INDEX ・・・ MATCHの行を使って、指定列からデータを取ってくること
と役割分担しているだけです。組み合わせの順番は、
  =INDEX(「住所録」シートのデータの列, MATCH(「パーティ」シートの名前のセル, 「住所録」シートの名前の列, 0))
と、INDEXが外側で、MATCHが内側です。
 
こんな面倒くさいことしなくても、MATCHだけでいいじゃないかと思いませんか?
私も、かつてそう思いました。
しかし、「同じものを探す」というのなら、確かに、MATCHだけで十分です。
しかし、それでは肝心のデータがとってこれません。
今回の場合なら、「名前」で照合して、「フリガナ」や「電話番号」をとって来たいのでした。
すると、どうやって「フリガナ」や「電話番号」を指定するのかが大問題なのです。
ですから、MATCHは照合するだけ、INDEXは取って来たい部分の指定です。
 
さて、具体的に式はどうなるでしょうか。
 
「牧野米子」さんの「フリガナ」をとってくるには、
  ・「住所録」シートのフリガナの列 ・・・ 「住所録」のC列
  ・「パーティ」シートの名前のセル ・・・ 「パーティ」のB3
  ・「住所録」シートの名前の列 ・・・ 「住所録」のB列
ですから、式はこのようになります。
  =INDEX(住所録!C:C,MATCH(パーティ!B3,住所録!B:B,0))
 
実際には、式は直接書かず、
  =INDEX(
まで入力して、「住所録」シートのC列を選択すると、勝手に、
  =INDEX(住所録!C:C
になります。そこで、「,MATCH(」と入力して、「パーティ」シートのB3を選択すると、
  =INDEX(住所録!C:C,MATCH(パーティ!B3
になります。そこで、「,」と入力して、「住所録」シートのB列を選択、
  =INDEX(住所録!C:C,MATCH(パーティ!B3,住所録!B:B
になります。そこで、最後に「,0))」と入力して「Enter」キーを押すと、
  =INDEX(住所録!C:C,MATCH(パーティ!B3,住所録!B:B,0))
になり、セルには「マキノヨネコ」と表示されているはずです。
 
次の「折笠」さんには、この式を、「パーティ」シートのC4にコピーしてやればいい。
同様に、C5やC6にも、コピーしてやれば大丈夫です。
 
「電話番号」でも、同様です。
 
「牧野」さんの場合、
  ・「住所録」シートの電話番号の列 ・・・ 「住所録」のE列
  ・「パーティ」シートの名前のセル ・・・ 「パーティ」のB3
  ・「住所録」シートの名前の列 ・・・ 「住所録」のB列
ですね。変わったのは、下線部分だけです。
すると、「パーティ」シートのD3に、次の式を
  =INDEX(住所録!E:E,MATCH(パーティ!B3,住所録!B:B,0))
です。これも一つ作れば、D4やD5にも、コピーしてやれば大丈夫です。
 
Emailならどうなるか、わかりますか?
 
対応する行や列は
  ・「住所録」シートのEmailの列 ・・・ 「住所録」のF列
  ・「パーティ」シートの名前のセル ・・・ 「パーティ」のB3
  ・「住所録」シートの名前の列 ・・・ 「住所録」のB列
で、E3に入れる式は、
  =INDEX(住所録!F:F,MATCH(パーティ!B3,住所録!B:B,0))
です。これも一つ作れば、D4やD5にも、コピーしてやれば大丈夫です。
 
こういう風にやると、次の表が作れますね。
 
Excelで他の表のデータを引っ張って来たい時・・・ INDEX・MATCH関数がある(画像6)
 

●「相対参照」と「絶対参照」が分かる場合

「相対参照」と「絶対参照」が分かる方でしたら、
以上の作業はもうちょっと、簡単になります。
御覧のように、作った式の後半部分は一緒ですから、
そこは初めから絶対参照にしておけばいいことになります。
 
最初の「フリガナ」をとってくる式を
  =INDEX(住所録!C:C,MATCH(パーティ!$B3,住所録!$B:$B,0))
と、絶対参照にしておくと、後で式を修正するにしても応用が効きます。
 
私なら、この式をまず作っておいて、この式を、
  D3にはる
すると自動的に式は
  =INDEX(住所録!D:D,MATCH(パーティ!$B3,住所録!$B:$B,0))
に変化しています。このままでは、「住所」をとってきてしまうので、
この式の、「住所録!D:D」を反転させて、
「住所録」シートのE列を選択すると、勝手に、
  =INDEX(住所録!E:E,MATCH(パーティ!$B3,住所録!$B:$B,0))
になるので「Enter」を押す。これで、「電話番号」が表示されました。
次は、この式を、
  E3にはる
すると
すると自動的に式は
  =INDEX(住所録!F:F,MATCH(パーティ!$B3,住所録!$B:$B,0))
に変化しています。メールアドレスが表示されたはずです。
 
あとは、C3からE3を選択して、コピーし、
C4からC5,C6・・・と必要なところまで、選択して、ペーストするだけです。
 

 
さて、「神」Excelとの出会いののち、
わたしは、周りにExcel教を布教することになりました。
ちょうどいいことに、Windows 3.1が登場し、
日本でも、Windows版のExcelが発売されました。
研究室の先生に頼んで、買ってもらったWindows版のExcelは速かったなぁ。
激速でした。
関数を極め、マクロを修め、
小道具をつくったり、ホームページの部品をつくったり、
学位論文を書いたときは、システムをExcel上で組んでしまいました。
その後も、Excel様には頭が上がりません。
「よみがえる日本語」の分詞表も、
ヲシテのデジタルテキストもすべてExcel上です。
 
でもね、Excel 2007 は嫌いだね。
まだまだ、Excel XP(2002) を使っている私なのでした。