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

问题描述:

我在A1中有一个文本,其中包含一个由一些分隔的整数列表非数字字符 - 例如“10,123,230,750,1034,2003,10101”;在B1中,我有一个整数n;我需要一个公式不涉及其它细胞返回:Google电子表格中一个复杂函数的想法,它在一个有序整数列表中找到一个不大于给定值的数字

  • Ñ如果Ñ属于A1中的列表;
  • 否则,如果Ñ不高于A1的最大值,在A1的值更大的立即大于Ñ(例如,用于Ñ = 567返回的值必须是750);
  • 否则,一个错误。

在我看来,解决这个问题的唯一方法是关于正则表达式替换(Google表支持),但是直到现在我还是找不到合理的处理方式。

有人有一个(不同的)想法?

非常感谢

请尝试:

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

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

MATCH(SEARCH_KEY,范围,SEARCH_TYPE)

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

  3. search_type - [可选 - 默认情况下为1] - 搜索的方式。


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

简化的情况下

假设你在下降排序文本的单元格:

enter image description here

的公式是:

=index(SPLIT(A1,", "),MATCH(B1,SPLIT(A1,", "),-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))) 
+0

不错。我忘记了拆分命令。在我离开的时候,我已经生锈了。 –

+0

@JacobEdmond对于GS(至少是我的版本)而言,这是一个+ GS。比Excel 2013更新的版本可能具有该功能,或者它可能是我所看到的作为插件。 – pnuts

+0

pnuts,您的公式很棒,并向我介绍了MATCH功能,由于意大利语中一个非常糟糕的解释Google Sheet的函数参考,对我来说很隐晦。不幸的是,你的公式并不完美,因为“isnumber(find(...)”使小数字混淆。请参阅示例(https://docs.google.com/spreadsheets/d/11iOn9IN8PstA2XhDaIswtoNDmTjonGE30dOI5Djyzdc/edit#gid= 0)我发表了,你的公式在C列。 –