excel表格转word文档(如何把Excel的数据转移到word里?)

wufei123 发布于 2023-12-19 阅读(350)

一栋公寓大几千人,一个个复制粘贴不得累死。我模拟了一份数据:

数据均使用「浅北表格助手」随机模拟一顿操作后的表格是这样的:

有两种做法,一种是用数据透视表及一些简单的公式,操作简单,但步骤比较多,另外一种则是通过VBA循环完成,学习周期较长,但理解起来比较简单问题分析从数据及现实情况来看,一个班级的学生会分布在多个不同的宿舍,而一个宿舍也有可能有多个不同班级的学生,是多对多的数据。

而要想从基于宿舍制作的表格转换为基于班级制作的表格,其中的联系项就是学生。那么,我们可以通过批量拆分合并单元格+填充身份列,将这张表转换为标准的一维表,每一行就是一条数据:

这个表格可以分为两部分,一部分是班级与宿舍的关系,另外一部分是宿舍与各个成员之间的关系接下来,分享两种实现方法:方式一:手动操作上面说过,班级与宿舍分配是多对多问题,因此,只有班级与宿舍都相同,才可以算作同一数据,因此,要做的就是对宿舍及班级的合并去重。

可以使用数据透视表完成:

有了班级与宿舍的对应关系,接下来,就是宿舍与各个成员的对应关系了。宿舍舍长与其联系方式比较容易获得,因为舍长是与宿舍绑定的,不用考虑是哪个班级,同样使用数据透视表并筛选:

有了这张表,我们使用VLOOKUP函数就可以获取所有关于宿舍长的信息:

接下来,就是舍员信息,同样使用数据透视表,可以获得如下数据:

注意使用「不重复项目标签」的表格型数据透视表,下面才可以进行筛选但我们发现,这里的数据是按列排的,而要生成的表格是逐行排列的,因此,我们可以利用空白单元格的意义(上一条数据中的宿舍与此条数据的宿舍相同),实现错位提取:。

当然,由于每个宿舍最多容纳4人,刨除舍长,最多还有3名舍员如果有更多舍员的话,请参考“三”这一列的公式,同时需要判断左侧单元格不能为空,否则就表示此宿舍已无其他成员,不要再向里填写舍员姓名,这个姓名是其他宿舍的成员。

到这里,我们筛选一下,就可以获得舍员与宿舍的对应关系了:

这里有个0,暂时不用管,我们最后处理。接下来,同样,使用VLOOKUP函数,将宿舍与对应的舍员拼接在一起:

最后,将全表的公式都转换为值,并将舍员数据中的“0”替换为""即可(勾选单元格匹配)。那么,这就是我们最终的效果了:

如果你需要合并数据相同的单元格,可以利用数据透视表完成,或者使用「浅北表格助手」中的功能(获取方法见文末):

方法二:VBA循环VBA对这种数据批量处理很好用,理解起来比较简单,也不用记一些奇技淫巧的功能,一个个数据查找就可以这里简单说下处理的逻辑,先把不同班级不同宿舍的信息找出来,再根据每一个学生所在的宿舍及该成员的身份做遍历,填写在相应的位置即可。

代码也贴出来了,有注释,不懂的可以联系我:Sub 纯循环解决() Dim dSht As Worksheet, oSht As Worksheet Set dSht = Worksheets("数据表") Set oSht = Worksheets("现表") Const 数据表开始 = 2, 数据表结束 = 24, 现表开始 = 2 Const 现表序号 = "A", 现表班级 = "B", 现表宿舍 = "C", 现表舍长 = "D", 现表舍长电话 = "E", 现表舍员 = "F" Const 数据表宿舍 = "A", 数据表姓名 = "B", 数据表班级 = "C", 数据表电话 = "D", 数据表身份 = "E" Const 舍长 = "舍长", 舍员 = "舍员" Const 总行数 = 65536 如果数据行数超过,请修改此参数为1048576 Dim i As Long, j As Long 填充宿舍&班级信息 For i = 数据表开始 To 数据表结束 Dim flag As Boolean 匹配的宿舍&班级 flag = False 如果没找到返回初始值 False For j = 现表开始 To oSht.Range(现表班级 & 总行数).End(xlUp).Row If dSht.Range(数据表班级 & i).Value = oSht.Range(现表班级 & j).Value And _ dSht.Range(数据表宿舍 & i).Value = oSht.Range(现表宿舍 & j).Value Then flag = True Exit For End If Next If Not flag Then 如果没找到对应的宿舍&班级,则创建 此时j 已经是最下方的空单元格的行号了,可以直接使用 oSht.Range(现表班级 & j).Value = dSht.Range(数据表班级 & i).Value oSht.Range(现表宿舍 & j).Value = dSht.Range(数据表宿舍 & i).Value oSht.Range(现表序号 & j).Value = j - 现表开始 + 1 End If Next 这遍填充姓名等信息 For i = 数据表开始 To 数据表结束 For j = 现表开始 To oSht.Range(现表班级 & 总行数).End(xlUp).Row If dSht.Range(数据表宿舍 & i).Value = oSht.Range(现表宿舍 & j).Value Then If dSht.Range(数据表身份 & i) = 舍长 Then oSht.Range(现表舍长 & j).Value = dSht.Range(数据表姓名 & i).Value oSht.Range(现表舍长电话 & j).NumberFormatLocal = "@" 设置为文本格式 oSht.Range(现表舍长电话 & j).Value = dSht.Range(数据表电话 & i).Value Else Dim k As Long: k = 0 Do While 1 If oSht.Range(现表舍员 & j).Offset(0, k).Value = "" Then oSht.Range(现表舍员 & j).Offset(0, k).Value = dSht.Range(数据表姓名 & i).Value Exit Do Else k = k + 1 End If Loop End If End If Next Next End Sub

总结这类问题,本质是如何将一维表转换为二维表常用的方法就是数据透视表+错列填充+VLOOKUP,基本可以解决大部分问题上面提到的「浅北表格助手」不仅可以模拟随机姓名数据,还有批量合并/拆分工作簿、工作簿,批量合并/拆分相同单元格、批量插入图片到对应单元格等 40 多种功能,你可以免费下载使用全部功能:。

莫浅北:浅北表格助手介绍9 赞同 · 6 评论文章

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻24916