ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 全排列求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-25 12:36 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
要求:数据1的全排列数据与数据2的每一行数据的全排列数据对比,如果数据1某一全排列数据的第一二位之和等于数据2某一全排列数据的第一二位之和相等,且第三四位之和等于数据2某一全排列数据的第三四位之和相等,就将数据2标红!
例:[url=]全排列求助.zip[/url]

全排列求助.zip

18.21 KB, 下载次数: 18

全排列

TA的精华主题

TA的得分主题

发表于 2024-4-25 12:57 | 显示全部楼层
Sub test()
    With ActiveSheet()
        For i = 2 To .Cells(1, 11).End(xlDown).Row
            If .Cells(i, 11) + .Cells(i, 12) = .Cells(2, 3) + .Cells(2, 4) And .Cells(i, 13) + .Cells(i, 14) = .Cells(2, 5) + .Cells(2, 6) Then
                .Range(.Cells(i, 11), .Cells(i, 16)).Interior.Color = RGB(255, 0, 0)
            End If
        Next
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-25 13:24 | 显示全部楼层
longwin 发表于 2024-4-25 12:57
Sub test()
    With ActiveSheet()
        For i = 2 To .Cells(1, 11).End(xlDown).Row

谢谢,可能我的要求没说清楚,是数据1的全排列720中的某个与数据2某行数据的全排列720个中的符合这种规律,就可以标红

TA的精华主题

TA的得分主题

发表于 2024-4-25 15:11 | 显示全部楼层
没有满足条件的记录。

全排列求助.7z

27.51 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-4-25 15:12 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()  '//2024.4.25
  2.     Set d = CreateObject("Scripting.Dictionary")
  3.     Cells.Interior.ColorIndex = 0
  4.     arr = [c2:h2]
  5.     s1 = arr(1, 1) + arr(1, 2)
  6.     s2 = arr(1, 3) + arr(1, 4)
  7.     s = s1 & "|" & s2
  8.     d(s) = ""
  9.     r = Cells(Rows.Count, "k").End(3).Row
  10.     arr = Range("k1:p" & r)
  11.     For i = 2 To UBound(arr)
  12.         s1 = arr(i, 1) + arr(i, 2)
  13.         s2 = arr(i, 3) + arr(i, 4)
  14.         s = s1 & "|" & s2
  15.         If d.exists(s) Then
  16.             Cells(i, "k").Resize(1, 6).Interior.ColorIndex = 3
  17.         End If
  18.     Next
  19.     MsgBox "OK!"
  20. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2024-4-25 15:41 | 显示全部楼层
JSA参与下,感觉满足条件的还挺多的
  1. function test(){
  2.         let karr=Range("c2:h2").Value2[0];
  3.         carr=myplzh(karr,"排列",karr.length,karr.length);
  4.         let arr=Range("k2:p393").Value2;
  5.         arr.forEach((x,i)=>{
  6.                 let temp=myplzh(x,"排列",x.length,x.length);
  7.                 if (new Set(carr.concat(temp)).size<carr.length+temp.length){
  8.                         Cells.Item(i+2,11).Resize(1,karr.length).Interior.Color=255;
  9.                 }
  10.                
  11.         });
  12. }

  13. function myplzh(szarr,type,m,n){
  14.         if (m<n) return;
  15.         szarr=szarr.slice(0,m);
  16.         let obj={},temp=new Array(n).fill(null);
  17.         let h=0;                                        //h:统计递归所在的层数,不超过最底层(n-1)
  18.         function getplzh(k){                //k:递归循环的起始位置
  19.                 for (let i=k;i<m;i++){
  20.                         if (temp.includes(szarr[i])) continue;                //统计不重复值
  21.                         temp[h]=szarr[i];
  22.                         if (temp[n-1]!=null) obj[`${temp[0]+temp[1]},${temp[2]+temp[3]}`]=null;
  23.                         if (h<n-1){                                        //判断是否到达底层(n-1),未达到则继续往下一层递归
  24.                                 h++;                                        //层数递增
  25.                                 getplzh(type=="组合"?i+1:0);                //递归,如果是组合,起始位置从i+1开始,否则从0开始
  26.                         }
  27.                 }
  28.                 temp[h]=null;                //退出本层之前,将元素位置置空(null)
  29.                 h--;                                //循环结束,退回到递归的上一层
  30.         }
  31.         getplzh(0);
  32.         return Object.keys(obj);
  33. }
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-25 15:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件请用WPS测试

全排列求助.zip

24.48 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-4-25 15:47 | 显示全部楼层
1we123 发表于 2024-4-25 13:24
谢谢,可能我的要求没说清楚,是数据1的全排列720中的某个与数据2某行数据的全排列720个中的符合这种规律 ...

1、把数据1的720种排列,第1位和第2位之和、第3位和第4位之和组合成一个字符,生成字典的键,假设叫数组A;
2、把数据2每一行的720种排列,第1位和第2位之和、第3位和第4位之和组合成一个字符,生成字典的键,假设叫数组B;
3、数组A和数组B合并去重,得到数组C;
如果数组C的元素个数,小于数组A和数组B的元素个数和,则表示数组2的那行数据是符合要求的。

TA的精华主题

TA的得分主题

发表于 2024-4-25 16:41 | 显示全部楼层
Sub pl()
    arr = ThisWorkbook.Sheets("Sheet1").Range("C2:H2")
    arr2 = sz(arr)
   
    For p = 2 To ThisWorkbook.Sheets("Sheet1").Cells(1, 11).End(xlDown).Row
   
    brr = ThisWorkbook.Sheets("Sheet1").Range("K" & p & ":P" & p)
   
    brr2 = sz(brr)
   
    For i = 1 To 90
        For j = 1 To 90
            If arr2(i, 1) = brr2(j, 1) And arr2(i, 2) = brr2(j, 2) Then
                ThisWorkbook.Sheets("Sheet1").Range("K" & p & ":P" & p).Interior.Color = RGB(255, 0, 0)
                ThisWorkbook.Sheets("Sheet1").Range("Q" & p) = arr2(i, 3)
                ThisWorkbook.Sheets("Sheet1").Range("R" & p) = brr2(j, 3)
                Exit For
            End If
        Next
    Next
Next
   
    MsgBox "判断完毕!"
   
   
   
   
   
   
End Sub
Function sz(arr) As Variant
    Dim qzrr(1 To 90, 1 To 3)
    n = 1
    '6选2,剩余4中再选2
    For i = 1 To 5
        For j = i + 1 To 6
            ss = arr(1, i) & "|" & arr(1, j)
            qz1 = arr(1, i) + arr(1, j)
            
            '取剩余4个
            For k = 1 To 6
                If k <> i And k <> j Then
                    pp = pp & "|" & arr(1, k)
                End If
            Next
            
            brr = Split(pp, "|")
            
            '剩余4个里面选2个
            For p1 = 1 To 3
                For p2 = p1 + 1 To 4
                    ppp = brr(p1) & "|" & brr(p2)
                    
                    qz2 = CInt(brr(p1)) + CInt(brr(p2))
                    qzrr(n, 1) = qz1
                    qzrr(n, 2) = qz2
                    
                    qzrr(n, 3) = ss & "|" & ppp
                    
                    n = n + 1
                    pp = ""
                    ppp = ""
                    
                Next
            Next
        Next
    Next
    sz = qzrr
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

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

本版积分规则

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

GMT+8, 2024-5-5 04:18 , Processed in 0.040907 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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