matinal:Excel用VBA代码一键合并汇总多个工作簿

本文介绍如何使用VBA脚本快速合并多个Excel工作簿和工作表,保持数据来源记录,同时自动删除重复标题,整个过程只需几秒钟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候,你需要将几十个工作簿中的内容,快速汇总至合并至一个工作簿,如果手动一个复制粘贴,那心里有苦说不出。。。

今天将大家用VBA一键合并,只需要几秒种,为了测试这段代码,我们新建了4个工作簿在文件夹中,数据都是模拟的,做试验

一键合并代码操作如下所示:

我们看原始表格数据,其中,第1个工作簿有点特殊,这个工作簿中,有两个工作表,第1个工作表的内容是:

第2个工作表的内容是:

第2,3,4个工作簿中都是仅有1个工作表,如下所示:

通过代码,我们一键可以合并,得到结果,这个汇总的结果有两个特点

1、最后一列,还会显示这些数据的来源是哪个工作簿,哪个表名的。

2、原始数据中每一行的标题自动取消,只保留了一个标题。

如下所示:

在Excel菜单栏中,点击开发工具,打开VBA,输入如下代码:

其中代码如下所示:



Sub 合并目录所有工作簿全部工作表()

Dim MP, MN, AW, Wbn, wn

Dim Wb As Workbook

Dim i, a, b, d, c, e

Application.ScreenUpdating = False

MP = ActiveWorkbook.Path

MN = Dir(MP & "\" & "*.xls")

AW = ActiveWorkbook.Name

Num = 0

e = 1

Do While MN <> ""

If MN <> AW Then

Set Wb = Workbooks.Open(MP & "\" & MN)

a = a + 1

With Workbooks(1).ActiveSheet

For i = 1 To Sheets.Count

If Sheets(i).Range("a1") <> "" Then

Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1)

d = Wb.Sheets(i).UsedRange.Columns.Count

c = Wb.Sheets(i).UsedRange.Rows.Count - 1

wn = Wb.Sheets(i).Name

.Cells(1, d + 1) = "表名"

.Cells(e + 1, d + 1).Resize(c, 1) = MN & wn

e = e + c

Wb.Sheets(i).Range("a2").Resize(c,d).Copy .Cells(.Range("a1048576").End(xlUp).Row + 1, 1)

End If

Next

Wbn = Wbn & Chr(13) & Wb.Name

Wb.Close False

End With

End If

MN = Dir

Loop

Range("a1").Select

Application.ScreenUpdating = True

MsgBox "共合并了" & a & "个工作薄下全部工作表。如下:" & Chr(13) & Wbn, vbInformation, "提示"

End Sub

当你知道了一个Cell的Hierarchy信息,从RTL(Register Transfer Level,寄存器传输级)代码中提取它的信息通常涉及到以下几个步骤: 1. **定位模块**:首先,在RTL代码中根据Hierarchical Name(有时称为Full Path或Hierarchical Identifier)寻找该Cell所在的模块。例如,如果Hierarchical Name是`top.module.cell_name`,那么你需要在`top`模块内部搜索`module`并找到`cell_name`。 2. **访问实例**:找到Cell所在的模块后,检查该模块中的实例列表(Instance List)。在这个列表里,会有一个表示该Cell的实例,其Name应该与给定的Hierarchical Name匹配。 3. **读取属性**:对于Verilog或VHDL,每个实例都有相关的属性(Attributes)可以提供关于Cell的信息,比如宽度、长度、输入输出信号等。可以通过`$readmemh`指令或者直接在代码中读取实例的属性来进行查看。 4. **记录细节**:提取所需的具体信息,比如位宽、功能描述、连接的端口等,并将其存储在一个数据结构(如哈希表或自定义结构体)中以便后续处理或输出。 5. **异常处理**:如果在搜索过程中遇到缺失或错误的情况,确保有适当的错误处理机制,比如提供默认值或者记录日志信息。 示例代码片段(仅作示意): ```verilog // 假设已知的Hierarchical Name为"top.module.cell" module_name = find_module_by_name("top", "module"); instance = find_instance(module_name, "cell"); // 在module中找到cell // 读取cell属性 width = instance.width; function_name = instance.function; // 存储cell信息 cell_info[cell_name] = {width, function_name}; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值