ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求不同行的快速算法

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-19 08:24 | 显示全部楼层
feto 发表于 2021-11-18 19:26
结果是对的,不过:
按循环看次数并没有少,但结果只能求得一个;有一种情况没有考虑,就是最小值有多个 ...

是的,自己感觉算法还是复杂

TA的精华主题

TA的得分主题

发表于 2021-11-20 10:53 | 显示全部楼层
  1. Sub pey_t()
  2.     Dim ar, k0, br, jg
  3.     k0 = 5 ''参数1
  4.     ar = [b1].Resize(k0, k0)
  5.    
  6.     ReDim br(1 To k0, 0 To k0)
  7.     For i = 1 To k0
  8.         For j = 1 To k0
  9.         If ar(i, j) = "" Then
  10.            br(i, 0) = br(i, 0) + 1
  11.            br(i, br(i, 0)) = j
  12.         End If
  13.         Next
  14.     Next
  15.    
  16.     ReDim jg(1 To k0, 0 To 1)
  17.     i = 1: t = 1 ''i=行号
  18.     Do
  19.         If i = 0 Then MsgBox "无解": Exit Sub
  20.         If i > k0 Then Exit Do

  21.             For j = jg(i, 0) + 1 To br(i, 0)
  22.                 If jg(br(i, j), 1) = 0 Then
  23.                    jg(br(i, j), 1) = 1
  24.                    jg(i, 0) = j
  25.                    t = 1
  26.                    Exit For
  27.                 End If
  28.             Next
  29.             
  30.             If j > br(i, 0) Then
  31.                t = -1
  32.                jg(i, 0) = 0

  33.                   temp = br(i - 1, jg(i - 1, 0))
  34.                   jg(temp, 1) = 0
  35.             End If

  36.         i = i + t
  37.     Loop
  38.    
  39.    For i = 1 To k0
  40.        jg(i, 0) = br(i, jg(i, 0))
  41.    Next
  42.    [a1].Resize(k0, 1) = jg
  43. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2021-11-20 10:54 | 显示全部楼层
数据B列往后 ,结果在A列

不重复行列.rar (12.82 KB, 下载次数: 11)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-11-20 22:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 xueok 于 2021-11-21 10:42 编辑
zopey 发表于 2021-11-20 10:54
数据B列往后 ,结果在A列

这个程序真是惊艳,谢谢zopey,我得消化一下,能否在程序中写下注释,理解起来方便些。br记录空位置与数量,jg先保存序号,最后还原成行号,总体采用回溯。只是为什么要将行列换过来呢?不换不好写代码?

TA的精华主题

TA的得分主题

发表于 2021-11-21 21:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xueok 发表于 2021-11-20 22:42
这个程序真是惊艳,谢谢zopey,我得消化一下,能否在程序中写下注释,理解起来方便些。br记录空位置与数 ...

按你想法,可以对第2段 略作修改,行列转置

ReDim br(1 To k0, 0 To k0)
for j=1 to k0
for i=1 to k0
     if  xxx then br(j,0)=br(j,0)+1

TA的精华主题

TA的得分主题

发表于 2021-11-22 08:34 | 显示全部楼层
参见28L附件4
n取m 自定义函数 随机 组合 排列 分组 分配
https://club.excelhome.net/thread-1526867-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

发表于 2022-4-18 13:39 | 显示全部楼层
求不同行的快速算法.zip (16.15 KB, 下载次数: 1)

练习!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 11:02 , Processed in 0.039955 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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