Rozdělte list aplikace Excel na více souborů podle sloupce pomocí VBA

Anonim

Máte velká data na listu Excelu a potřebujete jej distribuovat na více listů na základě některých dat ve sloupci? Tento velmi základní úkol, ale časově náročný.

Mám například tato data. Tato data mají sloupec s názvem Datum, spisovatel a Titul. Sloupec Spisovatel má jméno autora příslušného titulu. Chci dostat data každého spisovatele do samostatných listů.

Chcete -li to provést ručně, musím provést následující:

  1. Filtrujte jedno jméno
  2. Zkopírujte filtrovaná data
  3. Přidejte list
  4. Vložte data
  5. Přejmenujte list
  6. Opakujte všech výše uvedených 5 kroků pro každý.

V tomto příkladu mám pouze tři jména. Představte si, kdybyste měli stovky jmen. Jak byste rozdělili data na různé listy? Zabere to spoustu času a také vás to vyčerpá.
Chcete -li automatizovat výše uvedený proces rozdělení listu na více listů, postupujte takto.

  • Stiskněte Alt+F11. Tím se otevře VB Editor pro Excel
  • Přidat nový modul
  • Zkopírujte pod kód v modulu.
 Dílčí rozdělení do listů () With Application .ScreenUpdating = False .DisplayAlerts = False End With ThisWorkbook.Activate Sheet1.Activate 'clearing filter if any On Error Resume Next Sheet1.ShowAllData On Error GoTo 0 Dim lsrClm As Long Dim lstRow As Long' countting last used row lstRow = Cells (Rows.Count, 1). End (xlUp) .Row Dim uniques As Range Dim clm As String, clmNo As Long On Error GoTo handler clm = Application.InputBox ("From which column you want create files" & vbCrLf & "Např. A, B, C, AB, ZA atd. ") ClmNo = Range (clm &" 1 "). Column Set uniques = Range (clm &" 2: "& clm & lstRow) 'Calling Remove Duplicates to get Unique Names Set uniques = RemoveDuplicates (uniques) Zavolejte CreateSheets (uniques, clmNo) pomocí aplikace .ScreenUpdating = True .DisplayAlerts = True .AlertBeforeOverwriting = True .Calculation = xlCalculationAutomatic Konec s Sheet1.Activate MsgBox "Well Done!" Ukončete obslužnou rutinu Sub Data.ShowAllData: s aplikací .ScreenUpdating = True .DisplayAlerts = True .AlertBeforeOverwriting = True .Calculation = xlCalculationAutomatic Konec s End Sub Funkce RemoveDuplicates (uniques As Range) As Range ThisWorkbook.Activate Sheets.Add On Error Resume Next ActiveSheet.Name = "uniques" Sheets ("uniques"). Activate On Error GoTo 0 uniques.Copy Cells (2, 1) .Activate ActiveCell.PasteSpecial xlPasteValues ​​Range ("A1") .Value = "uniques" Dim lstRow As Long lstRow = Cells (Rows.Count, 1) .End (xlUp) .Row Range ("A2: A" & lstRow) .Select ActiveSheet.Range (Selection.Address) .RemoveDuplicates Columns : = 1, Záhlaví: = xlNo lstRow = Buňky (Rows.Count, 1). End (xlUp) .Row Set RemoveDuplicates = Range ("A2: A" & lstRow) End Function Sub CreateSheets (uniques As Range, clmNo As Long) Dim lstClm as Long Dim lstRow As Long for each unique In uniques Sheet1.Activate lstRow = Cells (Rows.Count, 1) .End (xlUp) .Row lstClm = Cells (1, Columns.Count) .End (xlToLeft) .Column Dim dataSet As Range Set dataSet = Range (Cells (1, 1), Cells (lstRow, lstClm)) dataSet.AutoFilter field: = clmNo, Criteria1: = unique.Value lstRow = Cells (Rows.Count, 1) .End ( xlUp) .Row lstClm = Cells (1, Columns.Count) .End (xlToLeft) .Column Debug.Print lstRow; lstClm Set dataSet = Range (Cells (1, 1), Cells (lstRow, lstClm)) dataSet.Copy Sheets.Add ActiveSheet.Name = unique.Value2 ActiveCell.PasteSpecial xlPasteAll Next unique End Sub 

Až poběžíš SplitIntoSheets () podle postupu bude list rozdělen na více listů podle daného sloupce. Můžete přidat tlačítko na list a přiřadit mu toto makro.

Jak to funguje
Výše uvedený kód má dva postupy a jednu funkci. Jsou dva postupy SplitIntoSheets (), CreateSheets (uniques As Range, clmNo As Long) a jedna funkce je RemoveDuplicates (uniques As Range) As Range.

První postup je SplitIntoSheets (). Toto je hlavní postup. Tento postup nastavuje proměnné a Odebrat duplikáty Chcete -li získat jedinečné názvy z daného sloupce a poté je předáte do CreateSheets pro vytváření listů.

Odebrat duplikáty bere jeden argument, který je rozsah, který obsahuje název. Odstraní duplikáty od nich a vrátí objekt rozsahu, který obsahuje jedinečná jména.

Nyní CreateSheets je nazýván. Chce to dva argumenty. Nejprve jedinečné názvy a za druhé sloupec č. ze kterého to bude fitler data. Nyní CreateSheets přebírá každé jméno od unikátů a filtruje číslo daného sloupce podle každého jména. Zkopíruje filtrovaná data, přidá list a data tam vloží. A vaše data jsou během několika sekund rozdělena na jiný list.

Soubor si můžete stáhnout zde.
Rozdělit na listy

Jak soubor použít:

    • Zkopírujte svá data na List1. Ujistěte se, že začíná od A1.

    • Klikněte na tlačítko Rozdělit na listy
    • Zadejte písmeno sloupce, od kterého chcete rozdělit. Klikněte na Ok.

    • Zobrazí se taková výzva. Váš list je rozdělen.



Doufám, že vám článek o rozdělení dat na samostatné listy pomohl. Máte -li jakékoli pochybnosti o této nebo jakékoli jiné funkci aplikace Excel, neváhejte se zeptat v níže uvedené sekci komentáře.

Stáhnout soubor:

Rozdělte list aplikace Excel na více souborů podle sloupce pomocí VBA