web-dev-qa-db-ja.com

複数の列を持つvlookup

B:B列に次の数式があります

=VLOOKUP(A1;'mySheet'!$A:$B;2;FALSE)

MySheet!B:Bで見つかった値をB:Bに出力します(A:A = mySheet!A:A)。正常に動作します。さて、3列目もお願いします。 C:C列全体に次の数式を追加すると機能します。

=VLOOKUP(A1;'mySheet'!$A:$C;3;FALSE)

ただし、10万行を超える行と約40列を使用しています。 100k * 40 * VLOOKUPを実行したくありません。100kのみを実行し、これにすべての列を掛ける必要はありません。必要なすべての列を取得するために、行ごとに1回だけVLOOKUPを実行する方法(おそらく配列式を使用)はありますか?


データ例

ID|Name
-------
 1|AB
 2|CB
 3|DF
 4|EF

ID|Column 1|Column 2
--------------------
 1|somedata|whatever1
 4|somedate|whatever2
 3|somedaty|whatever3

入手したい:

ID|Name|Column 1|Column 2
-------------------------
 1|AB  |somedata|whatever1
 2|CB  |        |
 3|DF  |somedaty|whatever2
 4|EF  |somedate|whatever3
6
dnLL

INDEXはVLOOKUPよりも高速に動作します。これを使用することをお勧めします。これにより、多くのvlookupがシステムに与える負担が軽減されます。

まず、MATCHを使用してヘルパー列で必要なものを含む行を見つけます。

=MATCH(A1,'mySheet'!$A:$A,0)

次に、その番号を使用してINDEXを作成します。これをドラッグして、すべての列に次のデータを入力できます。

=INDEX('mySheet'!B:B,$B1)

出力は次のようになります。

ID|Name|Match |Column 1 |Column 2
-------------------------
 1|AB  |Match1|IndexCol1|IndexCol2
 2|CD  |Match2|IndexCol1|IndexCol2
 3|EF  |Match3|IndexCol1|IndexCol2

また!これらの範囲を設定して、列全体を参照するのではなく、実際にデータをカバーすることをお勧めします。

=INDEX('mySheet'!B1:B100000,$B1)
3
Aaron Contreras

私はあなたの問題についてもっと考えていました、そしてあなたが調べているデータを制御しているなら、あなたが試すことができる別の提案があります。

生データが保持されている 'mysheet'で、各列を1つのセルに連結する新しい列を追加します。データに含まれていないある種の一意の仕切りを使用します。

_=B1&"+"&C1&"+"&D1&"+"&E1 etc...
_

次に、行ごとに、40ではなく1つのVLOOKUPまたはINDEX/MATCHを実行できます。

新しいシートに入れたら、結果を分割して戻すことができます。


数式なしの分割

ルックアップ式の結果をコピーして、次の列にValuesとして貼り付けます。

その列を選択し、リボンのDataタブでText to Columnsを選択します。

Delimitedのままにして、Nextを押します。 Tabのチェックを外し、Otherをチェックし、デリミタ(例では+)を入力します。

完了をクリックします。


数式で分割

=FIND()を使用して各デリミタを見つけ、=MID()を使用して、前のデリミタをStart_numとして、デリミタの各セット間のテキストを引き出します。

間違いなく、2つの方法のより複雑な。

2
Aaron Contreras

私が正しく理解しているなら、まず始めに=VLOOKUP(A1;'mySheet'!$A:LastColumn;COLUMN(B1);FALSE)を使用することになります。このように、Vlookupを右にドラッグすると、列参照が移動します。

1
114

数式なし、出力なし。したがって、1つの列のみに数式を適用して他の列に適用する方法はありません。他の実行可能な方法は、1つのセルにi数式を置き、$記号をインテリジェントに使用し、vlookupを40回置く必要なしにgiffyですべてのセルをドラッグすることです。

Vlookupには入力する4つのコードがあります

1-ルックアップ値。これを使って $A1(1ではなくAに$を置く)

2-ソースデータ-Put $サインeverywhere

-列インデックス番号。データ全体のすぐ上の1行目に、空の行を追加します。A1に1、B1に2、C1に3というように値を入力します。今度は数式で、手動で「2」または「3」を入力する代わりに、これらのセルへの参照を指定します。列ではなく数値(B$1)。

4-タイプfalseまたは0

次に、これをどこにでもドラッグします。

0
Rahul Shah
  1. 参照値。この$ A1を使用(1ではなくAに$を置く)
  2. ソースデータ-どこにでも$記号を付ける
  3. 列インデックス番号。データをプルする必要がある場所の列名を使用するだけです(たとえば、ルックアップ値が列Aにあり、列Bからの値が必要な場合はCOLUMN(B1))。
  4. falseまたは0と入力します
0
user6920348