Excel精英培训网

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

[已解决]把学生信息按班级填入另一张表中

[复制链接]
发表于 2015-9-15 20:51 | 显示全部楼层 |阅读模式
本帖最后由 llhwzxf 于 2015-9-18 07:59 编辑

把学生信息按班级填入另一张表中
最佳答案
2015-9-16 10:50
请看附件。在数据表里添加了一些各年级的数据供测试。

把学生信息按班级填入另一张表中.rar

17.17 KB, 下载次数: 17

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-9-15 21:09 | 显示全部楼层
都是一班的啊,空表还准备好了2班、3班……
难度没什么,只是,估计没有人愿意给你做苦工。
回复

使用道具 举报

发表于 2015-9-16 10:49 | 显示全部楼层
  1. Sub tt()
  2.     Dim wb As Workbook, brr()
  3.     Dim CopyRng As Range
  4.     Set CopyRng = Sheets("样表").Range("a1:h31")     '要复制的表式
  5.     xstr = "一二三四五六七八九"        '表式中班级为阿拉伯数字型,据此转换成中文数字
  6.     Set d = CreateObject("scripting.dictionary")
  7.     Set d1 = CreateObject("scripting.dictionary")
  8.     Set wb = Workbooks.Open(ThisWorkbook.Path & "\学生信息.xls")
  9.     arr = wb.Worksheets(1).[a1].CurrentRegion
  10.     wb.Close False
  11.     For i = 2 To UBound(arr)
  12.         x = arr(i, 2) & arr(i, 3)
  13.         d(x) = d(x) & "," & arr(i, 1)      '年级+班级为key,姓名累加为item
  14.         y = arr(i, 2)
  15.         d1(y) = ""        '总共存在多少年级
  16.     Next
  17.     For Each y In d1.keys
  18.         Worksheets.Add after:=Sheets(Sheets.Count)    '新建年级表
  19.         With ActiveSheet
  20.             .Name = y
  21.             For i = 1 To 9
  22.                 x = y & Mid(xstr, i, 1) & "班"           '年级+班级为key
  23.                 If d.exists(x) Then
  24.                     CopyRng.Copy .Cells((i - 1) * 32 + 1, 1)      '粘贴样表
  25.                     .Cells((i - 1) * 32 + 3, 1) = "                  学校   " & Mid(y, 1, 1) & "    年级  " & i & "  班"
  26.                     xrr = Split(d(x), ",")         '各姓名进数组xrr
  27.                     ReDim brr(1 To 25, 1 To 8)         '显示数组
  28.                     For k = 1 To UBound(xrr)
  29.                         q = 2 * Int((k - 0.001) / 25) + 1
  30.                         p = k Mod 25: If p = 0 Then p = 25
  31.                         brr(p, q) = k
  32.                         brr(p, q + 1) = xrr(k)
  33.                     Next
  34.                     .Cells((i - 1) * 32 + 5, 1).Resize(25, 8) = brr
  35.                     .Cells((i - 1) * 32 + 30, 5) = k - 1           '本班人数
  36.                 End If
  37.             Next
  38.         End With
  39.     Next
  40. End Sub
复制代码
回复

使用道具 举报

发表于 2015-9-16 10:50 | 显示全部楼层    本楼为最佳答案   
请看附件。在数据表里添加了一些各年级的数据供测试。

把学生信息按班级填入另一张表中.rar

29.66 KB, 下载次数: 29

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 15:06 , Processed in 0.378163 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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