【问题标题】:How to return an offset Value - Vlookup如何返回偏移值 - Vlookup
【发布时间】:2014-03-07 15:57:09
【问题描述】:

我正在生成一份报告,但我遇到了一些需要从报告中提取的值。我试图结合使用 Vlookup 和 Hlookup,但我无法让它工作。

所以我需要将 2 列的值拉回 Signon 值,然后根据第一列中的值引用该值 (1234569) .

非常感谢任何帮助

1234569 |   John    |   Smith   |   
        |           |           |   
From    |     To    |   Dur.    |   Activity
9:00    |   9:01    |   0:01    |   Open
9:01    |   9:14    |   0:13    |   Signon

【问题讨论】:

  • 您的数据格式是否始终相同?具体来说,'1234569' 是否总是在 'Signon' 左侧 4 行和 3 列?
  • 不,有时“Signon”值会进一步下降,反之亦然

标签: excel vlookup


【解决方案1】:

(在 Excel 2010 上测试)

=INDEX(OFFSET(INDEX($A:$D,MATCH($F$2,$A:$A,0),0),0,0,5,4),MATCH("Signon",$D:$D,0),MATCH("To",$3:$3,0))

假设:

  • 列表项编号 (1234569) 在 A 列中
  • $F$2 包含您要搜索的记录编号
  • “Signon”是您正在搜索的“活动”行,位于 D 列中
  • “To”是您要搜索的列。
    • 3:3 中的列标题在整个工作表中保持不变
  • 每条“记录”高 5 行,宽 4 列

从这里开始,您应该能够破译公式并根据需要进行调整。 VLOOKUP/HLOOKUP 非常有限...通常最好多花一点时间来使用 INDEX/MATCH 在工作表中的其他位置定位数据。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    更大的问题是您正在使用 MATCH INDEX、VLOOKUP 等查找函数,而报表不是很好的表格数据形式。

    如果您能够在原始报告旁边添加一些额外的列,我建议您尝试以下方法:

    关键是您需要某种方式在原始报告中标记新的“记录”。我猜测 A 列中出现“From”的唯一时间是表示新记录,但您可能需要不同的公式来获取 F 列的 ID。

    那么你的公式就变成了一个简单的=VLOOKUP("1234569Signon",$G:$H,2,false)

    【讨论】:

      【解决方案3】:

      所以你想要像=sign_off_time(1234569) 这样返回9:14 的东西吗?这种事情很容易。但具体的实现很大程度上取决于您希望在哪里读取这些数据,以及工作表的其余结构是什么样的。

      基本上,我认为您遇到的基本问题是VLOOKUP() 需要索引位于查找数组的第一列,然后只能找到索引右侧的值。解决方案是使用INDEX()MATCH() 的组合,而不是VLOOKUP()Here's a nice write up of how to use INDEX/MATCH and a comparison of this with VLOOKUP.

      编辑:好的,你准备好了吗?我们开始吧……如果 Sheet1 看起来像这样:

      1234569 |John   Smith   
      
      From    To  Dur.    Activity
      9:00    9:01    0:01    Open
      8:55    10:15   1:20    Activity3
      6:55    8:19    1:24    Activity4
      9:01    9:14    0:13    Signon
      
      4657915 Jane    Doe 
      
      From    To  Dur.    Activity
      8:55    10:15   1:20    Open
      6:55    16:33   9:38    Activity4
      11:55   15:42   3:47    Signon
      
      8461224 Bob Dulluth 
      (etc)
      

      然后这将在 Sheet2(或任何地方,真的)中工作。它找到查找 ID 的行(例如,1234569),然后在该行下方找到第一个出现的“Signon”(无论其下方有多远),然后从该行查找第二列(注销时间)。如果一个人的记录没有“登录”活动,这中断,它将从下一个人那里找到“登录”。

      =INDEX(Sheet1!C2,MATCH("Signon",INDIRECT("Sheet1!R"&TEXT(MATCH(Sheet2!RC1,Sheet1!C1,0),"@")&"C4:R"&TEXT(ROWS(C3),"@")&"C4",FALSE),0)+MATCH(Sheet2!RC1,Sheet1!C1,0)-1)

      公式中的引用 Sheet2!RC1 是查找 ID,因此请根据需要进行更改。

      【讨论】:

      • 其余数据的格式类似,但我所追求的值与我需要参考的值并不总是在同一行,但让我看看在链接上,谢谢!
      猜你喜欢
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多