2016-05-07 13 views
0

EXCELでMATCH関数のようなものを使用したいのですが、複数の行と列を含むテーブルの値を調べたいだけです。この関数は、見つかった値の列を返します。ここでEXCELで複数の行にMATCHを使用するにはどうすればよいですか?

は、より良い理解のための画像です:

セルK6で

ExampleExcel

値が "チキン" です。私はA1:G9の範囲のテーブルで「チキン」を探したい。私はその後、テーブルA1:G9の "チキン"に関連する値であるので、セルM6の値を "Protein Source"に設定します。 現在、M6には論理値 "TRUE"があります。なぜなら、COUNTIFを使用して、 "Chicken"がA1:G9にあるかどうかを確認したからです。しかし、私はM6に値 "Protein Source"を得る方法を知らない。

複数の行/列を検索する必要がなければ、MATCHは少なくとも列/行番号を検索します。しかし、MATCH DOEは複数の行/列を受け入れません。

+1

参照テーブルにも一意のデータが必要です。あなたは2回豆乳を持っています。ありがたいことに同じ列の下の両方で、しかしそれが異なる列にあった場合、どの列が正しい答えになるかをどのように決定するのですか? –

+0

@Forward Ed:大豆ミルクは2度誤ってエラーになりました。ありがとう、私は第2の豆乳を取り除いた! –

+0

@ForwardEd - 地獄に希望がなかったので、私はそのサンプルデータを画像から再入力しようとしていましたが、私は実際にその重複を逃しました! – Jeeped

答えて

3
=INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$9)*($A$2:$G$9=K3))) 

次のことができるようにすべきである鶏の横にM3中と場所それをコピーしてください。

謝罪だから、私はあなたがあなたの質問のタイトルごとにMATCHと望んで行うことができませんでした。しかし、私はあなたのアイテムがで発見された列番号を返すことができ、この方程式の主要な注意点は、あなたがA2で探しているものは何でもということです。G9範囲は1度だけ表示することができます!何度も表示される場合は、エラーがなくても方程式があなたを爆破させたり、間違った列を返すことがあります。

通常、インデックスとマッチは本当にうまく機能します。あなたはしようとしていた基本的に実行します。私はだから何

=Index (header row, MATCH(Item I am looking for, Table of stuff)) 

はSUMPRODUCTとその思考のマッチ部分を置き換えた:

SUMPRODUCT(COLUMN($A$2:$G$9)*($A$2:$G$9=K3)) 

基本的には列が列番号を返しますされて起こるために何が起こっているか、我々計算の1つのインスタンスを探していて、計算の途中で次の列番号を指定します。その列番号が何であっても、偽の場合は0、真の場合は1の論理ステートメントが乗算されます。だから私たちが探しているものを持っていない列番号は0に等しく、1を掛けたので、探している列番号だけが返されます。

あなたが鶏を持っているなら落とし穴です2回以上列番号を取得すると、それらは一緒に追加されます。たとえば、6桁目に2回ある豆乳は、6 + 6 = 12という値を返します。問題は12桁ありません。私たちはエラーを受け取ります。さらに、バナナを2回持っていたら、1 + 1 = 2となり、野菜の2列目のヘッダーが返されます。

Proof of concept

あなたは式にいくつかのIFERRORとERROR.TYPEを使用することができますチェックし、いくつかの潜在的なエラーを実装する場合。列番号に重複をキャッチしません。

=IFERROR(INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$8)*($A$2:$G$8=K3))),IF(ERROR.TYPE(INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$8)*($A$2:$G$8=K3))))=3,"NOT FOUND","MULTIPLE ENTRIES")) 

をそして結果はこのような何かに見える:あなたのテーブルではなかった場合は、サイドノートでは

enter image description here

SIDE注

を次のように何かをする羽目になるだろう列Aでは、最初の列からマジックナンバーを引いた数が1になるような列の式から数を減算する必要があります。そうしないと、よりダイナミックにすることができません。 :

+3

明らかにゾンビフレンドリーなメニューではありません(ただし、「脳の不足」から他の意味を推測するかもしれません)。 – Jeeped

+0

ありがとう!あなたの詳細な説明に感謝し、数式を理解するために多くの助けをしました:) –

+0

ゾンビに入れないXD – findwindow

0

これについての最良の方法の1つは、検索方法のタイプとしてLinqを使用することです。

開始するには素晴らしいリンクです!

別の方法は、遅い厄介なプロセスであり、手動で行とセルをループし、値を比較します。

私は、あなたはおそらく、あなたの質問のためにまっすぐに答えを望んでいた知っているが、私はあなたがやるときれいと一緒に簡単にそれを維持したいもののためにLINQを使用することにより、より利益を得るであろうと思います。

「LINQ for Excelを使用する」というGoogleの簡単な検索では、多くの方向性があります。

例リンク:データ検索のためのExcelにExcel 2007でLINQを使用して

https://msdn.microsoft.com/en-us/library/dd920313(v=office.12).aspx

ビデオLINQの https://www.youtube.com/watch?v=_4aNwh7pRxo

+1

リンクのみの回答は、[SO](http://stackoverflow.com/tour)で一般的に尋ねられます。記事の内容を含む物語を提供し、補助的な情報を指すためにリンクを使用する。 – Jeeped

3
SUMPRODUCT((COLUMN($A$2:$G$9)-COLUMN($A$2)+1)*($A$2:$G$9=K3)) 

MATCH functionsの系列から、その列番号を受信INDEX/MATCH関数ペアは行の限られた数があり提供標準式ベースのソリューションに適してもよいです。 が見つからない場合は、次のMATCH文に制御を渡して各行を調べます。標準式としてM6で

=INDEX(A$2:G$2, IFERROR(MATCH(K6, A$3:G$3, 0), IFERROR(MATCH(K6, A$4:G$4, 0), 
       IFERROR(MATCH(K6, A$5:G$5, 0), IFERROR(MATCH(K6, A$6:G$6, 0), 
       IFERROR(MATCH(K6, A$7:G$7, 0), IFERROR(MATCH(K6, A$8:G$8, 0), 
       IFERROR(MATCH(K6, A$9:G$9, 0), MATCH(K6, A$10:G$10, 0))))))))) 

iferror_index_match

この方法は、あなたのサンプルデータに適したようだが、明らかに食品のデータの行数が拡大するような制限があります。実際には、行3:9ではなく列A:Gをカバーするのが適切な場合もあります。

+0

3つのリンク。 3つの脚注の機会が無駄になりました。 – findwindow

関連する問題