Excel精英培训网

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

求助各位老师如果根据“试室号”“座位号”来分别像现在的函数那样来生成黄色...

[复制链接]
发表于 2013-1-14 10:45 | 显示全部楼层 |阅读模式
本帖最后由 qinhuan66 于 2013-1-14 10:56 编辑

求助各位老师如果根据数据库D列“试室号”;E列“座位号”来分别像现在的函数那样来生成黄色区域的考试座位安排表(以下每张表一样)    谢谢   
准考证原始数据.rar (95.62 KB, 下载次数: 13)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-1-14 18:10 | 显示全部楼层

每个试室可以安排的人数上限是30人

本帖最后由 suye1010 于 2013-1-15 18:17 编辑
  1. Option Explicit

  2. Sub GenPosArr()
  3. Dim i As Integer, j As Integer, RoomNo As Integer, RowsInRoom As Integer, PeopleInRoom As Integer, arr0, arr
  4. arr0 = Sheets("数据库").UsedRange
  5. ReDim arr(1 To UBound(arr0), 1 To 19)
  6. For i = 3 To UBound(arr0)
  7. If arr0(i, 1) <> "" Then
  8.     PeopleInRoom = Application.WorksheetFunction.CountIf(Sheets("数据库").Range("D3:D65535"), arr0(i, 4))
  9.     RowsInRoom = IIf(PeopleInRoom Mod 5, PeopleInRoom \ 5 + 1, PeopleInRoom \ 5)
  10.     arr(arr0(i, 4) * 17 - 16, 4) = arr0(i, 10)
  11.     arr(arr0(i, 4) * 17 - 16, 16) = "第" & Replace(Application.WorksheetFunction.Text(arr0(i, 4), "[DBNum1][$-804]General"), "一十", "十") & "试室"
  12.     arr(arr0(i, 4) * 17 - 14, 9) = "讲台"
  13.     For j = 1 To PeopleInRoom
  14.         arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 3 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 5), _
  15.             ((j - 1) \ RowsInRoom) * 4 + 3) = Format(j, "00")
  16.         arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 3 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 5), _
  17.             ((j - 1) \ RowsInRoom) * 4 + 2) = arr0(i + j - 1, 6)
  18.         arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 3 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 5), _
  19.             ((j - 1) \ RowsInRoom) * 4 + 1) = "准考证号"
  20.         arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 4 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 6), _
  21.             ((j - 1) \ RowsInRoom) * 4 + 2) = arr0(i + j - 1, 1)
  22.         arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 4 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 6), _
  23.             ((j - 1) \ RowsInRoom) * 4 + 1) = "姓名"
  24.     Next j
  25.     i = i + Application.WorksheetFunction.CountIf(Sheets("数据库").Range("D3:D1000"), arr0(i, 4)) - 1
  26. End If
  27. Next i
  28. Sheets("试室安排").Range("A1").Resize(UBound(arr, 1), 19) = arr
  29. End Sub
复制代码
准考证原始数据.zip (76.42 KB, 下载次数: 4, 售价: 5 个金币)

评分

参与人数 1 +1 收起 理由
qinhuan66 + 1 老师谢谢您!你编程得很好,全部都是自动生.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-1-15 17:30 | 显示全部楼层
suye1010 发表于 2013-1-14 18:10

arr(arr0(i, 4) * 17 - 16, 16) = "第" & Application.WorksheetFunction.Text(arr0(i, 4), "[DBNum1][$-804]0") & "试室"

例如:第22试室
这里生成的第二二试室
能否换成第二十二试室

谢谢

点评

arr(arr0(i, 4) * 17 - 16, 16) = "第" & Replace(Application.WorksheetFunction.Text(arr0(i, 4), "[DBNum1][$-804]General"), "一十", "十") & "试室"   发表于 2013-1-15 18:17
回复

使用道具 举报

 楼主| 发表于 2013-1-16 11:14 | 显示全部楼层
suye1010 发表于 2013-1-14 18:10

老师我有一个附件原本是可以生成出来的,但是现在有一个值生成不出来了,原因是我在原始表里改为设有公式求出,如果不用公式的表就可以提取过来,表达不清楚请看附件:
2013-01-16_105402.gif

原始表J2改用公式求出,不用公式的话还是可以提取过去的
2013-01-16_105415.gif


现在主要就是圈内的代码如何改为有公式的值也可以提取,因为所有的原始表格J2本人都改为设有公式
2013-01-16_110245.gif

求助suye1010老师.rar (214.49 KB, 下载次数: 5)
回复

使用道具 举报

发表于 2013-1-16 18:03 | 显示全部楼层

因为你使用了宏表函数,在打开的时候应该让其更新一下公式(请你用心找不同吧^_^)

本帖最后由 suye1010 于 2013-1-16 18:05 编辑
  1. Sub 生成各参保单位托收数据()
  2. Dim wj As String, fs As Object, arr
  3. Application.ScreenUpdating = False
  4. Application.DisplayAlerts = False
  5. Application.EnableEvents = False
  6. Range("a3:s500").ClearContents
  7. wj = Dir(ThisWorkbook.Path & "\数据库")
  8. s = 2
  9. Do While wj <> ""
  10.     If s = 2 Then
  11.         ReDim arr(1 To 19, 1 To 1)
  12.     Else
  13.         ReDim Preserve arr(1 To 19, 1 To UBound(arr, 2) + 1)
  14.     End If
  15.     s = s + 1
  16.     Set fs = GetObject(ThisWorkbook.Path & "\数据库" & wj)
  17.     fs.Sheets(1).Calculate
  18.     arr(1, s - 2) = s - 2
  19.     arr(2, s - 2) = Mid(wj, 6, Len(wj) - 9)
  20.     arr(3, s - 2) = fs.Sheets(1).[g2]
  21.     arr(4, s - 2) = fs.Sheets(1).[n2]
  22.     arr(5, s - 2) = Sheets(1).[j2]
  23.     arr(6, s - 2) = Application.WorksheetFunction.CountIf(fs.Sheets(1).Range("u6:u1000"), "在职")
  24.     arr(7, s - 2) = Application.WorksheetFunction.CountIf(fs.Sheets(1).Range("u6:u1000"), "退休")
  25.     arr(8, s - 2) = Application.WorksheetFunction.CountIf(fs.Sheets(1).Range("u6:u1000"), "停缴")
  26.     arr(9, s - 2) = Application.WorksheetFunction.SumIf(fs.Sheets(1).Range("u6:u1000"), "在职", fs.Sheets(1).Range("r6:r1000"))
  27.     arr(10, s - 2) = Application.WorksheetFunction.SumIf(fs.Sheets(1).Range("u6:u1000"), "在职", fs.Sheets(1).Range("r6:r1000")) * 0.18
  28.     arr(11, s - 2) = Application.WorksheetFunction.SumIf(fs.Sheets(1).Range("u6:u1000"), "在职", fs.Sheets(1).Range("r6:r1000")) * 0.02
  29.     arr(12, s - 2) = Application.WorksheetFunction.SumIf(fs.Sheets(1).Range("W6:W1000"), "托", fs.Sheets(1).Range("r6:r1000"))
  30.     arr(13, s - 2) = "=""养老保险:缴费人数:""&SUM(RC[-7])&""人"""
  31.     arr(14, s - 2) = _
  32.     "=""单位缴存:""&TEXT(RC[-5],""0.00"")&""""&""×""&18%&""=""&TEXT(RC[-5]*18%,""0.00"")&"""""
  33.     arr(15, s - 2) = _
  34.     "=""个人缴存:""&TEXT(RC[-6],""0.00"")&""""&""×""&2%&""=""&TEXT(RC[-6]*2%,""0.00"")&"""""
  35.     arr(16, s - 2) = _
  36.     "=""返纳金:""&TEXT(RC[-4],""0.00"")&""""&""×""&18%&""=""&TEXT(RC[-4]*18%,""0.00"")&"""""
  37.     arr(17, s - 2) = Application.WorksheetFunction.SumIf(fs.Sheets(1).Range("W6:W1000"), "托", fs.Sheets(1).Range("r6:r1000")) * 0.18
  38.     arr(18, s - 2) = "=VLOOKUP(R1C4,年度月份设置!R2C3:R13C4,2,0)"
  39.     arr(19, s - 2) = "=SUM(RC[-9]+RC[-8]+RC[-2])"
  40.     fs.Close False
  41.     wj = Dir
  42. Loop
  43. Cells(3, 1).Resize(UBound(arr, 2), UBound(arr)) = Application.Transpose(arr)
  44. Application.EnableEvents = True
  45. Application.DisplayAlerts = True
  46. Application.ScreenUpdating = True
  47. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
qinhuan66 + 1 谢谢老师的热心帮忙

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-17 18:32 | 显示全部楼层
qinhuan66 发表于 2013-1-15 17:30
arr(arr0(i, 4) * 17 - 16, 16) = "第" & Application.WorksheetFunction.Text(arr0(i, 4), "[DBNum1][$- ...

老师您好为什么D列没有试室号生成会出错呢?能否D列没值时不弹出错误。谢谢
回复

使用道具 举报

发表于 2013-10-3 23:57 | 显示全部楼层
好东西,谢谢分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 11:20 , Processed in 0.566472 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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