【发布时间】:2015-11-02 19:13:59
【问题描述】:
我需要将现有的 Excel 工作表拆分为不同的工作表。具体来说,我需要创建新的工作表,以便将 A 列(在原始工作表中)的单元格中具有相同内容的所有行放在同一个工作表中。 我在网上找到了不同的 VBA 代码,但它们似乎都不适合我。
没有错误的是下面那个。它正在创建不同的工作表,并根据原始工作表中 A 列中包含的信息对其进行命名,但它不会拆分行(所有工作表最终都具有相同的数据)。
你能帮忙吗? 谢谢!
Sub parse_data()
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
vcol = 1
Set ws = Sheets("Sheet1")
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = "A1:C1"
titlerow = ws.Range(title).Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
For i = 2 To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
Sheets(myarr(i) & "").Columns.AutoFit
Next
ws.AutoFilterMode = False
ws.Activate
End Sub
【问题讨论】:
-
仅供参考,On Error Resume Next 非常危险..
-
A 列的数据是什么样的? (所以我可以创建一些示例数据来尝试查看)。
-
您要复制还是移动数据?换句话说,它应该保留在原始工作表上吗?
-
@BruceWayne 每个单元格都包含字母(始终相同)和数字的组合。在具有相同组合的多个行之后,数字会发生变化。目前它们在 之前和之后,但如果有帮助,我可以将它们删除。现在它们看起来像这样:
、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 等(考虑到每个逗号后面都是一个新单元格) -
@MatthewD 没关系,不管它更容易:)