【发布时间】:2021-12-04 02:53:26
【问题描述】:
目标是根据 1 列中的唯一值将我的原始数据拆分为新工作表。我发现以下 VBA 代码可以满足我的需要,但是我将使用它的客户有一个锁定的 excel“工作簿”,我无法更改原始数据列的顺序。在这种情况下,此 VBA 代码使用列 A,但我的目标列是 C。
新工作表似乎也以目标数据命名,但我想知道如何更改它,以便为工作表名称指定一个单元格。
问题 1:我可以更改此代码的哪一部分以使目标列 C 而不是 A。 问题 2:如何将 .name 部分更改为每张纸上 AF2 中的值?
Sub parse_data()
Dim xRCount As Long
Dim xSht As Worksheet
Dim xNSht As Worksheet
Dim I As Long
Dim xTRrow As Integer
Dim xCol As New Collection
Dim xTitle As String
Dim xSUpdate As Boolean
Set xSht = ActiveSheet
On Error Resume Next
xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
xTitle = "A1:AD1"
xTRrow = xSht.Range(xTitle).Cells(1).Row
For I = 2 To xRCount
Call xCol.Add(xSht.Cells(I, 1).Text, xSht.Cells(I, 1).Text)
Next
xSUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
For I = 1 To xCol.Count
Call xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
Set xNSht = Nothing
Set xNSht = Worksheets(CStr(xCol.Item(I)))
If xNSht Is Nothing Then
Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I))
Else
xNSht.Move , Sheets(Sheets.Count)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Next
xSht.AutoFilterMode = False
xSht.Activate
Application.ScreenUpdating = xSUpdate
结束子
编辑以包含我需要使用的客户模板 https://www.dropbox.com/scl/fi/qb9484lmdyeo1aieqlb4m/HDTemplate.xlsx?dl=0&rlkey=6dlt1nlo8lehmnpl8cdipwbkp
【问题讨论】:
-
您似乎正在尝试重新创建一个名为 Excel 的令人发指的应用程序中已有的功能
-
目标是什么意思?工作表的名称?排序?
-
VBA 代码为 A 列中的每个唯一值创建一个新工作表。如果 A 列具有值 Tree、Cactus、Oats、Cactus,那么它将创建三个新工作表。一种用于树,一种用于仙人掌,一种用于燕麦。我需要这是 C 列而不是 A 列。
-
@Blackmagic42 明白了,如果这不起作用,请告诉我。我没有测试名称部分。