暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用VBA批量表格的合并,并另存为指定字符

施施的EXCEL后备军 2021-08-30
1090

        在工作中,我们经常会遇到将一个表格中的数据填入另一张表格,并已特定文本重命名。如图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:万丈高楼平地起!


文章转载自施施的EXCEL后备军,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论