Sub musub()
Dim caseArray(3) As String
caseArray(0) = "A"
caseArray(1) = "B"
caseArray(2) = "C"
caseArray(3) = "D"
Dim rowNum As Integer
For i = 1 To 4
For j = 1 To 4
For k = 1 To 4
For l = 1 To 4
rowNum = rowNum + 1
Cells(rowNum, 1) = "情形" & CStr(rowNum)
Cells(rowNum, 2) = caseArray(i - 1)
Cells(rowNum, 3) = caseArray(j - 1)
Cells(rowNum, 4) = caseArray(k - 1)
Cells(rowNum, 5) = caseArray(l - 1)
Next l
Next k
Next j
Next i
End Sub
山桑公的思路很精典,在此基础上,根据东家发问,对山公的公式作如下修改:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SMALL(IF(MMULT(--ISNUMBER(FIND({1,2,3,4},ROW(1234:4321))),{1;1;1;1})=4,ROW(1234:4321)),COLUMN(A1)),1,$A$1),2,$B$1),3,$C$1),4,$D$1)
在公式编辑栏,按ctrl+shift+Enter 组合键确定。
这样,A1:D1就可以填写任意字符了。
说明:如果A1:D1中放置的字符包含1、2、3、4中的一个或多个,这时要注意了,他们不能放在比他自身小的位置,例如:如果4个字符中含有2,那么2就不能放在第1位(即2不能放在A1单元格),如果含有3,那么3就不能放在A1、B1单元格,4只能放在D1单元格里了。这样的话,公式测试通过。(即1、2、3、4不能往前挤,其他字符没有限制)
=PERMUT(4,4)
应该是有24种排列。
如果A1:D1四个单元格中均为1位数字,可以在E1输入公式:
=SMALL(IF(ISNUMBER(FIND($A$1,ROW($1000:$9999))*FIND($B$1,ROW($1000:$9999))*FIND($C$1,ROW($1000:$9999))*FIND($D$1,ROW($1000:$9999))),ROW($1000:$9999),10000),COLUMN(A1))
公式以CTRL+SHIFT+ENTER三键结束。
将公式向右复制。
E1中输入
=SMALL(IF(MMULT(--ISNUMBER(FIND($A1:$D1,ROW($1:$9999))),{1;1;1;1})=4,ROW($1:$9999)),COLUMN(A1))
同时按下CTRL+SHIFT+回车,输入数组公式,右拉。
应有24个排列吧。
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321
补充:4个单元格中存在N位 字母+数字组合是什么意思
可以不用公式搞定?