VBA 按省份分拆 Excel 数据表到新表页
可以按照以下步骤使用 VBA 实现将表中内容按省份分拆到新的表页:
-
创建一个新的 Excel 工作簿,并将原始数据表复制到该工作簿中。
-
在该工作簿中创建一个新的 VBA 模块,用于编写 VBA 代码。
-
在 VBA 模块中编写以下代码:
Sub SplitDataByProvince()
Dim wsData As Worksheet
Dim wsNew As Worksheet
Dim rngData As Range
Dim rngProvince As Range
Dim cel As Range
Dim lastRow As Long
Dim i As Long
'获取原始数据表对象
Set wsData = ThisWorkbook.Sheets('原始数据表')
'获取省份列的数据范围
lastRow = wsData.Cells(Rows.Count, "A").End(xlUp).Row
Set rngData = wsData.Range("A2:C" & lastRow)
Set rngProvince = wsData.Range("B2:B" & lastRow)
'循环遍历省份列表,创建新的表页并复制数据
For Each cel In rngProvince
'获取省份名称
provinceName = cel.Value
'检查是否已经存在对应的表页
If WorksheetExists(provinceName) Then
'如果已经存在,则直接复制数据到该表页
Set wsNew = ThisWorkbook.Sheets(provinceName)
Else
'如果不存在,则创建新的表页并设置格式和标题
Set wsNew = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name = provinceName
With wsNew.Range("A1:C1")
.Merge
.Value = "订单详情 - " & provinceName
.Font.Bold = True
.Font.Size = 14
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
wsData.Range("A1:C1").Copy wsNew.Range("A1")
End If
'复制数据到新的表页
For i = 1 To rngData.Rows.Count
If rngProvince.Cells(i, 1).Value = provinceName Then
wsData.Rows(i + 1).Copy wsNew.Rows(wsNew.Cells(Rows.Count, "A").End(xlUp).Row + 1)
End If
Next i
Next cel
End Sub
Function WorksheetExists(sheetName As String) As Boolean
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
If ws.Name = sheetName Then
WorksheetExists = True
Exit Function
End If
Next ws
WorksheetExists = False
End Function
- 在代码中,修改以下部分,以适应实际数据表的结构和内容:
- 将“原始数据表”修改为实际的原始数据表名称。
- 将“A2:C”和“B2:B”修改为实际的数据范围,其中第一列为地区,第二列为省份,第三列为产品名称。
- 根据实际需要修改新表页的标题和格式。
- 运行代码,将会按照省份分拆数据到新的表页中。如果已经存在对应的表页,则直接将数据复制到该表页中;否则创建新的表页,并设置格式和标题。
原文地址: https://www.cveoy.top/t/topic/ol9x 著作权归作者所有。请勿转载和采集!