【急】如何编程让excel表格中随机生成整数1并且和为固定值

如上图excel表格所示,我想在A2至E25范围内随机生成整数1,每一列的数字和为最下方26列数字(如第一列和为9,第二列和为5),且每行只有一个数字1。这个可以通过什么excel程序实现吗?求详细代码和步骤

还有缺陷。勉强用吧。若想完美,找VB老师吧。

按F9键随机生成数据。

F2=RAND()

G2RANK(F2,$F$2:$F$25)

两公式下拉至第25行。若为美观计,这部分内容可以隐藏或者字体设为无色。

A2=IF(INDEX({1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0},G2)=1,1,"")

E2=IF(SUM($A2:D2)=1,"",1)

两公式下拉至第25行。

B2=IF(OR(ROUND(RAND()*1,0)=0,SUM($A2:A2)=1),"",1)复制到C2

B3=IF(OR(SUM(B$2:B2)=B$26,SUM($A3:A3)=1,ROUND(RAND()*1,0)),"",1)复制到蓝色区域。

A27=SUM(A2:A25)复制到E列

偶有27数值行不等于26行对应单元格数值的情况,这是不符合要求的,可以用条件格式设置警示。

遇到这种情况,继续按F9键跳过。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-16

做一辅助列,例如F列:

F2=RANDBETWEEN(1,5)

下拉至F25

A2=IF(COLUMN()=$F2,1,"")

右拉至E2

再一起下拉至25行

A26=SUM(A2:A25)

右拉至E26

追问

生成数据随机数据的方法很赞,但是最下面那行数据如果不是后来求和,而是一开始我设定好的,那应该怎么做?

第2个回答  2015-03-17
抽空做了一下,代码如下:
Sub 生成随机数()
Dim lstrow%, lstcol%, arr(), brr(), maxnum%, k%, n%
lstrow = Range("a65536").End(3).Row
lstcol = Range("iv1").End(1).Column
arr = Range("a1").Offset(lstrow - 1, 0).Resize(1, lstcol)
For i = LBound(arr, 2) To UBound(arr, 2)
maxnum = maxnum + arr(1, i)
Next i
ReDim brr(1 To maxnum)
Randomize
For i = 1 To maxnum
brr(i) = i
Next
For i = 1 To maxnum * 100
For k = 0 To maxnum - 1
n = Int(Rnd * (maxnum - k)) + k + 1
t = brr(n): brr(n) = brr(k + 1): brr(k + 1) = t
Next k
Next i
Range("a1").Offset(1, 0).Resize(lstrow - 2, lstcol).ClearContents
t = 0
m = 1
For i = 1 To UBound(arr, 2)
t = t + arr(1, i)
For j = m To t
ActiveSheet.Cells(brr(j) + 1, i) = 1
Next j
m = t + 1
Next i
End Sub
这个代码几乎实现了全自动,你只要在相应的行数内设置数值就可以了,比如最后一行相加是30,那么只要在第32行设置值就可以了,如果最后一行相加是53,那么只在第55行设置就可以了,列数不限。不过在其它单元格内不能有值。
第3个回答  2015-03-16
excel产生随机数帮实现
相似回答