经典说说大全-经典句子大全-灵儿心情网

经典说说大全-经典句子大全-灵儿心情网

单位名字如何拆分

59

根据你的需求,以下是使用VBA按单位名称拆分工作簿的详细步骤和示例代码:

一、拆分规则说明

拆分依据:

以A列(单位名称)为基准,将数据按单位名称复制到独立工作簿;

保留数据:

拆分后的工作簿需保留原工作表的黄色背景表头;

命名规则:

新工作簿命名为“单位名称+已追缴工程款合计数”;

路径要求:

新工作簿存放路径与原工作簿一致。

二、VBA实现步骤

禁用屏幕更新和提示

通过`Application.ScreenUpdating = False`和`Application.DisplayAlerts = False`提升代码运行效率,避免操作提示干扰。

获取原工作簿路径

检查当前工作簿路径,若路径以反斜杠结尾则补全路径分隔符。

读取数据范围

确定数据起始行(如第6行)和结束行(如数据的最后一行),并读取A列数据到数组中。

创建新工作簿并复制数据

遍历A列每个单位名称,为每个单位创建新工作簿,并将对应行的数据复制过去。

设置新工作簿名称

根据单位名称和已追缴工程款合计数生成新工作簿名称。

三、示例代码

```vba

Sub SplitWorkbookByUnit()

Dim ws As Worksheet

Dim p As String

Dim lastRow As Long

Dim i As Long

Dim arr() As Variant

Dim wb As Workbook

Dim titleRow As Range

Dim newBookName As String

' 禁止屏幕更新和提示

Application.ScreenUpdating = False

Application.DisplayAlerts = False

' 获取当前工作簿路径

p = ThisWorkbook.Path

If Right(p, 1) <> "\" Then p = p & "\" ' 补全路径分隔符

' 设置数据范围(假设数据从第6行开始)

Set ws = ThisWorkbook.Sheets(1)

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Set titleRow = ws.Rows(1:5) ' 假设前5行为表头

arr = ws.Range(titleRow, ws.Cells(lastRow, 1)).Value

' 遍历每个单位名称并拆分

For i = 6 To lastRow

newBookName = arr(i, 1) & "-" & WorksheetFunction.Sum(arr(i, 2:15))

Workbooks.Add

ws.Rows(i).Copy Destination:=Worksheets(Worksheets.Count).Range("A1")

Worksheets(Worksheets.Count).Name = newBookName

Next i

' 恢复屏幕更新和提示

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

```

四、注意事项

数据验证:

拆分前建议备份原数据,避免数据覆盖或丢失;

路径权限:

确保目标路径存在且可写;

名称冲突:

若存在同名工作簿,需修改命名规则或手动处理。

五、补充说明

若数据量较大,建议优化代码或使用Excel的“文本分列”功能(适用于静态数据拆分);

以上代码假设表头为前5行,若表头行数不同需调整`titleRow`的设置。

通过以上步骤,你可以高效地按单位名称拆分工作簿,并保持数据完整性和一致性。