ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2776|回复: 28

[求助] 请帮助完善未解决问题:纵向对齐的相邻数字不重复。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-4-17 12:30 | 显示全部楼层 |阅读模式
样本如下 抽取纵向相邻数不同.rar (18.16 KB, 下载次数: 54) 横向不重复数字能解决,但希望每下一行新抽取的数字,和对齐的同列相邻数字不同。而且能使首位数字不抽到0.请高手支招指点!!谢谢!!目前偶尔出现这种84和64重复现象。 对齐数字重复.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-19 07:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这是就是产生横向和纵向相邻数都不重复的0-9.如何能控制?同时控制数字0不在第一位和第六位出现。应该不难吧!!高手给说说。

TA的精华主题

TA的得分主题

发表于 2015-4-19 16:24 | 显示全部楼层
rand+rank能产生不重复数字,不过这是全自由度的随机,不可能接受你的约束!
要换思路才行,简单的公式绕不过去的!
不是回了贴吗?

TA的精华主题

TA的得分主题

发表于 2015-4-19 16:34 | 显示全部楼层
而且有逻辑漏洞,如果数字0不在第1位和第6位出现,但0必须出现10位数的其他数位,否则就有重复数字了,这种情况是选择9位数,还是让0现身他位?

TA的精华主题

TA的得分主题

发表于 2015-4-20 08:27 | 显示全部楼层
本帖最后由 wangjguo44 于 2015-4-20 11:43 编辑

做了一个,因限制条件所致,在不同单元格(区域)公式要不同,附件用不同填充颜色加以区别。
由于是随机产生数,为了避免出现类似下面这种现象
0        1        2        3        4        5        6        7        8        9
1        2        3        4        5        6        7        8        0        
(即上下两行前9列已经出现相同的9个数,这时下行第10个只能与上行第10个数相同,但这样又是与规则相悖),所以附件第9列自第2行开始,还另写公式,如果前8列还未出现上行第10列的数字,强制让它等于上行第10列的值。

附件P:AB是检验辅助区(可删除):P:Y判断上下行是否不同,Z:AA判断第一个位置和第六个位置是否不是0,AB列判断一行中是不是全取0~9十个数。
原附件F2=LARGE(IF((COUNTIF($A2:E2,ROW($1:$9))=0)*(F1<>ROW($1:$9)),ROW($1:$9)),RANDBETWEEN(1,8-MAX(COLUMN(E:E))+AND(COUNTIF(G1:$J1,$A2:E2)=0)))红色部分会留下漏洞而致使可能出现错误信息,8楼已改,请下载8楼附件。(下面附件也已改)

EH(Wjg)c.zip (15.57 KB, 下载次数: 36)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-20 09:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wangjguo44 发表于 2015-4-20 08:27
做了一个,因限制条件所致,在不同单元格(区域)公式要不同,附件用不同填充颜色加以区别。
由于是随机产 ...

谢谢老师这么细致的回复和指点!!我初学函数,有不懂的地方再向老师请教!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-20 09:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-20 10:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ljpmqb888 发表于 2015-4-20 09:19
谢谢老师这么细致的回复和指点!!我初学函数,有不懂的地方再向老师请教!!

公式含义简单介绍一下:
1、A1=RANDBETWEEN(1,9)——随机产生1~9(不含0)之间的随机数;
2、A2=LARGE(IF(A1<>ROW($1:$9),ROW($1:$9)),RANDBETWEEN(1,8))(下拉)——随机产生1~9中不等于A1(上一行)已出现的8个数中任一个数;
3、B1=LARGE(IF(COUNTIF($A1:A1,ROW($1:$10)-1),,ROW($1:$10)-1),RANDBETWEEN(1,10-MAX(COLUMN(A:A))))(右拖)——随机产生1~10中不等于$A1:A1(左面)已出现的随机数,右拖一列,左面多了一个,取数范围少一个(1~10-COLUMN(A:A))
4、F1=LARGE(IF(COUNTIF($A1:E1,ROW($1:$9)),,ROW($1:$9)),RANDBETWEEN(1,9-MAX(COLUMN(E:E))))(第六个数要求不为0)——与A1类似,产生不包括左面已有的1~9中间的随机数;
5、B2=LARGE(IF((COUNTIF($A2:A2,ROW($1:$10)-1)=0)*(B1<>ROW($1:$10)-1),ROW($1:$10)-1),RANDBETWEEN(1,9-MAX(COLUMN(A:A))+COUNTIF($A2:A2,B1)))(右拖下拉)——其中(COUNTIF($A2:A2,ROW($1:$10)-1)=0)满足条件左面已出现的不再出现,(B1<>ROW($1:$10)-1)满足上行已经出现的不再出现,9-MAX(COLUMN(A:A))除了A2和B2,余下只有8个数可选(右拖一列少一个),但是若$A2:A2中含有B1值,选择个数可以多一个,所以再+COUNTIF($A2:A2,B1);
6、F2=LARGE(IF((COUNTIF($A2:E2,ROW($1:$9))=0)*(F1<>ROW($1:$9)),ROW($1:$9)),RANDBETWEEN(1,8-MAX(COLUMN(E:E))+AND(COUNTIF(G1:$J1,$A2:E2)=0)))(下拉)——原理以上类似,改成F6=LARGE(IF((COUNTIF($A2:E2,ROW($1:$9))=0)*(F1<>ROW($1:$9)),ROW($1:$9)),RANDBETWEEN(1,3+COUNTIF(A2:E2,F1)))(下拉),更容易理解(1~9 九个数中左面5个,上面1个排除掉后只有3个可选,但是在面5个中已经包含上面一个,则可增加一个可选。7、I2=IF(COUNTIF(A2:H2,J1),LARGE(IF((COUNTIF($A2:H2,ROW($1:$10)-1)=0)*(I1<>ROW($1:$10)-1),ROW($1:$10)-1),RANDBETWEEN(1,9-MAX(COLUMN(H:H))+COUNTIF($A2:H2,I1))),J1)(下拉)——除了增加前面判断外,其余与B2相同,前面的判断是,如果左面8个数中还不包含上一行最后一列的数,则本单元格强制让它等于上一行最后一列的数。(这是为了避免随机长生的最后一个数与上一行最后一个相同,以防与规则相悖而出错)
8、J2=MAX(IF((COUNTIF($A2:I2,ROW($1:$10)-1)=0)*(J1<>ROW($1:$10)-1),ROW($1:$10)-1))(下拉)——没得选,0~9十个数中左面已产生9个,余下唯一一个。改成=MAX(IF((COUNTIF($A2:I2,ROW($1:$10)-1)=0),ROW($1:$10)-1))更简(不必再考虑与上行不同)
9、上面除了1、和8、以外,公式的主体是=LARGE(IF(条件),数值数组),RANDBETWEEN(1,最多个数))——这是随机不重复的典型结构公式,RANDBETWEEN(1,最多个数)产生一个随机整数n,在数值数组取第n大的数。随着条件的变化,将不符合条件的数值置零,并确定数值数组中最多可取个数。


下面附件,是F2和J2用上面6、和8、修改简化后的公式。


EH(Wjg)c.zip (15.58 KB, 下载次数: 42)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-20 11:07 | 显示全部楼层
效果非常好,已经成功。我向下填充了30行,满足我制作的需要。仅存一个小问题:就是偶尔在刷新后出现乱码,不成立的时候。能不能做个按钮,点击刷新(相当于F9,但能够识别出不成立的情况并自动再次刷新,直至成立为止)。用宏还是用什么其他办法都行。

TA的精华主题

TA的得分主题

发表于 2015-4-20 11:30 | 显示全部楼层
ljpmqb888 发表于 2015-4-20 11:07
效果非常好,已经成功。我向下填充了30行,满足我制作的需要。仅存一个小问题:就是偶尔在刷新后出现乱码, ...

有乱码吗?——我用8楼的附件(我这里5楼的已被8楼的附件覆盖),结果区拉到100行,在显示屏可视的范围里按了几百次F9键,没有乱码——从理论上说也应该是没有乱码的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 11:15 , Processed in 0.043704 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表