エクセル関数超技
VLOOKUPを他の関数でやる方法

Excel関数の解説、関数サンプルと高等テクニック
最終更新日:2013-06-09

VLOOKUPを他の関数でやる方法


VLOOKUPは便利な関数ですが、以下のような問題点がある場合は、これを使うことができません


問題点
1.検索列より左側の列を取り出す場合
2.検索値が255文字を超える時

そこで、他の関数で、これを実現する方法を検討します。

方法1
=INDEX(範囲,MATCH(検索値,検索範囲,0),列番号)

方法2
{=IF(MIN(IF(検索範囲=検索値,ROW(検索範囲)-1))=0,"検索値なし",INDEX(範囲,MIN(IF(検索範囲=検索値,ROW(検索範囲)-1)),列番号))}
{}は配列数式です、Ctrl+Shift+Enterで入力します。
以下の表で検証します。

Excel VBA 解説


A2、A5、D2には、256文字以上が入力されています

E2
=VLOOKUP(D2,$A$2:$B$7,2,FALSE)


F2
=INDEX($A$2:$B$7,MATCH(D2,$A$2:$A$7,0),2)


G2
=IF(MIN(IF($A$2:$A$7=D2,ROW($A$2:$A$7)-1))=0,"検索値なし",INDEX($A$2:$B$7,MIN(IF($A$2:$A$7=D2,ROW($A$2:$A$7)-1)),2))

Ctrl+Shit+Enterで、{}配列数式での入力になります

この結果が上図になります。しかし、それぞれに長短があります。

方法1
範囲と検索範囲が別々に指定できるので、問題点1.は解決します。
しかし、問題点2.は、依然として解決されていません。

方法2
範囲と検索範囲が別々に指定できるので、問題点1.は解決します。
問題点2.もIFの配列を使う事で解決しています。

ただし、式がかなり複雑です。
外側のIFで、存在確認をせずに、
{=INDEX($A$2:$B$7,MIN(IF($A$2:$A$7=D2,ROW($A$2:$A$7)-1)),2)}
としてしまうと、検索値が無い場合には、先頭行が返されてしまいます。
また、完全一致以外の検索方法が指定できません。

問題点1のみなら方法1、問題点2なら方法2を使えば良いでしょう。



同じテーマ「エクセル関数超技」の記事

複数条件で検索し、複数データを取得する方法

各種条件でデータを絞る場合は、オートフィルタが一般的に使用されますが、元のデータがあるシートで作業する為、間違ってデータを消してしまったり、使用する上で制約があります。また、VLOOKUPでは、単一条件のみであり、しかも1件しか取得できません。
関数で銀行型丸め(最近接偶数への丸め)を行う方法
エクセルの関数で、ROUNDは四捨五入です。しかし、VBAでのRoundは、銀行型丸め(最近接偶数への丸め)で、Accessも銀行型丸めとなっています。四捨五入では、どうしても大きくなる傾向があるようです。
関数で他シートへ並べ替える方法(サンプル:ABC分析)
通常、並べ替えは元データが変更されれば、毎回、並べ替えを行う必要がありますが、, これが、結構面倒な場合もあります。出来れば、マクロを組みたいところですが、マクロはちょっとと言う人もいるでしょう。そこで、関数で他シートへ並べ替える方法です。
VLOOKUPを他の関数でやる方法
誕生日一覧から、指定誕生月の人を全員取り出す
配列数式を使って、誕生日が指定月の該当者全員を取り出します。各種条件でデータを絞る場合は、オートフィルタが一般的に使用されますが、日付の中の、月だけの指定になると、お手上げです。(出来ない事はありませんが、かなり面倒です。
徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)
検索されるキーワードで最も多いのが、MATCH関数 INDEX関数セル範囲から、指定された行と列が交差する位置にあるセルの参照を返します。INDEX関数の書式INDEX(範囲,行番号[,列番号])範囲セル範囲を指定します。セル範囲が1行または1列である場合、行番号または列番号はそれぞれ省略することができます。
セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)
数式の参照範囲を可変対応させます、つまり、入力データにより自動で拡張・縮小されるように関数を設定します。エクセルの表には、集計等の計算式を入れますが、その集計範囲は固定になっているため、データの追加時には、計算範囲外になってしまったりするので注意が必要になります。
グラフのデータ範囲を可変にする
データの範囲に合わせて、自動的にグラフのデータ範囲が変更されるようにします。グラフのデータ個数が増えるたびに、「データの選択」(2003は元データ)を変更するのは、いかにも面倒です。できれば、マクロでやりたいところですが、マクロはちょっという人用に解説します。
セルの個数を数える関数
セルの個数を数える関数を解説します COUNT関数 COUNTA関数 COUNTBLANK関数 COUNTIF関数 になります。以下の表で説明します。COUNT関数 これは、数値のみカウントします。セルの書式や、先頭に「'」等があっても数値ならカウントされます。
【奥義】大量データでの高速VLOOKUP
大量データからのVLOOKUPを大量行に設定すると再計算がなかなか終わらなくなります… そんな経験したことがある人は、少なからずいると思います、そんな場合に、高速にVLOOKUPを実行する方法です。以下の表で説明します。※Sheet1は、A列で昇順に並び変えておきます。
数値を時刻に変換
数値(例えば930)を、時刻・時間(9:30)に変換する方法です ・900→9:00 ・1230→12:30 このように、単なる数値を時刻・時間に変換します。以下、A1セルに数値が入っているとします。数値を時刻に変換:方法1 TIME関数を使います。


新着記事NEW ・・・新着記事一覧を見る

トランザクション処理|SQL入門(12月11日)
インデックスを作成して高速化(CREATE INDEX)|SQL入門(12月9日)
他のテーブルのデータで追加/更新/削除|SQL入門(12月8日)
データの削除(DELETE)|SQL入門(12月7日)
データの更新(UPDATE)|SQL入門(12月6日)
複数のSELECT結果を統合(UNION,UNION ALL)|SQL入門(12月5日)
テーブルを結合して取得(INNER JOIN,OUTER JOIN)|SQL入門(12月4日)
データベースの正規化とマスタの作成|SQL入門(12月3日)
データベースにおけるNULLの扱い方|SQL入門(12月2日)
オブジェクト変数とは何か|VBA技術解説(12月2日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • VLOOKUPを他の関数でやる方法

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
    掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ