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)
- SEARCH_KEY - 要搜索的值。例如,42,“猫”或 I24。
范围 - 要搜索的一维数组。如果使用高度和宽度都大于1的范围,则MATCH将返回#N/A !.
search_type - [可选 - 默认情况下为1] - 搜索的方式。
- 1,默认情况下,会导致MATCH假定的范围内按升序排序,并返回最大值小于或等于
SEARCH_KEY。- 0表示完全匹配,并且在范围未排序的情况下是必需的。
- -1导致MATCH假定范围按降序排序并返回大于或等于search_key的最小值。
简化的情况下
假设你在下降排序文本的单元格:
的公式是:
=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)))
不错。我忘记了拆分命令。在我离开的时候,我已经生锈了。 –
@JacobEdmond对于GS(至少是我的版本)而言,这是一个+ GS。比Excel 2013更新的版本可能具有该功能,或者它可能是我所看到的作为插件。 – pnuts
pnuts,您的公式很棒,并向我介绍了MATCH功能,由于意大利语中一个非常糟糕的解释Google Sheet的函数参考,对我来说很隐晦。不幸的是,你的公式并不完美,因为“isnumber(find(...)”使小数字混淆。请参阅示例(https://docs.google.com/spreadsheets/d/11iOn9IN8PstA2XhDaIswtoNDmTjonGE30dOI5Djyzdc/edit#gid= 0)我发表了,你的公式在C列。 –