比较多表相同位置的数据,是这样来理解的:比如说:有三张工作表,列的名称分为:姓名、成绩、综合分三个列。
姓名列,已输入了学员的姓名,现在,要填写的是每个学员的成绩和综合分这两列。
现在,遇到的问题是,由于学员很多,因此,要把这张表发给很多人来录入成绩这些数据。
每个录入的人遇到的问题是,学员的名字完全一样,但是,自己录入的成绩数据,是根据手里面的资料来录入的,因此,涉及到的问题是每个录入者都根据学员的名字在相应的行来录入。
因此,这些录入数据的人,其实都是在不同行来录入成绩的。
等所有的人都录入好了,把电子表格拿过来了,我们可以把每个人的复制了以后,放到同一张工作薄里面,最后,再综合到第一张工作表里面。
自然,问题就变成了多表合并数据到表一的问题了,我们得使用VBA来完成。
我们假设,每个录入的工作者的数据,都粘贴到了同一工作薄中。
现在,使用表一为参照对象,拿表一的每一个单元格分别和表二表三表四等进行比较,如果表一的某个单元格不为空,就说明表一已经录入了数据,就不再将其它表的该位置的数据赋值过来,否则,只要表一的某个单元格为空,说明未填写数据,它的数据必定在其它工作表里面,通过循环找到数据并赋值过来即可完成综合合并的问题。
下面,提供通用的综合合并的VBA代码,该代码经本站测试,完全可行。
For i = 2 To Worksheets.Count
For j = 2 To 999
For k = 1 To 8
If (Trim(Worksheets(1).Cells(j, k).Value) = "") Then
Worksheets(1).Cells(j, k).Value = Worksheets(i).Cells(j, k).Value
End If
Next k
Next j
Next i
代码其实很简单,但是,却不好理解,下面本人为你解释一下部分代码。
For i = 2 To Worksheets.Count 从第2个工作表开始做循环对比。因为表一是参照对象,就不用循环表一了。
For j = 2 To 999 代表数据行的循环范围,从第2行找到999行,你可以修改。
For k = 1 To 8 代表列,从1列循环到8列,你可以修改。
If (Trim(Worksheets(1).Cells(j, k).Value) = "") 如果表1的该位置Cells(j, k)的数据为空,说明第一个录入者未在此处录入数据,那么,该位置必然会被其它录入者录入,因此,找到后赋值过来即可。
Worksheets(1).Cells(j, k).Value = Worksheets(i).Cells(j, k).Value 此处就是赋值代码了。