Note: The other languages of the website are Google-translated. Back to English

Jak vytvořit nové listy pro každý řádek v aplikaci Excel?

Předpokládejme, že máte tabulku skóre se všemi jmény studentů ve sloupci A. Nyní chcete vytvořit nové listy založené na těchto jménech ve sloupci A a značka na listu obsahuje jedinečná data studenta. Nebo prostě vytvořte nový list pouze pro každý řádek v tabulce bez ohledu na názvy ve sloupci A. V tomto videu získáte způsoby, jak toho dosáhnout.

Vytvořte nové listy pro každý řádek pomocí kódu VBA
Vytvořte nové listy pro každý řádek pomocí nástroje Rozdělit data v Kutools pro Excel


Vytvořte nové listy pro každý řádek pomocí kódu VBA

S následujícími kódy můžete vytvořit nový list na základě hodnot sloupců nebo jen vytvořit nové listy pro každý řádek v aplikaci Excel.

1. lis Další + F11 současně otevřete Microsoft Visual Basic pro aplikace okno.

2. V Microsoft Visual Basic pro aplikace okno, klepněte na tlačítko Vložit > Modul. A pak vložte následující kód do Modul okno.

Kód VBA: vytvořte nový list pro každý řádek na základě sloupce

Sub parse_data()
'Update by Extendoffice 2018/3/2
    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:C1"
    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
End Sub

Poznámka: A1: C1 je rozsah titulů vaší tabulky. Můžete to změnit podle svých potřeb.

3. lis F5 klíč ke spuštění kódu, poté se vytvoří nové listy po všech listech aktuálního sešitu, jak je uvedeno níže:

Pokud chcete přímo vytvořit nové listy pro každý řádek bez ohledu na hodnotu sloupce, můžete použít následující kód.

Kód VBA: Přímo vytvořte nový list pro každý řádek

Sub RowToSheet()
	Dim xRow As Long
	Dim I As Long
	With ActiveSheet
		xRow = .Range("A" & Rows.Count).End(xlUp).Row
		For I = 1 To xRow
			Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I
			.Rows(I).Copy Sheets("Row " & I).Range("A1")
		Next I
	End With
End Sub

Po spuštění kódu bude každý řádek v aktivním listu umístěn do nového listu.

Poznámka: Řádek záhlaví bude také umístěn na nový list s tímto kódem VBA.


Vytvořte nové listy pro každý řádek pomocí nástroje Rozdělit data v Kutools pro Excel

Ve skutečnosti je výše uvedená metoda komplikovaná a těžko pochopitelná. V této části vám představujeme Rozdělit data užitečnost Kutools pro Excel.

Před aplikací Kutools pro Excel, Prosím nejprve si jej stáhněte a nainstalujte.

1. Vyberte tabulku, kterou potřebujete použít k vytvoření nových listů, a poté klepněte na Kutools Plus> Plivat data. Viz snímek obrazovky:

2. V Rozdělte data do více pracovních listů dialogové okno, postupujte následovně.

A. Pro vytváření nových listů na základě hodnoty sloupce:

1). Vyberte prosím Specifický sloupec možnost a v rozevíracím seznamu zadejte sloupec, na kterém chcete rozdělit data;
2). Pokud chcete pojmenovat listy s hodnotami sloupců, vyberte Hodnoty sloupce v pravidla rozbalovací seznam;
3). Klikněte na ikonu OK knoflík. Viz screenshot:

B. Pro přímé vytváření nových listů pro každý řádek:

1). Vybrat Opravené řádky možnost, zadejte číslo 1 do krabice;
2). Vybrat Čísla řádků z pravidla rozbalovací seznam;
3). Klikněte na ikonu OK knoflík. Viz screenshot:

je vytvořen nový sešit se všemi novými listy uvnitř. Viz screenshoty níže.

Vytváření nových listů pro každý řádek na základě hodnoty sloupce:

Vytvoření nového listu pro každý řádek bez ohledu na hodnotu sloupce:

  Pokud chcete mít bezplatnou zkušební verzi (30-den) této utility, kliknutím jej stáhněte, a poté přejděte k použití operace podle výše uvedených kroků.

Vytvořte nové listy pro každý řádek pomocí nástroje Rozdělit data v Kutools pro Excel


Nejlepší kancelářské nástroje produktivity

Kutools pro Excel řeší většinu vašich problémů a zvyšuje vaši produktivitu o 80%

  • Opakované použití: Rychle vložte složité vzorce, grafy a cokoli, co jste dříve používali; Šifrovat buňky s heslem; Vytvořte seznam adresátů a posílat e-maily ...
  • Super Formula Bar (snadno upravit více řádků textu a vzorce); Rozložení pro čtení (snadno číst a upravovat velké množství buněk); Vložit do filtrovaného rozsahu...
  • Sloučit buňky / řádky / sloupce bez ztráty dat; Rozdělit obsah buněk; Zkombinujte duplicitní řádky / sloupce... Zabraňte duplicitním buňkám; Porovnat rozsahy...
  • Vyberte možnost Duplikovat nebo Jedinečný Řádky; Vyberte prázdné řádky (všechny buňky jsou prázdné); Super hledání a fuzzy hledání v mnoha sešitech; Náhodný výběr ...
  • Přesná kopie Více buněk beze změny odkazu na vzorec; Automaticky vytvářet reference do více listů; Vložte odrážky, Zaškrtávací políčka a další ...
  • Extrahujte text, Přidat text, Odebrat podle pozice, Odebrat mezeru; Vytváření a tisk mezisoučtů stránkování; Převod mezi obsahem buněk a komentáři...
  • Super filtr (uložit a použít schémata filtrů na jiné listy); Rozšířené řazení podle měsíce / týdne / dne, frekvence a dalších; Speciální filtr tučnou kurzívou ...
  • Kombinujte sešity a pracovní listy; Sloučit tabulky na základě klíčových sloupců; Rozdělte data do více listů; Dávkový převod xls, xlsx a PDF...
  • Více než 300 výkonných funkcí. Podporuje Office / Excel 2007-2021 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Plné funkce 30denní bezplatná zkušební verze. 60denní záruka vrácení peněz.
karta kte 201905

Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50%a snižuje stovky kliknutí myší každý den!
officetab dno
Komentáře (33)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Dobrý den, chci vytvořit pracovní listy založené na mém souboru šablony Myformat a pojmenovat je podle údajů v prvním sloupci. Upravil jsem kód VBA následovně, ale generuje příliš mnoho prázdných listů. Můžete mi prosím pomoci zastavit generování prázdných listů. Děkuji. Kumar Sub AddSheets() Dim cell As Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Set wsWithSheetNames = Sada ActiveSheet wbToAddSheetsTo = Aktivní sešit pro každou buňku V wsWithSheetNames.2Aheets.wsWithSheetNames.165Aheets.w Add After:=ActiveSheet Sheets.Add Type:= _ "C:\Users\Dimple\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" Při chybě Obnovit další ActiveSheet.Name = cell.Value If Err.Number = 1004 Then Debug.Print cell.Value & "již použito jako název listu" End If On Chyba PřejítNa 0 End With Next Cell End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Vždy dostanu 2 listy na jedinečný záznam na řádku A. Nějaký nápad proč? Také jak obtížné by bylo předřadit celkový počet řádků, které vygenerovaný list vytvoří, k názvu listu. Díky moc! Dejte mi vědět, jestli přijímáte dary.
Tento komentář byl moderátorem webu minimalizován
Ahoj, chci použít svou šablonu souboru exel MyFormat pro generování listů a pojmenování listů podle údajů v prvním sloupci. Následující kód VBA funguje dobře pro generování listů podle MyFormat. Ale také generuje stovky prázdných listů na normálním excelovém chrámu. Mohl by mi prosím nějaký subjekt pomoci zastavit generování přebytečných prázdných listů. Díky Kumar Sub AddSheets() Dim cell As Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Set wsWithSheetNames = ActiveSheet Set wbToAddSheetsTo = AktivníSešit pro každou buňku V wsWithSheet"Adheets. .Add After:=ActiveSheet Sheets.Add Type:= _ "C:\Users\Dreamline\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" Při chybě Obnovit další ActiveSheet.Name = cell.Value If Err.Number = 2 Potom Debug.Print cell.Value & "již použito jako název listu" End If On Chyba PřejítNa 165 End With Next Cell End Sub
Tento komentář byl moderátorem webu minimalizován
Názvy listů musí být kratší nebo rovné třiceti znakům.
Není to příliš běžné, ale jinak kód vygeneruje výchozí prázdný list „List #“.

Vytvořte nový list, kterým projde váš kód analýzy, a odkazujte na první sloupec takto:
=IF(NEBO('Odkazovaný originál'!B1<>"", LEN('Odkazovaný originál'!B1)>30), VLEVO('Odkazovaný originál'!B1,30),'Odkazovaný originál'!B1)


Na zbytek listu buď zkopírujte, nebo na něj odkazujte. Pokud máte nějaké problémy s odkazem na jiný list, ujistěte se, že sloupec neobsahuje omezení ověřování dat.
Tento komentář byl moderátorem webu minimalizován
Moc děkuji za zveřejnění tohoto!!!! Fungovalo jako kouzlo. Můžete vysvětlit, jak funguje první sada kódu?
Tento komentář byl moderátorem webu minimalizován
Děkuji vám za to!



Existuje v kódu VBA přesto pojmenování výsledných listů z dat řádku prvního a druhého sloupce dohromady?



takže pro váš příklad by se list 2 automaticky jmenoval "linda 100"
Tento komentář byl moderátorem webu minimalizován
Milá Joyce,
Děkuji za váš komentář! Doufám, že níže uvedený skript VBA vám může pomoci.

Sub parse_data()
Dim xRCcount As Long
Dim xSht jako pracovní list
Dim xNSht jako pracovní list
Dim I As Long
Dim xTRrow As Integer
Dim xCol jako nová kolekce
Dim xTitle As String
On Error Resume Next
Application.ScreenUpdating = False
Nastavit xSht = ActiveSheet
xRCount = xSht.UsedRange.End(xlDown).Řádek
xTitle = "A1:B1"
xTRrow = xSht.Range(xTitle).Row
Pro I = 2 To xRCcount
Zavolejte xCol.Add(CStr(xSht.Cells(I, 1)), CStr(xSht.Cells(I, 1)))
další
Debug.Print xCol.Count
Pro I = 1 To xCol.Count
Volání xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
Nastavit xNSht = nic
Set xNSht = Worksheets(CStr(xCol.Item(I)))
Pokud xNSht není nic, pak
Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I) & xSht.Cells(I + 1, 2))
Jiný
xNSht.Move , Sheets(Sheets.Count)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
další
xSht.AutoFilterMode = False
xSht.Activate
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Bylo to velmi užitečné, přesně to, co jsem hledal. Dík!
Tento komentář byl moderátorem webu minimalizován
Tento kód je velmi užitečný a téměř to, co jsem hledal.
Ale lze to upravit tak, aby byly dva listy -
List 1 je Data - tabulka dat, přičemž sloupec A je název
List 2 je šablona s mnoha poli, která vyžadují vyplnění
V co jsem doufal, je spuštění makra, což bude
1 Zkopírujte a vložte šablonu do stejného souboru, pojmenujte list jako název v buňce A1
2 Zkopírujte buňku B1 a poté ji vložte do vybraného pole v nové šabloně
3 opakujte v řadě 1, dokud nebude prázdná
4 pak opakujte pro řadu 2 a každou řadu až do konce.
Výsledkem je soubor s x no. listy všechny stejné jako šablona, ​​se všemi vyplněnými poli.
Zdědil jsem soubor, který funguje jinak, extrahuje data ze šablon do tabulky, ale nelze to vrátit.....
Tento komentář byl moderátorem webu minimalizován
milý Same,
Bylo by hezké, kdybyste sem mohli připojit svůj pracovní sešit.
Svůj soubor můžete nahrát pomocí tlačítka Nahrát soubory níže.
Tento komentář byl moderátorem webu minimalizován
Dobrý den, zkoušel jsem použít váš kód, ale zobrazuje se chyba
Run-time error '1004':
Chyba definovaná aplikací nebo objektem
Nemám žádné znalosti o VBA (nebo o jakékoli jiné technologii), ale pokud stisknete ladění, zvýrazní řádek 11 xRCount=xSht.Cells(xSht.Rows.Count,1). Konec(xIUp).Řádek
Pracuji s velkým souborem, který má 127 sloupců a 337 řádků (řádky se budou lišit sloupce nebudou) a je to seznam s čísly Id a jejich podrobnostmi.
Změnil jsem rozsah, jak jste si všimli, ale stále to nefunguje Používám Excel 2010, můžete mi prosím říct, jak to zprovoznit, pokud je to možné
Děkuji
Tento komentář byl moderátorem webu minimalizován
milá Beatriz,
Kód je aktualizován řešením problému. Zkuste to znovu. Děkuji za váš komentář.
Tento komentář byl moderátorem webu minimalizován
Dobrý den, myslím, že je zde něco užitečného pro mou situaci, ale jsem schopen udělat VBA nebo skript, doufám, že můžete pomoci.
Mám šablonu s mnoha buňkami k vyplnění dat a bude zde vyhledávací klíč (není jedinečný), který bych chtěl zadat do šablony. Na základě vyhledávacího klíče jsou vyhledána data a odpovídající data o shodném klíči jsou načtena a vyplněna do šablony. Vyplněná šablona se uloží do nového listu. Může být více než 1 záznam zápasů. Potřebuji, aby skript pokračoval v prohledávání seznamu, dokud nebudou vybrány všechny shody a vytvořen určitý počet nových listů.
Tento komentář byl moderátorem webu minimalizován
Ahoj, existuje způsob, jak zachovat řádek záhlaví na každém novém listu? (zakroužkováno červeně na mé příloze)

Kód vezme všechny řádky z mého hlavního listu a přenese je do nových listů, což je skvělé. Ale chci si ponechat svou "hlavní" hodnotu záhlaví (zakroužkovanou červeně) v horní části každého nového listu. Dík!



Odkazuji na tento kód shora:

Sub RowToSheet()
Dim xRow As Long
Dim I As Long
S ActiveSheet
xRow = .Range("A" & Rows.Count).End(xlUp).Row
Pro I = 1 To xRow
Worksheets.Add(, Sheets(Sheets.Count)).Name = "Řádek" a já
.Rows(I).Copy Sheets("Row" & I).Range("A1")
Příště já
Konec s
End Sub
Tento komentář byl moderátorem webu minimalizován
Skvělý kód, ale mohl bych získat nějakou pomoc, pokud jsou moje data ve sloupci G namísto sloupce A? co musím změnit, abych měl data ze sloupce G na jiné kartě?

Díky
Tento komentář byl moderátorem webu minimalizován
Toto je skvělý kód. Mnohokrát děkujeme brain-boxům na OfficeExtend!! Existuje vůbec tento kód, který by mohl být mírně upraven tak, aby vytvořil samostatné listy pro každý *sloupec* místo řádku? Přikládám obrázek toho, čeho se snažím dosáhnout. Je to možné? S přátelským pozdravem.
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Neviděl jsem tu tvou fotku.
Tento komentář byl moderátorem webu minimalizován
Ahoj, jak upravit kód, pokud je pole mého jména ve sloupci C
Tento komentář byl moderátorem webu minimalizován
Ahoj Abdul Basit,
Níže uvedený kód VBA vám může pomoci. Zkuste to prosím.
V řádku: xCName = "3", 3 označuje číslo sloupce (zde je sloupec C) v Excelu. Můžete jej změnit na libovolné číslo sloupce, jak potřebujete.

Sub parse_data()
'Aktualizovat od Extendoffice 2018 / 3 / 2
Dim xRCcount As Long
Dim xSht jako pracovní list
Dim xNSht jako pracovní list
Dim I As Long
Dim xTRrow As Integer
Dim xCol jako nová kolekce
Dim xTitle As String
Dim xSUpdate jako Boolean
Dim xCName jako celé číslo
Dim xTA, xRA, xSRg1 jako řetězec
Nastavit xSht = ActiveSheet
On Error Resume Next
xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
xTitle = "A1:C1"
xCName = "3" 'Změňte toto číslo na číslo sloupce, na základě kterého vytvoříte nové listy
xTRrow = xSht.Range(xTitle).Cells(1).Row
Pro I = 2 To xRCcount
Zavolejte xCol.Add(xSht.Cells(I, xCName).Text, xSht.Cells(I, xCName).Text)
další
xSUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
xSRg = xSht.Cells(1, xCName).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Pro I = 1 To xCol.Count
Zavolejte xSht.Range(xTitle).AutoFilter(xCName, CStr(xCol.Item(I)))
Nastavit xNSht = nic
Set xNSht = Worksheets(CStr(xCol.Item(I)))
Pokud xNSht není nic, pak
Set xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I))
Jiný
xNSht.Move , Sheets(Sheets.Count)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
další
xSht.AutoFilterMode = False
xSht.Activate
Application.ScreenUpdating = xSUpdate
End Sub
Tento komentář byl moderátorem webu minimalizován
Skvělý kód VBA, který udělá tento trik.

Jak jej mohu upravit tak, aby nekopíroval první sloupec? A odstranit název sloupce?

Pozdravy
Tento komentář byl moderátorem webu minimalizován
Mohu prosím získat pomoc, jak automaticky pojmenovat listy pomocí konkrétního sloupce. Toto je pro řádek až list VBA. Viz. níže

Sub RowToSheet()

Dim xRow As Long

Dim I As Long

S ActiveSheet

xRow = .Range("A" & Rows.Count).End(xlUp).Row

Pro I = 1 To xRow

Worksheets.Add(, Sheets(Sheets.Count)).Name = "Řádek" a já

.Rows(I).Copy Sheets("Row" & I).Range("A1")

Příště já

Konec s

End Sub
Tento komentář byl moderátorem webu minimalizován
Nevadí, byly to skryté mezery na konci. Použil jsem funkci TRIM a vyčistil to. Mít počet řádků (počet řádků opravdu tak, že řádky -1 připojené k listu by bylo úžasné)
Tento komentář byl moderátorem webu minimalizován
Jak odkazovat na použití výše uvedeného kódu (kredit)? Je možné kód upravit?
Tento komentář byl moderátorem webu minimalizován
Dobrý den, toto je otevřená komunikační platforma. Kód může odkazovat a upravovat.
Tento komentář byl moderátorem webu minimalizován
Nana
86
2
Tento komentář byl moderátorem webu minimalizován
Ahoj! Právě jsem použil tento kód a fungovalo to! Kromě vytvoření nového listu pro každý záznam ho chci transponovat do sloupců a nemůžu na to přijít. Takže pro výše uvedený příklad by výstup pro Nana vypadal takto - Název produktu dívkaSkóre 86Ne. 2
Tento komentář byl moderátorem webu minimalizován
Dobrý den, použil jsem tento kód a fungoval, ale pokud chci vybrat více než jeden řádek v záhlaví, co se změní v kódu? V listu mám více řádků, které chci v každém listu.
Tento komentář byl moderátorem webu minimalizován
Dobrý den, přišel jste na to jak?
Tento komentář byl moderátorem webu minimalizován
Ahoj, existuje kód, který by při každém spuštění makra přidal pouze 1 nový list, např. při prvním spuštění nového listu by byl nový list pojmenován v obsahu buňky A1, při druhém spuštění makra by byl nový list pojmenován na obsah A1 atd. díky v očekávání
Zatím zde nejsou žádné komentáře
Načíst další
Zanechat své připomínky
Odesílání jako host
×
Ohodnoťte tento příspěvek:
0   Postavy
Doporučená umístění

Sociální sítě

Copyright © 2009 - www.extendoffice.com. | Všechna práva vyhrazena. Poháněno ExtendOffice. | |. | Sitemap
Microsoft a logo Office jsou ochranné známky nebo registrované ochranné známky společnosti Microsoft Corporation ve Spojených státech a / nebo jiných zemích.
Chráněno Sectigo SSL