一个复杂函数的想法,它在排序的整数列表中找到一个不大于给定值的数字

时间:2017-07-31 19:35:58

标签: google-sheets google-sheets-formula

我在A1中有一个文本,其中包含一个由一些非数字字符分隔的整数(最终反转)整数列表 - 例如“10,123,230,750,1034,2003,10101”;在B1中我有一个整数 n ;我需要一个不涉及其他单元格的公式返回:

  • n 如果 n 属于A1中的列表;
  • 否则,如果 n 不大于A1中的最大值,则A1中的值会立即大于 n (例如, n > = 567返回值必须为750);
  • 否则,出错。

在我看来,解决问题的唯一方法是关于regexp替换(Google Sheet支持),但到目前为止我找不到合理的方法继续进行。

有人有(不同的)想法吗?

2 个答案:

答案 0 :(得分:1)

请尝试:

=if(isnumber(find(B1,A1)),B1,index(split(A1,","),match(B1,split(A1,","),1)+1))

以上不适用于低于第一个的数字,但如果需要可以扩展为:

=if(B1<1*left(A1,find(",",A1)-1),1*left(A1,find(",",A1)-1),if(isnumber(find(B1,A1)),B1,index(split(A1,","),match(B1,split(A1,","),1)+1)))

答案 1 :(得分:1)

请尝试:

=index(SORT(TRANSPOSE(SPLIT(A1,", ")),1,0), MATCH(B1,SORT(TRANSPOSE(SPLIT(A1,", ")),1,0),-1))

在此公式中我使用search_type = -1表示match function

  

MATCH(search_key,range,search_type)

     
      
  1. search_key - 要搜索的值。例如,42,“猫”,或   I24。
  2.   
  3. range - 要搜索的一维数组。如果使用高度和宽度均大于1的范围,则MATCH将返回#N / A!

  4.   
  5. search_type - [可选 - 默认为1] - 以何种方式   搜索范围。

  6.               
        
    • 1,默认值,导致MATCH假设范围按升序排序并返回小于或等于
      的最大值   SEARCH_KEY。
    •   
    • 0表示完全匹配,在范围未排序的情况下是必需的。
    •   
    • -1会导致MATCH假设范围按降序排序并返回大于或等于search_key的最小值。
    •   

简化案例

假设您有一个文本按降序排序的单元格:

enter image description here

公式为:

=index(SPLIT(A1,", "),MATCH(B1,SPLIT(A1,", "),-1))