2 根据特定列将 Excel 工作表的内容拆分为多个工作簿的快速方法

立即分享:

有时,在数据分析中,您可能需要将一个Excel工作表的内容按照特定的列拆分到多个Excel工作簿中。 现在,在这个 post,我们将教您 2 种快速获取方法。

许多用户经常需要将包含大量数据行的 Excel 工作表根据特定列拆分为多个单独的 Excel 工作簿。 例如,这是我的示例 Excel 工作表。 我想根据“单许可证价格(美元)”列将此工作表的数据拆分到多个工作簿中。

示例 Excel 工作表

通常,您会倾向于使用以下方法 1 来手动过滤和复制数据。 但是,如果过滤器选项太多,那将是相当乏味和愚蠢的。 因此,我们在这里也展示了一种更方便的方法——方法2,它使用VBA。 现在,继续阅读以详细了解它们。

方法一:过滤后复制内容到单独的Excel工作簿

  1. 首先,在特定列中选择一个单元格,例如我自己的实例中的“Cell B1”。
  2. 然后,转到“数据”选项卡并单击“过滤器”按钮。筛选资料
  3. 接下来,单击列标题中的“向下箭头”按钮以显示过滤器选项列表。
  4. 现在,取消选中“(全选)”选项。取消选中“全选”
  5. 之后,您可以选择一个过滤器选项,例如我的示例中的“29.95”,然后单击“确定”。
  6. 立刻只剩下 B 列中值为“29.95”的数据。只留下过滤后的数据
  7. 然后,复制过滤后的数据并将其粘贴到新的 Excel 工作簿中。复制和粘贴内容
  8. 后面用同样的方法将其他数据拆分到单独的Excel工作簿中。

方法二:通过VBA批量拆分内容到多个Excel工作簿

  1. 首先,确保特定工作表已打开。
  2. 接下来,根据“如何在 Excel 中运行 VBA 代码“。
  3. 然后,将以下代码放入“ThisWorkbook”项目中。
Sub SplitSheetDataIntoMultipleWorkbooksBasedOnSpecificColumn()
    Dim objWorksheet As Excel.Worksheet
    Dim nLastRow, nRow, nNextRow As Integer
    Dim strColumnValue As String
    Dim objDictionary As Object
    Dim varColumnValues As Variant
    Dim varColumnValue As Variant
    Dim objExcelWorkbook As Excel.Workbook
    Dim objSheet As Excel.Worksheet
 
    Set objWorksheet = ActiveSheet
    nLastRow = objWorksheet.Range("A" & objWorksheet.Rows.Count).End(xlUp).Row
 
    Set objDictionary = CreateObject("Scripting.Dictionary")
 
    For nRow = 2 To nLastRow
        'Get the specific Column
        'Here my instance is "B" column
        'You can change it to your case
        strColumnValue = objWorksheet.Range("B" & nRow).Value
 
        If objDictionary.Exists(strColumnValue) = False Then
           objDictionary.Add strColumnValue, 1
        End If
    Next
 
    varColumnValues = objDictionary.Keys
 
    For i = LBound(varColumnValues) To UBound(varColumnValues)
        varColumnValue = varColumnValues(i)
 
        'Create a new Excel workbook
        Set objExcelWorkbook = Excel.Application.Workbooks.Add
        Set objSheet = objExcelWorkbook.Sheets(1)
        objSheet.Name = objWorksheet.Name
 
        objWorksheet.Rows(1).EntireRow.Copy
        objSheet.Activate
        objSheet.Range("A1").Select
        objSheet.Paste
 
        For nRow = 2 To nLastRow
            If CStr(objWorksheet.Range("B" & nRow).Value) = CStr(varColumnValue) Then
               'Copy data with the same column "B" value to new workbook
               objWorksheet.Rows(nRow).EntireRow.Copy
  
               nNextRow = objSheet.Range("A" & objWorksheet.Rows.Count).End(xlUp).Row + 1
               objSheet.Range("A" & nNextRow).Select
               objSheet.Paste
               objSheet.Columns("A:B").AutoFit
            End If
        Next
    Next
End Sub

VBA代码-根据特定列将Excel工作表的内容拆分为多个工作簿

  1. 之后,单击工具栏中的“运行”图标或按“F5”键按钮。
  2. 宏完成后,将使用源 Excel 工作表中的拆分数据创建单独的 Excel 工作簿。新的 Excel 工作簿
  3. 每个工作簿都将类似于以下屏幕截图。单独的新 Excel 工作簿

对比

  优势 缺点
方法1 1.所有Excel用户都易于操作 如果过滤器选择太多会很麻烦
2.如果过滤器选择很少,则快速
方法2 无论过滤器选择的数量如何,都比方法 1 更有效 对于VBA新手来说有点难操作

防止 Excel 数据丢失

尽管 MS Excel 变得越来越先进和复杂,但它仍然会不时地由于各种因素而崩溃,例如恶意的第三方加载项或人为错误等。 由于Excel崩溃会直接导致 Excel 腐败,为避免 Excel 数据丢失,您必须定期备份 Excel 文件。 否则,您需要应用Excel修复工具,例如 DataNumen Excel Repair 修复损坏的 Excel 文件。

作者简介:

Shirley Zhang 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 SQL Server 修复 和 outlook 修复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。