ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

查找不同项

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-6 09:37 | 显示全部楼层 |阅读模式
本帖最后由 buciyuan 于 2024-4-6 11:34 编辑

image.png sheet2中有一列循环数据,现在需要查找到这组循环数据中 欠缺了的数据,自己编写了一个程序没有调试成功,请各位大神指点一二,谢谢!

6位数,最大数=6,全排列时有46656个,但sheet2中只有46628,还差28个全排列的数,现在想把这个28个数找出来

查找不同项.rar

213.51 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
查找的例子:
2024-4-6查找.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:35 | 显示全部楼层
感觉没完全明白楼主说的意思,猜一个吧。

查找不同项.7z

208.46 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:35 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()  '//2024.4.6
  2.     Application.ScreenUpdating = False
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     Set List = CreateObject("System.Collections.ArrayList")
  5.     With Sheets("Sheet2")
  6.         r = .Cells(Rows.Count, 1).End(3).Row
  7.         arr = .[a1].Resize(r, 1)
  8.     End With
  9.     For i = 1 To UBound(arr)
  10.         S = arr(i, 1)
  11.         d(S) = ""
  12.         If Not List.Contains(S) Then List.Add S
  13.     Next
  14.     List.Sort
  15.     brr = List.toArray
  16.     ReDim zrr(1 To 1000000, 1 To 1)
  17.     On Error Resume Next
  18.     r1 = brr(LBound(brr))
  19.     r2 = brr(UBound(brr))
  20.     m = 0
  21.     For i = r1 To r2 Step 1
  22.         If Not d.exists(i) Then
  23.             m = m + 1
  24.             zrr(m, 1) = i
  25.         End If
  26.     Next
  27.     With Sheets("Sheet1")
  28.         .Columns(1) = ""
  29.         .[a1].Resize(m, 1) = zrr
  30.     End With
  31.     Application.ScreenUpdating = True
  32.     MsgBox "OK!"
  33. End Sub

复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 10:50 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-6 11:34 | 显示全部楼层
6位数,最大数=6,全排列时有46656个,但sheet2中只有46628,还差28个全排列的数,现在想把这个28个数找出来

TA的精华主题

TA的得分主题

发表于 2024-4-6 12:44 | 显示全部楼层
你这个应该是笛卡尔组合。。。

TA的精华主题

TA的得分主题

发表于 2024-4-6 12:48 | 显示全部楼层
Option Explicit
Sub test2()
    Dim ar, cr, dr, er, dic As Object
    Dim i&, j&, r&, m&, n&
   
    ReDim cr(1 To 6, 1 To 6)

    For j = 1 To 6
        For i = 1 To 6
            cr(i, j) = i
        Next i
    Next j

    m = UBound(cr): n = UBound(cr, 2)
    ReDim dr(1 To n)
    ReDim er(1 To m ^ n)

    Call cartesianProductDG1(cr, dr, er) ', r)
    cr = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
    ReDim dr(1 To UBound(er), 0)
   
    Set dic = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(cr)
        dic(CStr(cr(i, 1))) = Empty
    Next i
    For i = 1 To UBound(er)
        If Not dic.exists(er(i)) Then
            r = r + 1
            dr(r, 0) = er(i)
        End If
    Next i
   
    Columns("E").Clear
    [E1].Resize(r) = dr
End Sub

Function cartesianProductDG1(ByVal ar, ByVal br, ByRef vResult, _
    Optional ByRef iGroup&, Optional ByVal n& = 1)
    Dim i&, j&

    For i = 1 To UBound(ar)
        br(n) = ar(i, n)
        If n = UBound(ar, 2) Then
            iGroup = iGroup + 1
            vResult(iGroup) = Join(br, "")
        Else
            cartesianProductDG1 ar, br, vResult, iGroup, n + 1
        End If
    Next
End Function



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-6 12:50 | 显示全部楼层
请参考附件。。。

查找不同项.rar

210.61 KB, 下载次数: 13

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-6 13:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:40 , Processed in 0.053740 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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