Excel精英培训网

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

[已解决]求助:如何根据生成试室座位号窗口的复选框打钩和输入的人数生成到D列和E列

[复制链接]
发表于 2013-6-11 18:07 | 显示全部楼层 |阅读模式
求助:如何根据生成试室座位号窗口的复选框打钩和输入的人数生成到D列和E列,例如  图1  和 图2  的对比。

意思是假如在第四试室打钩输入10的话在D列和E列也按上述出现 。谢谢

生成试室座位.rar (11.71 KB, 下载次数: 8)
 楼主| 发表于 2013-6-11 18:38 | 显示全部楼层
=IF(OR(A3=""),"",TEXT(COUNTIF(E$3:E3,"01"),"00"))
现在我是上条函数生成的
即是在E列输入座位号在D列自动产生试室(在A列有姓名的情况下),A列没姓名为空D列为空
回复

使用道具 举报

发表于 2013-6-11 18:53 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub CommandButton1_Click()
  2.     Dim arr, arrTemp()
  3.     Dim i As Long, j As Long
  4.     Dim lLastRow As Long
  5.    
  6.     arr = CheckInput
  7.     If Not IsArray(arr) Then Exit Sub
  8.     Application.ScreenUpdating = False
  9.     Application.DisplayAlerts = False
  10.     Application.EnableEvents = False
  11.     Columns("d:e").ClearContents
  12.     Range("d2").Resize(, 2) = Array("试室号", "座位号")
  13.    
  14.     For i = 1 To UBound(arr)
  15.         If Len(arr(i, 1)) Then
  16.             lLastRow = Cells(Rows.Count, "d").End(xlUp).Row + 1
  17.             ReDim arrTemp(1 To arr(i, 2), 1 To 2)
  18.             For j = 1 To arr(i, 2)
  19.                 arrTemp(j, 1) = Format(Val(arr(i, 1)), "'00")
  20.                 arrTemp(j, 2) = Format(j, "'00")
  21.             Next
  22.             Cells(lLastRow, "d").Resize(arr(i, 2), 2).Value = arrTemp
  23.         End If
  24.     Next
  25.     Application.ScreenUpdating = True
  26.     Application.DisplayAlerts = True
  27.     Application.EnableEvents = True
  28. End Sub

  29. Private Sub CommandButton3_Click()
  30.     End
  31. End Sub

  32. Function CheckInput()
  33.     Dim objControl As Control
  34.     Dim str$
  35.     Dim strTemp
  36.     Dim arr(), i As Byte
  37.     ReDim arr(1 To 30, 1 To 2)
  38.     For Each objControl In Me.Controls

  39.         If TypeName(objControl) Like "CheckBox" Then
  40.             With objControl
  41.                 If .Value Then
  42.                 strTemp = Me.Controls(Replace(.Name, "CheckBox", "TextBox")).Text
  43.                     If Not IsNumeric(strTemp) Or strTemp Like "*[.-]*" Then
  44.                         str = str & .Name & " 后面的文本框输入的是整数值" & vbCrLf
  45.                     Else
  46.                        i = i + 1
  47.                        arr(i, 1) = Mid(.Name, 9)
  48.                        arr(i, 2) = Val(strTemp)
  49.                     End If
  50.                 End If
  51.             End With
  52.         End If
  53.     Next
  54.     CheckInput = Not Len(str) > 0
  55.     If Not CheckInput Then
  56.         MsgBox str
  57.     Else
  58.         CheckInput = arr
  59.     End If
  60. End Function
复制代码

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!谢谢您老师。真的谢谢您一直的无私帮.

查看全部评分

回复

使用道具 举报

发表于 2013-6-11 18:54 | 显示全部楼层
清空按钮你自己写,我这只写了生成的代码。
回复

使用道具 举报

发表于 2013-6-11 19:03 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.     Dim arr, arrTemp()
  3.     Dim i As Long, j As Long
  4.     Dim lLastRow As Long
  5.    
  6.     arr = CheckInput
  7.     If Not IsArray(arr) Then Exit Sub
  8.     Application.ScreenUpdating = False
  9.     Application.DisplayAlerts = False
  10.     Application.EnableEvents = False
  11.     Columns("d:e").ClearContents
  12.     Range("d2").Resize(, 2) = Array("试室号", "座位号")
  13.    
  14.     For i = 1 To UBound(arr)
  15.         If Len(arr(i, 1)) Then
  16.             lLastRow = Cells(Rows.Count, "d").End(xlUp).Row + 1
  17.             ReDim arrTemp(1 To arr(i, 2), 1 To 2)
  18.             For j = 1 To arr(i, 2)
  19.                 arrTemp(j, 1) = Format(Val(arr(i, 1)), "'00")
  20.                 arrTemp(j, 2) = Format(j, "'00")
  21.             Next
  22.             Cells(lLastRow, "d").Resize(arr(i, 2), 2).Value = arrTemp
  23.         Else
  24.             Exit For
  25.         End If
  26.     Next
  27.     Application.ScreenUpdating = True
  28.     Application.DisplayAlerts = True
  29.     Application.EnableEvents = True
  30. End Sub
复制代码
第一个过程改下,可以少跑些循环,时间不过也没有多少。

评分

参与人数 1 +3 收起 理由
qinhuan66 + 3 很给力!谢谢老师我已经改了

查看全部评分

回复

使用道具 举报

发表于 2013-6-11 19:40 | 显示全部楼层
str = str & .Name & " 后面的文本框输入的是整数值" & vbCrLf

这里写错提示了,非大于0的整数值。
回复

使用道具 举报

 楼主| 发表于 2013-6-11 20:56 | 显示全部楼层
hwc2ycy 发表于 2013-6-11 19:03
第一个过程改下,可以少跑些循环,时间不过也没有多少。

求助能否修改一下代码加多在F列提取K列的数全在一起生成。谢谢

生成试室座位.rar (23.82 KB, 下载次数: 8)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 05:40 , Processed in 0.394466 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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