
記載されている問題でいくつか問題があります: 異なる井戸名を持つ列 A を含むワークシートがあります。2 列目と 3 列目には、地質層の上部と下部の深さと、その層の名前があります。例: Well_XYZ --- 40.02 --- 40.55 --- Layer_NAME
別のワークシートには、別のワークシートの列 A に記載されているように、これらの異なるボーリングホールで採取したサンプルのリストと、特定のサンプル深度が記載されています。例: Sample-XYZ --- 40.34
ここで、各ボーリングホールの深度間隔のサンプル深度を確認するときに、Layer_NAME をサンプル ID シートに追加するために使用できる数式 (EXCEL セルに記述) を知りたいと思います。いくつかの方法 (INDEX/MATCH、VLOOKUP を使用) を試しましたが、どちらも正しく機能しません (または、プログラミング R の「ロジック」によると、「引数が不足している」ため数式が受け入れられません)。
私はこれらの作業を R にアウトソーシングするつもりはなく (まだ)、Excel の知識 (Python や R とは異なる「スキーム」とアプローチを使用) を向上させたいと考えているため、皆さんが私を助けて「Excel 思考」の世界に導いてくれると非常にうれしいです。 :)
事前にどうもありがとうございました!
答え1
実際の XL ファイルをオンラインで投稿して確認すると非常に役立ちますが、次のデータで試してみました。
ああ、それは予想外でした。SU は貼り付けた表を画像に変換しました。よし、それを使用しましょう。
すると、もう 1 つのシートは次のようになります。
式は次のとおりです。
=LOOKUP(B2,Sheet1!B:B, Sheet1!D:D)
これはここから入手しました:https://exceljet.net/formula/lookup-value-between-two-numbers
しかし、これには大きな問題があります。まず、Well は 1 番目のシートの 1 番目の列名であるため、シートに複数のウェルが存在する可能性があると想定する必要があります。それ自体は問題ではありません。問題は、Top 列のデータを並べ替える必要があることです (昇順)。つまり、別のウェルがあり、データは次のようになります。
すると、範囲が重複し(40.34 は 2 つの範囲に該当します)、間違った結果(最後の一致が返されます)になる可能性があります。サンプル ページを変更して、井戸名を別の列として保持できる場合は、それを使用して 1 番目のシートを「フィルター」し、結果に対して上記のルックアップを実行できる可能性があります。これははるかに複雑ですが、間違いなく実行可能です。ここそしてここ。
答え2
質問には詳細がいくつか欠けていると思いますが、サンプル シートには井戸の名前が記載されているはずです。したがって、他の回答を拡張すると、XLOOKUP
井戸の深さのフィルターを使用できます。
=XLOOKUP(H2,FILTER($B$2:$B$5,$A$2:$A$5=$G2),FILTER($D$2:$D$5,$A$2:$A$5=$G2),"",-1,1)
わかりやすくするために、サンプル データを同じシートに配置しました。
1 つ目はFILTER
、列 A が現在の行 (列 G) の井戸名と一致する列 B の値を単純に返すことです。これは 2 つの項目の配列です。これらが検索対象となる{40.02,40.55}
値です。XLOOKUP
2 番目はFILTER
、列 A が現在の行 (ここでも列 G) の井戸名と一致する列 D から値を返すことです。これが 2 つの値です{XYZ_1,XYZ_2}
。これらは、上記の 2 つの数値に対応しています。最初のルックアップ値と一致する場合は、最初のレイヤー名を返し、2 番目のルックアップ値と一致する場合は、2 番目のレイヤー名を返します。
の 4 番目のパラメータは、XLOOKUP
一致するものが見つからない場合に返されるものです。この場合は、空の文字列です。
5 番目のパラメータは、この問題にとって重要なものです。これ-1
は、「完全一致または次に小さい項目」に使用されます。サンプルの任意の値をこのリストと一致させようとすると、ルックアップ配列を検索し、検索している値より大きくない最も近い一致を見つけます。最後のパラメータは、関数に検索方法を指示します。1 がデフォルトなので省略できます。
したがって、上記の 2 つの数値の配列で を検索します40.34
。その値より大きくない最も近い一致を取得するため、40.02
最初の配列項目である を取得します。したがって、レイヤー名を含む 2 番目の配列から最初の配列項目 ( ) を返しますXYZ_1
。
要約すると、フィルターは、異なる井戸の深さが似ている可能性があるという問題を回避するのに役立ち、近似検索は、フィルターされたリストから「最も近い」一致を見つけるのに役立ちます。