Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2731|回复: 5

[已解决]设置人数分组

[复制链接]
发表于 2014-3-26 23:06 | 显示全部楼层 |阅读模式
本帖最后由 电子表 于 2014-3-26 23:14 编辑

Private Sub CommandButton1_Click()
Dim dInput As Double
    Dim r As Integer
     r = Sheet2.Range("B65536").End(xlUp).Row
    For i = 3 To r
a = Sheet2.Cells(i, 3).Value
x = Application.InputBox(Prompt:="请设置分组人数:", Type:=1)
C = a Mod x
c1 = Application.InputBox(Prompt:="请设置最大余数:", Type:=1)
If x > a Then
Sheet2.Cells(i, 5) = Int(a / x) + 1
ElseIf x <= a And c1 <= C Then
Sheet2.Cells(i, 5) = Int(a / x)
Else
Sheet2.Cells(i, 5) = Int(a / x) + 1
End If
Next i
End Sub
分组问题.rar (25.02 KB, 下载次数: 10)
发表于 2014-3-27 11:06 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.     Dim dInput As Double
  3.     Dim r As Integer
  4.     With ActiveSheet
  5.         r = .Range("B65536").End(xlUp).Row
  6.         x = Application.InputBox(Prompt:="请设置分组人数:", Type:=1)
  7.         c1 = Application.InputBox(Prompt:="请设置最大余数:", Type:=1)
  8.         For i = 3 To r
  9.             a = .Cells(i, 3).Value
  10.             If a <= x Then
  11.                 fz = 1
  12.             Else
  13.                 c = a Mod x
  14.                 If c >= c1 Then fz = Int(a / x) + 1 Else fz = Int(a / x)
  15.             End If
  16.             .Cells(i, 5) = fz
  17.         Next i
  18.     End With
  19. End Sub

复制代码
回复

使用道具 举报

发表于 2014-3-27 11:14 | 显示全部楼层
按你要求第14句c>=c1改成c>c1。另外最接近你原来代码的改法如下 :
  1. Private Sub CommandButton1_Click()
  2.     Dim dInput As Double
  3.     Dim r As Integer
  4.     r = Sheet1.Range("B65536").End(xlUp).Row
  5.     x = Application.InputBox(Prompt:="请设置分组人数:", Type:=1)
  6.     c1 = Application.InputBox(Prompt:="请设置最大余数:", Type:=1)
  7.     For i = 3 To r
  8.         a = Sheet1.Cells(i, 3).Value
  9.         C = a Mod x
  10.         If x > a Then
  11.             Sheet1.Cells(i, 5) = Int(a / x) + 1
  12.         ElseIf x <= a And c1 >= C Then
  13.             Sheet1.Cells(i, 5) = Int(a / x)
  14.         Else
  15.             Sheet1.Cells(i, 5) = Int(a / x) + 1
  16.         End If
  17.     Next i
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2014-3-27 11:16 | 显示全部楼层
你原来代码有三个主要错误:
1、sheet1写成了sheet2
2、把设置分组人数和最大余数放到了循环中
3、条件判断ElseIf x <= a And c1 <= C Then
                       Sheet2.Cells(i, 5) = Int(a / x)
     应该改成   c1>=C
回复

使用道具 举报

发表于 2014-3-27 11:22 | 显示全部楼层    本楼为最佳答案   
我的代码可以进一步精简如下:
  1. Private Sub CommandButton1_Click()
  2.     With ActiveSheet
  3.         r = .Range("B65536").End(xlUp).Row
  4.         x = Application.InputBox(Prompt:="请设置分组人数:", Type:=1)
  5.         c1 = Application.InputBox(Prompt:="请设置最大余数:", Type:=1)
  6.         For i = 3 To r
  7.             a = .Cells(i, 3).Value
  8.             fz = Int(a / x): C = a Mod x
  9.             If a <= x Or C > c1 Then fz = fz + 1
  10.             .Cells(i, 5) = fz
  11.         Next i
  12.     End With
  13. End Su
复制代码
里面的逻辑关系能理清吗?
回复

使用道具 举报

 楼主| 发表于 2014-3-27 13:07 | 显示全部楼层
能理解,谢谢帮助!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 04:07 , Processed in 0.171096 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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