今受一网友之托,俺必忠人之事!
俺那网友遇到一个麻烦问题了,她不是计算机高手,仅是Excel应用者,而她的问题实在难以使用普通办法来解决!
俺也不是VBA学员,只得从网上临时学习VBA知识,以解其燃眉之急!
现将心得体会与大家分享,虽然不是啥好方法,但是足以应付她的问题了,凡事只可问心无愧,本文绝无炫耀之意;希望对大家有所帮助!
注:图片中显示的姓名,本例仅做举例学习之用,如果与您的姓名相同,还望海涵!!!
问题是这样的……先过目一下Excel数据吧!
表一:
表二:
表三:
问题的需求是:将2表到8表的姓名追加填充到表1的姓名列中;将表2到表8的应发合计追加填充到表1的应发合计列中,并与姓名相对应;
咋一看,数据表很少,每表数据也比较少,使用复制粘贴足以应付了!
其实不然,如果有那么简单,这招俺也不用学习了!
仔细分析表2和表3数据,姓名列突然跳到600多行了(其他数据表雷同),在这段行之中,可能存在数据,今后还可能增加不可意料的姓名,涉及到不可意料的数据,必然导致该操作具有很大的灵活性,灵活性大了,不使用一劳永逸的办法来对待,势必事倍功半!
而事实上,每张表的数据量是比较大的,据她所说,每表数据将近1500条,如此一来,统统复制粘贴到表一中,那么,将来哪个表数据增加了,我们都很难从汇总的表一中使用肉眼判断出来,到头来也得重复很多的复制粘贴工作…
为使用科学合理的办法来处理该问题,俺特别设计了如下的VBA代码,以助俺网友完成工作任务!
代码如下:
如何使用上述代码呢?
打开你的Excel文件,按组合键Alt+F11,打开VB代码编辑窗口,如果打开的窗口未显示如上图的代码窗口,请在VB窗口中执行“视图”→“代码窗口”;
在弹出的代码窗口中输入如上图的代码,按运行即可完成操作!
注,为方便程序设计,俺特地在表2到表8的姓名列中的最后一个姓名下方单元格输入“姓名结束”,请注意了,如果没有,程序将无法运行,或者运行起来所得到的数据结果也是错误的!
为方便各位的学习,提供原始代码:
-------------------
Private Function FillValue()
k = 2 '表1数据填充从A2开始
For i = 2 To 8 '表循环,从表二循环到表8
For j = 1 To 10000 '表内数据循环,步长最大值设置为10000,防止漏选数据,可修改为更大值
'当遇到单元格的值为“姓名结束”时,退出循环
If Worksheets(i).Cells(j, 1).Value = "姓名结束" Then
Exit For
End If
'姓名不为空,单元格姓名值不为“姓名”的单元格进行值的赋值
If Worksheets(i).Cells(j, 1).Value <> "" And Worksheets(i).Cells(j, 1).Value <> "姓名" Then
'将表2到表8的A列数据根据条件赋值到表一的A列
Worksheets(1).Cells(k, 1).Value = Worksheets(i).Cells(j, 1).Value
'将表2到表8的F列数据根据条件赋值到表一的F列
Worksheets(1).Cells(k, 2).Value = Worksheets(i).Cells(j, 6).Value '6代表F列
'步长值,自增变量,让数据从表一的下一行逐渐填充
k = k + 1
End If
Next
Next
End Function
-------------------