シート1の列aとシート2の列aを比較し、シートbの対応する値をシート1からシート2の列b(列aの値が一致する)にコピーしようとしています。私はこれを行う方法を読んでいますが、マクロを作成しようとしているのか、それとももっと簡単な方法がありますか、VLOOKUPまたはMATCHですか?しかし、これらの機能がどのように機能するかについてはあまり詳しくありません。
また、違いがある場合は、シート2の列bに値が繰り返されます。
シート1
12AT8001 1
12AT8002 2
12AT8003 3
12AT8004 4
12AT8005 5
12AT8006 6
シート2
12AT8001
12AT8001
12AT8001
12AT8001
12AT8001
12AT8002
12AT8002
12AT8002
12AT8002
12AT8002
12AT8003
12AT8003
12AT8003
12AT8003
12AT8003
Vlookup
は、参照値(列A、シート1)が昇順の場合に適しています。もう1つのオプションは、インデックスと一致です。これらは順序に関係なく使用できます(列a、シート1の値が一意である限り)
これは、シート2の列Bに入力するものです
=INDEX(Sheet1!A$1:B$6,MATCH(A1,Sheet1!A$1:A$6),2)
設定Sheet1!A$1:B$6
およびSheet1!A$1:A$6
名前付き範囲として、ユーザーフレンドリーになります。
Kmcamaraが発見したように、これはまさにVLOOKUPが解決しようとする種類の問題であり、vlookupを使用することは間違いなく最も簡単な代替方法の1つです。
Lookup_valueの3つのパラメーター、検索対象のtable_range、および戻り値のcolumn_indexに加えて、VLOOKUPは、Excelのドキュメントで「range_lookup」と呼ばれるオプションの4番目の引数を取ります。
この引数がTRUE(または1)に設定されているか、省略されている場合、関数が範囲内の最初の列の値の昇順でソートされて、通常理解されるものが返されるようにする必要があります「正しい」値。このデフォルトの動作では、関数は、完全一致が見つかった場合は完全一致に基づいて値を返し、完全一致が見つからなかった場合は近似一致を返します。
一致が近似の場合、関数によって返される値は、lookup_valueより小さい次の最大値に基づきます。たとえば、シート12のテーブルに「12AT8003」がない場合、シート2のその値のルックアップ式は「2」を返します。これは、「12AT8002」がテーブル範囲のルックアップ列の最も小さい値であるためです。 「12AT8003」より。 (VLOOKUPのデフォルトの動作は、たとえば、目標が税率表で税率を調べることである場合に最適です。)
ただし、4番目の引数がFALSE(または0)に設定されている場合、VLOOKUPは完全に一致する場合にのみルックアップ値を返し、ない場合はエラー値#N/Aを返します。一致しないものを正常にキャッチするために、正確なVLOOKUPをIFERROR関数でラップするのが通常の方法です。 IFERRORが導入される前は、VLOOKUP式を使用して、一致があったかどうかを確認するために1回、実際の一致値を返すために1回、IF関数で一致が確認されませんでした。
Deusxmach1naの提案するソリューションは、最初はマスターするのが難しいものでしたが、VLOOKUPの強力な代替セットのバリエーションであり、列またはリストの値を、ルックアップ列の左に返すために使用できます。複数の基準で完全一致が必要な場合、またはORおよび複数の基準間でAND一致条件を組み込むために変更された場合)。
Kcamaraが選択したソリューションを繰り返すと、この問題のVLOOKUP公式は次のようになります。
=VLOOKUP(A1,Sheet1!A$1:B$600,2,FALSE)
真理値表を作成し、SUMPRODUCTを使用して値を取得します。これをSheet2のセルB1にコピーし、必要な範囲までコピーします。=SUMPRODUCT(--($A1 = Sheet1!$A:$A), Sheet1!$B:$B)
真理値表を作成する部分は次のとおりです。--($A1 = Sheet1!$A:$A)
これは、0と1の配列を返します。値が一致する場合は1、一致しない場合は0。その後、その後のコンマは、基本的に「面白い」行列乗算と呼ばれる処理を行い、結果を返します。私はあなたの質問を誤解したかもしれませんが、Sheet1の列Aに重複した値がありますか?