ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 项目考勤的随机分配

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-22 11:17 | 显示全部楼层
liulang0808 发表于 2023-5-8 16:18
。。。。。。。。。

版主 ,在实际测试时,  一个人,在二个项目的考勤天数都大于10天时出现,点“按钮”会电脑卡死的情况。还得你出马,抽空帮我看一下。数据在附件.

4项目考勤随机分配.rar

40.73 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-22 16:40 | 显示全部楼层
liulang0808 发表于 2023-5-8 16:18
。。。。。。。。。

版主大神,有空帮忙看一下。谢谢

TA的精华主题

TA的得分主题

发表于 2023-5-23 08:23 | 显示全部楼层
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    If [c2] = 12 Then
        d = 31
    Else
        d = Day(CDate([c1] & "-" & [c2] + 1 & "-1") - 1)
    End If
    [m3:aq4].ClearContents
    [m3:aq4].Interior.ColorIndex = xlNone
    For j = 1 To d
        Cells(3, j + 12) = j
        Cells(4, j + 12) = Format(CDate([c1] & "-" & [c2] & "-" & j), "AAA")
        If Cells(4, j + 12) = "周日" Then Cells(4, j + 12).Interior.ColorIndex = 3
    Next j
   
    y = 12 + d
   
l2:
    ww = 0
    ActiveSheet.UsedRange.Offset(4, 11).ClearContents
    ActiveSheet.UsedRange.Offset(4, 11).Interior.ColorIndex = xlNone
    arr = ActiveSheet.UsedRange
    Set dd = CreateObject("scripting.dictionary")
    For j = 5 To UBound(arr)
        If Len(arr(j, 2)) > 0 Then
            ww = 0
            dd.RemoveAll
            For i = 3 To 9
                If arr(j, i) > 0 Then
                    dd(i) = arr(j, i)
                End If
            Next i
l1:
            If dd.Count > 0 Then
                x = WorksheetFunction.RandBetween(0, dd.Count - 1)
                k = dd.keys()(x)
                zz = dd(k)
                For i = 13 To y Step 3
                    For x = i To y
                        If Len(arr(j, x)) = 0 And arr(4, x) <> "周日" Then
                            If (Cells(j, x - 1) <> Cells(4, k) And WorksheetFunction.CountIf(Cells(j, x + 1).Resize(1, 2), arr(4, k)) <> 2) Or (Cells(j, x + 1) <> Cells(4, k) And WorksheetFunction.CountIf(Cells(j, x - 2).Resize(1, 2), arr(4, k)) <> 2) Then
                                dd(k) = dd(k) - 1
                                arr(j, x) = arr(4, k)
                                Cells(j, x) = arr(4, k)
                                Cells(j, x).Interior.ColorIndex = arr(4, k) + 2
                                If dd(k) = 0 Then
                                    dd.Remove k
                                    GoTo l1
                                End If
                                Exit For
                            End If
                        End If
                    Next x
                Next
                ww = ww + 1
                If ww > 100 Then GoTo l2
                GoTo l1
            End If

        End If
    Next j
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2023-5-23 08:23 | 显示全部楼层

4项目考勤随机分配.zip (156.5 KB, 下载次数: 9)
换了随机思路,供参考

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-23 09:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liulang0808 发表于 2023-5-23 08:23
换了随机思路,供参考

谢谢版主。一个人在同一项目天数大于20天的,会电脑卡死。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-23 09:05 | 显示全部楼层
感谢版主。一个人在同一项目天数大于20天的,会电脑卡死

5项目考勤随机分配.rar

83.72 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2023-5-23 10:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
恒信人才 发表于 2023-5-23 09:05
感谢版主。一个人在同一项目天数大于20天的,会电脑卡死

楼主先按照自己的规范,模拟下这样的数据要怎么去排列?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-23 13:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liulang0808 发表于 2023-5-23 10:14
楼主先按照自己的规范,模拟下这样的数据要怎么去排列?

数据已经模拟。见附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-23 13:02 | 显示全部楼层
数据已经模拟。见附件

5项目考勤随机分配.rar

111.49 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2023-5-23 13:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png
楼主的数据一行中三个相同的可以连续放置吗?
记得之前不可以啊
如果可以随意放置,自己随机处理即可,代码超级简单了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 06:00 , Processed in 0.041128 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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