Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
123
返回列表 发新帖
楼主: 陈丹青

[已解决]分班技术问题

[复制链接]
 楼主| 发表于 2014-4-23 10:41 | 显示全部楼层
分开排合理一点,我暂时还不知,要问问里面的大师
回复

使用道具 举报

发表于 2014-4-23 10:50 | 显示全部楼层
回复

使用道具 举报

发表于 2014-4-26 15:33 | 显示全部楼层
回复

使用道具 举报

发表于 2014-4-28 14:45 | 显示全部楼层
请老师出手解决此问题,多谢。
回复

使用道具 举报

 楼主| 发表于 2014-4-28 17:12 | 显示全部楼层
搞定
    Range("i2").Select
    Range("A1:j" & [B65536].End(3).Row).Sort Key1:=Range("B2"), Order1:=xlDescending, Key2:= _
        Range("C2"), Order2:=xlDescending, Header:=xlGuess
        
    Range("D2:D" & [D65536].End(3).Row).ClearContents         'M列到有数据的行内容清除
     Range("D1") = "班"
    Dim mm As Long
    On Error Resume Next
    mm = InputBox("请你输入要分几班:", "班别数目提示息,请输入正整数", "0")
    If mm <= 0 Then
        MsgBox "班别数目不符合要求"
        Exit Sub
    End If

    Dim arr, j, s, a As Long
    j = Range("B:B").Find("女", , , , , xlPrevious).Row ' Cells(Rows.Count, 2).End(xlUp).Row '第二列有数据的行
    arr = Range("a2:D" & j).Value           '选择A2到K最后
    For i = 1 To UBound(arr) Step mm * 2
        For j = 1 To mm
            arr(i + j - 1, 4) = j                 '写到4列
            arr(i + j + mm - 1, 4) = mm - j + 1    '写到4列
            
        Next
    Next
    Range("a2").Resize(UBound(arr), UBound(arr, 2)).Value = arr
   
     a = Application.WorksheetFunction.CountIf(Range("B1:B65536"), "女") + 1
    j = Range("B:B").Find("男", , , , , xlPrevious).Row ' Cells(Rows.Count, 2).End(xlUp).Row '第二列有数据的行
    arr = Range("a2:D" & j).Value           '选择A2到K最后
    For i = a To UBound(arr) Step mm * 2
        For j = 1 To mm
            arr(i + j + mm - 1, 4) = j               '写到4列
            arr(i + j - 1, 4) = mm - j + 1    '写到4列
            
        Next
    Next
    Range("a2").Resize(UBound(arr), UBound(arr, 2)).Value = arr
回复

使用道具 举报

发表于 2014-4-29 08:14 | 显示全部楼层
陈丹青 发表于 2014-4-28 17:12
搞定
    Range("i2").Select
    Range("A1:j" & .End(3).Row).Sort Key1:=Range("B2"), Order1:=xlDesc ...

陈丹青老师:非常多谢你在百忙之中抽时间为我解决一大难题,多谢、多谢。
回复

使用道具 举报

 楼主| 发表于 2014-4-29 10:23 | 显示全部楼层
Sub 定班() '先女后男,女先升后降,男先降后升,平均分较均匀
    Range("i2").Select
    Range("A1:j" & [B65536].End(3).Row).Sort Key1:=Range("B2"), Order1:=xlDescending, Key2:= _
        Range("C2"), Order2:=xlDescending, Header:=xlGuess
        
     Range("D1") = "班"
    Dim mm As Long
    On Error Resume Next
    mm = InputBox("请你输入要分几班:", "班别数目提示息,请输入正整数", "0")
    If mm <= 0 Then
        MsgBox "班别数目不符合要求"
        Exit Sub
    End If

    Dim arr, j, s, a As Long
    j = Range("B:B").Find("女", , , , , xlPrevious).Row ' Cells(Rows.Count, 2).End(xlUp).Row '第二列有数据的行
    Range("D2:D" & [d65536].End(3).Row).ClearContents         'M列到有数据的行内容清除
    arr = Range("a2:D" & j).Value           '选择A2到K最后
    For i = 1 To UBound(arr) Step mm * 2
        For j = 1 To mm
            arr(i + j - 1, 4) = j                 '写到4列
            arr(i + j + mm - 1, 4) = mm - j + 1    '写到4列
            
        Next
    Next
    Range("a2").Resize(UBound(arr), UBound(arr, 2)).Value = arr
   
     a = Application.WorksheetFunction.CountIf(Range("B1:B65536"), "女") + 1
    j = Range("B:B").Find("男", , , , , xlPrevious).Row ' Cells(Rows.Count, 2).End(xlUp).Row '第二列有数据的行
    arr = Range("a2:D" & j).Value           '选择A2到K最后
    For i = a To UBound(arr) Step mm * 2
        For j = 1 To mm
            arr(i + j + mm - 1, 4) = j               '写到4列
            arr(i + j - 1, 4) = mm - j + 1    '写到4列
            
        Next
    Next
    Range("a2").Resize(UBound(arr), UBound(arr, 2)).Value = arr

End Sub

评分

参与人数 1 +1 收起 理由
dyzx + 1

查看全部评分

回复

使用道具 举报

发表于 2014-4-29 14:23 | 显示全部楼层
陈丹青 发表于 2014-4-29 10:23
Sub 定班() '先女后男,女先升后降,男先降后升,平均分较均匀
    Range("i2").Select
    Range("A1:j" ...

多谢陈老师
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 17:43 , Processed in 0.354065 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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