我遇到了如下问题:我有一个工作表,其中 A 列有不同的井名。第二列和第三列中分别包含地质层的顶部和底部深度以及该层的名称。示例:Well_XYZ --- 40.02 --- 40.55 --- Layer_NAME
在另一张工作表中,我列出了从这些不同钻孔采集的样本,如另一张工作表中的 A 列所示,并标明了具体的采样深度。例如:Sample-XYZ --- 40.34
现在,我想知道,在检查每个钻孔深度间隔的样本深度时,我可以使用哪个公式(写在 EXCEL 单元格中)将 Layer_NAME 添加到样本 ID 表中。我尝试了几种方法(使用 INDEX/MATCH、VLOOKUP),但都没有正常工作(或者根据我的编程 R“逻辑”,公式因“缺少参数”而不被接受)。
由于我不想将这些事情外包给 R(暂时),而是提高我的 Excel 知识(与 Python 或 R 一样,它使用不同的“方案”和方法),如果您能在这方面帮助我并向我介绍“excel 思维”的世界,我会非常高兴。:)
提前非常感谢您!
答案1
将实际的 XL 文件发布到网上供大家查看会有很大帮助,但我尝试使用以下数据:
哦,没想到啊,SU 把我粘贴的表格变成了图片,好,就用这个吧。
然后,你的另一张表如下:
公式是:
=LOOKUP(B2,Sheet1!B:B, Sheet1!D:D)
我从这里得到这个:https://exceljet.net/formula/lookup-value-between-two-numbers
但是这样做存在一些大问题!首先,由于 Well 是第一张工作表中的第一列名称,我们必须假设工作表中可以有多个井。这本身不是问题。问题是 Top 列中的数据需要排序(升序)。因此,如果您有另一个井,并且您的数据如下所示:
然后,您就会有重叠的范围(40.34 属于 2 个范围),并且可能会得到错误的结果(您将得到最后一个匹配项)。如果您可以修改示例页面以将井名保留为单独的列,则可能能够使用它来“过滤”第一张表,然后对结果执行上述查找。这要复杂得多,但绝对可行,请参阅这里和这里。
答案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)
为了简单起见,我将样本数据放在同一张表上。
第一个FILTER
只是返回 B 列中的值,其中 A 列与当前行(位于 G 列)上的井名相匹配。这只是一个包含两个项目的数组。这些是将要搜索{40.02,40.55}
的值。XLOOKUP
第二个FILTER
是返回 D 列中的值,其中 A 列与当前行(同样是 G 列)的井名匹配。这是两个值{XYZ_1,XYZ_2}
。它们现在对应于上面列出的两个数值。如果我们与第一个查找值匹配,我们将返回第一个图层名称,如果我们与第二个查找值匹配,我们将返回第二个图层名称。
第四个参数XLOOKUP
是如果找不到匹配项则返回的内容。在我们的例子中,返回一个空字符串。
第五个参数是本问题中最重要的参数。-1
用于“精确匹配或下一个较小的项”。当我们尝试将样本中的任何值与此列表匹配时,我们将搜索查找数组并找到最接近的匹配项,该匹配项不大于我们要搜索的值。最后一个参数告诉函数要搜索的方向。它可以省略,因为 1 是默认值。
因此,我们在上面的两个数字的数组中搜索40.34
。由于我们将获得不大于该值的最接近匹配项,因此我们将获得40.02
,这是第一个数组项。因此,我们将从包含图层名称的第二个数组中返回第一个数组项 - XYZ_1
。
总之,过滤器帮助我们避免不同井可能具有相似深度的问题,而近似查找帮助我们从过滤列表中找到“最接近”的匹配。