You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Excel VBA拆分代码:按C列拆分数据并以AF2值命名工作表

问题1修改方案(拆分列从A列改为C列)

你需要修改代码中3处对应A列(列索引为1)的参数,替换为C列对应的列索引3即可:

  • 统计最后一行的代码:xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row 把1改为3
  • 收集唯一值的循环代码:Call xCol.Add(xSht.Cells(I, 1).Text, xSht.Cells(I, 1).Text) 把两处1都改为3
  • 筛选数据的代码:Call xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I))) 把1改为3

问题2修改方案(新工作表以AF2单元格值命名)

需要调整命名逻辑的执行顺序,先完成数据复制再读取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
Dim xNewName As String
Set xSht = ActiveSheet
On Error Resume Next
' 按C列统计最后一行
xRCount = xSht.Cells(xSht.Rows.Count, 3).End(xlUp).Row
xTitle = "A1:AD1"
xTRrow = xSht.Range(xTitle).Cells(1).Row
For I = 2 To xRCount
    ' 收集C列唯一值
    Call xCol.Add(xSht.Cells(I, 3).Text, xSht.Cells(I, 3).Text)
Next
xSUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
For I = 1 To xCol.Count
    ' 按C列筛选
    Call xSht.Range(xTitle).AutoFilter(3, CStr(xCol.Item(I)))
    Set xNSht = Nothing
    ' 新建工作表
    Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
    ' 复制筛选后的数据
    xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
    xNSht.Columns.AutoFit
    ' 读取AF2的值作为工作表名,处理非法字符、空值和长度限制
    xNewName = xNSht.Range("AF2").Text
    If xNewName = "" Then xNewName = "未命名_" & I
    xNewName = Left(Replace(Replace(Replace(Replace(Replace(xNewName, "/", ""), "\", ""), "?", ""), "*", ""), ":", ""), 31)
    On Error Resume Next
    xNSht.Name = xNewName
    On Error GoTo 0
Next
xSht.AutoFilterMode = False
xSht.Activate
Application.ScreenUpdating = xSUpdate
End Sub

内容的提问来源于stack exchange,提问作者Blackmagic42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:15:02