在工作中,我们经常会遇到将一个表格中的数据填入另一张表格,并已特定文本重命名。如图1所示,若一直Ctrl+C、Ctrl+V则会浪费很多时间。

(图1)
这种情况应该会遇到不少,如果用函数的话,比较麻烦,且不能自动化运行,这时就可以考虑到用VBA来解决这个问题。
将两个表格放入同一文件夹下。如图2所示。(工作簿后缀是“.xlsx”,不能用来存储“宏”,如需要将“宏”存储到表格中,可以用“.xls”或者“.xlsm”)。

(图2)
【步骤二】
双击打开“表1【采集表】”→右击【工作表】→选择【查看代码】,在弹出来的VBE界面中的右侧【工程窗口】中右击→插入【模块】→复制如下代码到【代码窗口】中→运行代码就可以完成操作了。如图3所示。

(图3)
Sub 填入数据并另存为名字()
Dim fn As Variant
fn = ThisWorkbook.Path &"\" & "表2【基础数据】.xlsx"
Dim wb As Workbook, sht As Worksheet
Set wb =GetObject(fn)
Set sht = wb.Worksheets("sheet1")
Dim i As Integer
i = 3
Do While sht.Range("C" & i)<> ""
Range("C2").Value =sht.Range("B" & i)
Range("F2").Value =sht.Range("C" & i)
Range("H2").Value =sht.Range("D" & i)
Range("J2").Value =sht.Range("R" & i)
Range("L2").Value =sht.Range("F" & i)
Range("O2").Value =sht.Range("G" & i)
Range("C3").Value =sht.Range("S" & i)
Range("O3").Value =sht.Range("U" & i)
Range("C4").Value =sht.Range("H" & i)
Range("M4").Value =sht.Range("I" & i)
Range("C5").Value =sht.Range("E" & i)
Range("E6").Value =sht.Range("J" & i)
Range("M6").Value =sht.Range("K" & i)
Range("E7").Value =sht.Range("L" & i)
Range("M7").Value =sht.Range("M" & i)
Range("E8").Value =sht.Range("N" & i)
Range("M8").Value =sht.Range("O" & i)
Range("E9").Value =sht.Range("P" & i)
Range("M9").Value =sht.Range("Q" & i)
Range("C10").Value =sht.Range("T" & i)
Range("B11").Value =sht.Range("V" & i)
ThisWorkbook.SaveCopyAs "C:\Users\Administrator\Desktop\批量处理\" & sht.Range("B" & i) &".xlsx"
i = i + 1
Loop
End Sub
【代码解释】(不懂的可以略过)
1.fn得到基础数据表的路径+名称;
2. Set wb =GetObject(fn)得到基础数据工作簿
3. Set sht =wb.Worksheets("sheet1")得到基础数据工作簿中的“sheet1”工作表
4. Do Whilesht.Range("C" & i) <> "",是do while语句,表示直到基础数据表中C列的工作表为空(从C3单元格开始,因为i的初始赋值为3)
5. Range("C2").Value= sht.Range("B" & i)及之后的代码是将基础数据表和采集表一一对应,填写进表
6. ThisWorkbook.SaveCopyAs"C:\Users\Administrator\Desktop\批量处理\" &sht.Range("B" & i) & ".xlsx",表示将填写好的工作簿另存为与B列单元格(从B3开始)相同的名称
7.i = i +1 开始新的循环
★【怎么用此代码?】★
1. fn =ThisWorkbook.Path & "\" & "表2【基础数据】.xlsx"中:
“表2【基础数据】.xlsx”是需要填入的数据的表的名称+后缀,可以结合实际修改;
2. Set sht =wb.Worksheets("sheet1")中:
“sheet1”是所在基础表中的工作表的标签名称,如果基础表中有很多个worksheet,选择有基础数据的那个工作表的标签名称;
3. i = 3 中:
3是基础数据表中标题行数+1,即需填入第一个数据的行号。
4. Do Whilesht.Range("C" & i) <> ""中:
Range("C"& i)是C代表C列(要选择连续的列,中间不能有空单元格)
5. Range("C2").Value= sht.Range("B" & i)等相似的代码中,C2是需要填写数据的单元格位置,"B" & i是基础数据表中对应数据的位置
6.ThisWorkbook.SaveCopyAs "C:\Users\Administrator\Desktop\批量处理\" & sht.Range("B" & i) &".xlsx"中:
(1)“批量处理”是桌面上已经建好的文件夹名称,根据情况换成其他的文件夹名称;
(2)sht.Range("B" & i)是重命名的工作簿的名称;
(3)".xlsx"是重命名之后的后缀
【备注】
1.除了以上可以结合实际修改的,其他的都不用改,运行就可以用;
2.“.xlsx”的工作簿是不能保存代码的,如果需要代码留在工作簿中,可以用 后缀为“.xls”或“.xlsm”的工作簿。
Tips1:两个工作簿需放在同一文件夹下,放在不同文件夹下会多一些代码输入,无形中增加时间;
Tips2:如果发现文中有错误的地方,请多多指正,感谢!
Tips3:万丈高楼平地起!




