你好,你在“EXCEL判断一个数的合数单双”里的回答我很感兴趣,对于你的公式我不大理解,望赐教!

对于多位数,你的公式很通用,但不知思路是怎么样的,特别是这一句“ROW(INDIRECT("1:" & LEN(A1)))”是什么意思?好象结果都是1,但直接改成1对于结果又不对,能请你说一说吗?

=IF(MOD(SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1)),2),"单","双")

ROW(INDIRECT("1:" & LEN(A1))) 是生成一个1到数字长度的数组,例如数组是1234,就是4位
用indirect直接引用 1:4这4行,然后用row转换成数组{1,2,3,4}
总的思路是将1234,按照位置去取第1,2,3,4位,转换成数值进行求和
将结果对2求模,双数是0,单数是1;1在逻辑值中是true,就是和是单数。来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-27
ROW(INDIRECT("1:" & LEN(A1)))
如果A1中的字符是1位数,上式在整个公式中的结果就是1。
如果A1中的字符是2位数,上式在整个公式中的结果就是1;2。
如果A1中的字符是3位数,上式在整个公式中的结果就是1;2;3。
如果A1中的字符是4位数,上式在整个公式中的结果就是1;2;3;4。
依此类推
你可以在A1中输入不同位数的数值,调出"公式审核"中的"公式求值",看结果的变化。追问

谢谢,受教了!EXCEL函数这水很深啊,我原以为已快能潜到底了,但现在才看到还有更深的沟啊!

第2个回答  2014-02-27
A1中的文本长度(位数)是一个固定的值,比如A1如果内容是32323,则它的长度是5位。
在某些计算中可能需要用到循环,从1到5依次运算。
如果是编程,可以用for...next来实现,但在表格里用函数怎么办呢?
这时候,通常就用row()函数搭配数组函数,来实现1,2,3,4,5这5个不同值的依次运算。
这个原理是这样的:row(1:5)本身是指第1到第5行这个范围,但在数组公式中,则是返回{1,2,3,4,5}这样一个数组,然后根据公式其他部分多次运算。
比如{=sum(row(1:5))}的结果就是=sum(1,2,3,4,5)=1+2+3+4+5=15,而{=average(row(1:5))}=average(1,2,3,4,5)=3.
注意,数组公式的意思是,输入完公式后,不是直接回车,而是同时按下Ctrl+Alt+回车,来进行公式输入。你说“好象结果都是1”,这很可能是你没有正确输入数组公式。ROW(INDIRECT("1:" & LEN(A1)))返回的应该是一个从1到n的数组。追问

谢谢,受教了!你的回答真是让我大开眼界,原来函数还能这样用!
这个问题我原是让网友“善良的猪头3”来回答的,没想到还有你这么精僻的答案!
问题有时真是不辨不明,一辨真是醍醐灌顶!谢谢你传给了我十年的功力,我的武功大涨啦!!!

追答

不用数组公式的话,求合数的单双还可以用这个普通公式:
=IF(MOD(LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,2,""),4,""),6,""),8,""),0,"")),2),"单","双")
原理是:
双数无论有几个,其和必然为双数。所以求合数的奇偶的运算中没有意义,舍弃不要。
现在剩下的都是单数。
单数个单数的和必然是单数,双数个单数的和必然是双数。
所以直接求位数单双即可。
假设有数 123456804321,去除双数剩下 13531,位数为5个是单数,所以合数为单数。

第3个回答  2014-02-27
Indirect公式是吧一个字符串转换成excel可以识别的位置表达方式,比如你有个字符串A1在B1单元格里,你想通过公式返回B1单元格里面字符串对应的单元格的内容,excel没办法把字符串A1识别成单元格A1,则可以通过=indirect(B1)或者=indirect("A1")。
上面的公式具体对应的什么不知道,但是应该是通过indirect映射一个行范围,比如=indirect("1:3")表示第一行到第三行
Row表示范围里面第一行的行标追问

他的回答里,公式是“=IF(MOD(SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:" & LEN(A1))),1)),2),"单","双")”,在单元格A1里输入任意数字就能得到正确结果。
我不明白的是用“ROW(INDIRECT("1:" & LEN(A1)))”有什么用?结果都是1,但你直接把这段改为1,整个公式的结果又不对了。

相似回答