公式该如何写呢,请大神解答解答

如题所述


如图,起始公式=IF(ROW(A1)<1000,TEXT(ROW(A1)-1,"000"),""),公式下拉,一直拉到不出现数字为止。

追问

并不一定全部是0-9,有可能排除几个数(例如1.3.5.7.8.9一一进行排列),这样的话有办法解决吗

追答


如图,起始公式=SMALL(IF(MMULT(--ISNUMBER(FIND(MID(ROW($111:$999),{1,2,3},1),13579)),{1;1;1})=3,ROW($111:$999)),ROW(A1)),公式输完后按CTRL+SFHIT+ENTER结束。公式下拉,直到出现错误值。

追问

要根据A列的数据随之变化,难就难在并不是固定的值

追答


起始公式=RIGHT(SMALL(IF(MMULT(--ISNUMBER(FIND(MID(ROW($1000:$1999),{2,3,4},1),$A$1&$A$2&$A$3&$A$4&$A$5&$A$6&$A$7&$A$8&$A$9&$A$10)),{1;1;1})=3,ROW($1000:$1999)),ROW(A1)),3),公式输完后按CTRL+SHIFT+ENTER结束。下拉,直到出错。

追问

能解释下公式的意思吗,你太有才了

追答

ROW($1000:$1999)这个的后三位是所有0~9的数的三位数排列组合,然后FIND是找每位数是否在A列的数据中,MMULT返回3的话表示3个数都在A列,这就是你要的数,通过IF将这些数提出来,然后从小到大排列到单元格中。

追问

如果把结果分别放在3列中(例结果是2,3,5则2放在B列3放在C列5放在D列),有办法实现吗

追答

=mid(SMALL(IF(MMULT(--ISNUMBER(FIND(MID(ROW($1000:$1999),{2,3,4},1),$A$1&$A$2&$A$3&$A$4&$A$5&$A$6&$A$7&$A$8&$A$9&$A$10)),{1;1;1})=3,ROW($1000:$1999)),ROW(A1)),column(b1),1),公式输完后按CTRL+SHIFT+ENTER结束,公式右拉,下拉。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-20
任取3个数字进行排列组合的话有两种情况:
1、可以重复取值,比如111或222,共有10*10*10=1000中组合
a.在任意单元格内输入=IF(ROW(A1)>1000,"",TEXT(ROW(A1)-1,"000"))
然后往下复制1000行
b.实实在在的排列:=OFFSET(A$1,INT(ROW(A100)/100)-1,)&OFFSET(A$1,MOD(INT(ROW(A10)/10)-1,10),)&OFFSET(A$1,MOD(ROW(A10),10),)
向下复制1000行,

2、不可以重复取值,这种情况只能用excel的VBA来实现,代码如下:
Sub ss()
Dim MyArray(1000) As Integer
Dim a, b, c, d, e As Long
d = 0
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
If a <> b And b <> c And a <> c Then
MyArray(d) = a * 100 + b * 10 + c
d = d + 1
e = d
End If
Next
Next
Next
For i = 0 To e
Cells(i + 1, 2) = MyArray(i)
Next
End Sub追问

并不一定全部是0-9,有可能排除几个数(例如1.3.5.7.8.9一一进行排列),这样的话有办法解决吗

追答

任意单元格输入:=OFFSET(A$1,INT(ROW(A100)/100)-1,)&OFFSET(A$1,MOD(INT(ROW(A10)/10)-1,10),)&OFFSET(A$1,MOD(ROW(A10),10),)
向下复制1000行,

追问

开始几个数正确,后面就不行了,哪里出现错误了呢

追答

要学会改公式哦:
=OFFSET(A$1,INT(ROW(A100)/100)-1,)&OFFSET(A$1,MOD(INT(ROW(A10)/10)-1,10),)&OFFSET(A$1,MOD(ROW(A10),10),)
这个是10个数字适用,你现在只有4个数字,要改参数为:
=OFFSET(A$1,INT(ROW(A16)/16)-1,)&OFFSET(A$1,MOD(INT(ROW(A4)/4)-1,4),)&OFFSET(A$1,MOD(ROW(A4),4),)

而且这时候的组合为4*4*4=64个,

追问

能不能写个通用的公式,要不频繁使用光改公式也很麻烦,还有我在评论里发了一组通用公式你看看能改一改吗

追答

通用的公式:
=IF(ROW(A129)>COUNTA(A:A)^3,"",OFFSET(A$1,INT((ROW(A129)-1+COUNTA(A:A)^2)/(COUNTA(A:A)^2))-1,)&OFFSET(A$1,MOD(INT((ROW(A129)-1+COUNTA(A:A))/COUNTA(A:A))-1,COUNTA(A:A)),)&OFFSET(A$1,MOD(ROW(A129)-1+COUNTA(A:A),COUNTA(A:A)),))

追问

显示的是空白,帮忙再给整整,拜托了

追答

在试试
=IF(ROW(A1)>COUNTA(A:A)^3,"",OFFSET(A$1,INT((ROW(A1)-1+COUNTA(A:A)^2)/(COUNTA(A:A)^2))-1,)&OFFSET(A$1,MOD(INT((ROW(A1)-1+COUNTA(A:A))/COUNTA(A:A))-1,COUNTA(A:A)),)&OFFSET(A$1,MOD(ROW(A1)-1+COUNTA(A:A),COUNTA(A:A)),))

追问

太佩服你了,能解释下公式的意思吗,也好学习一下非常感谢

追答

counta(a:a) 统计A列有几个数
offset(a$1,,)百度一些,一句话说不清,就是相对A1单元格下移,右移得到新的单元格的值
int()取证,结合除法,得到重复输出连续相同数字的目的,比如int(row(a4)/4)就会显示1、1、1、1、2、2、2、2、3、3、3、3
mod() 取余,即两个数相除的余数,得到循环数,比如:mod(row(4)/4),0、1、2、3、0、1、2、3、0……
row()单元格的行号,比如row(a4)=4 row(a1)=1

本回答被提问者采纳
第2个回答  2016-12-20
这个要有=PERMUT(10,3)=720种排列追问

要一一列举出来,包括重合数(例111,222等),有办法解决吗

追答

感觉hlhcygs的回答能符合你的要求
相当于0到999之间的数 全部按3位显示

追问

并不一定全部是0-9,有可能排除几个数(例如1.3.5.7.8.9一一进行排列),这样的话有办法解决吗

追答

数字不重复的有720种排列,重复的有1000种排列

第3个回答  2016-12-20
=int(rand()*900)+100
相似回答