代码之家  ›  专栏  ›  技术社区  ›  steveybo

Excel多变量查找

  •  1
  • steveybo  · 技术社区  · 8 年前

    有一个表,我想让它根据大小值选择可以使用的最小尺寸的画框, 基本上返回适合图像的最小帧。

    例如,我有4种标准尺寸:

    a       b    c
    Size1   150  150
    Size2   300  300
    Size3   540  570
    Size4   800  800
    

    我希望在另一个单元格中有一个尺寸,例如290 x 300,并希望它选择尽可能适合的最小尺寸,即本例中的尺寸2。

    我遵循了一些指南,如果值是精确的,则会打印出值,但如果值略低于其中一个选项,则不会打印出值

    =VLOOKUP($A$8,CHOOSE({1,2},$B$2:$B$5&", "&$A$2:$A$5,$C$2:$C$5),2,0)
    

    任何直升机/方向都会很受欢迎!

    谢谢

    2 回复  |  直到 8 年前
        1
  •  3
  •   ImaginaryHuman072889    8 年前

    假定订单 做 物质(例如 是 500x550和550x500之间的差异),可以使用以下数组公式:

    = INDEX($A$2:$A$5,MATCH(2,MMULT((E2:F2<=$B$2:$C$5)+0,{1;1}),0))
    

    注意这是一个数组公式,因此必须按 Ctrl键 + 转移 + 进来 输入此公式后,而不是仅按 进来 .

    工作示例见下文。

    enter image description here


    假设订单有 不 物质(例如 不 500x550和550x500之间的差异),由于颠倒了 E2:F2 大堆可能有更好的方法,但这是我能想到的最简单的方法。不幸的是,Excel无法处理3D数组,否则这与上面的原始公式没有太大区别。无论如何,下面是公式(为便于阅读,添加了换行符)

    = INDEX($A$2:$A$5,MIN(MATCH(2,MMULT((E2:F2<=$B$2:$C$5)+0,{1;1}),0),
      MATCH(2,MMULT((INDEX(E2:F2,N(IF({1},MAX(COLUMN(E2:F2))-
      COLUMN(E2:F2)+1)))<=$B$2:$C$5)+0,{1;1}),0)))
    

    注意,这也是一个数组公式。

    请参见下面的工作示例。请注意,它如何在每个单元格(单元格除外)中产生与上述相同的结果 G4 ,再次考虑550x500 和 500x550。

    enter image description here

        2
  •  2
  •   James Hawkins    8 年前

    不清楚单元格A8中有什么。根据您的问题,我假设它必须是“W x H”格式的尺寸(例如:290 x 300)。如果是,请尝试:

    In D2: 1
    
    // Copy next down
    In D3: D2+1
    
    // Wherever you want it
    =CONCATENATE("Size ",MIN(VLOOKUP(LEFT(A8,FIND(" ",A8)-1)+0,B2:D5,3,TRUE),VLOOKUP(RIGHT(A8,LEN(A8)-FIND("x ",A8)-1)+0,C2:D5,2,TRUE)))
    

    或者,如果您将宽度和高度拆分为两个单元格A8和B8,则此更简单的版本应该可以做到:

    In D2: 1
    
    // Copy next down
    In D3: D2+1
    
    //Wherever you want it
    =CONCATENATE("Size ",MIN(VLOOKUP(A8,B2:D5,3,TRUE),VLOOKUP(B8,C2:D5,2,TRUE)))
    

    这些假设大小都使用“Size#”命名约定。否则,您可以在右侧添加另一列,使其等于列A,然后使用vlookup来标识匹配项,如下所示(再次假设单元格A8中的“W x H”):

    In D2: 1
    
    // Copy next down
    In D3: D2+1
    
    // Copy next down
    In E2: =A2
    
    // Wherever you want it
    
    =VLOOKUP(MIN(VLOOKUP(LEFT(A8,FIND(" ",A8)-1)+0,B2:D5,3,TRUE),VLOOKUP(RIGHT(A8,LEN(A8)-FIND("x ",A8)-1)+0,C2:D5,2,TRUE)),D2:E5,2,FALSE)
    
    推荐文章