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

Hur skapar jag nya ark för varje rad i Excel?

Om du antar att du har en poängtabell med alla elevers namn i kolumn A. Nu vill du skapa nya ark baserat på dessa namn i kolumn A, och göra per ark innehåller en unik elevs data. Eller skapa bara ett nytt ark för bara varje rad i tabellen utan att ta hänsyn till namnen i kolumn A. I den här videon får du metoder för att uppnå det.

Skapa nya ark för varje rad med VBA-kod
Skapa nya ark för varje rad med verktyget Split Data för Kutools för Excel


Skapa nya ark för varje rad med VBA-kod

Med följande koder kan du skapa ett nytt ark baserat på kolumnvärden eller bara skapa nya ark för varje rad i Excel.

1. Tryck andra + F11 samtidigt för att öppna Microsoft Visual Basic för applikationer fönster.

2. I Microsoft Visual Basic för applikationer fönstret klickar Insert > Modulerna. Och klistra sedan in följande kod i Modulerna fönster.

VBA-kod: skapa ett nytt ark för varje rad baserat på kolumn

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

Anmärkningar: A1: C1 är titelområdet för din tabell. Du kan ändra det baserat på dina behov.

3. Tryck F5 nyckel för att köra koden, sedan skapas nya kalkylblad efter alla kalkylblad i den aktuella arbetsboken som nedan skärmdump:

Om du vill skapa nya ark direkt för varje rad utan att ta hänsyn till kolumnvärdet kan du använda följande kod.

VBA-kod: Skapa direkt ett nytt ark för varje rad

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

Efter att ha kört koden placeras varje rad i det aktiva kalkylbladet i ett nytt kalkylblad.

Anmärkningar: Rubrikraden kommer också att placeras i ett nytt ark med denna VBA-kod.


Skapa nya ark för varje rad med verktyget Split Data för Kutools för Excel

Egentligen är ovanstående metod komplicerad och svår att förstå. I det här avsnittet presenterar vi dig Split data nytta av Kutools för Excel.

Innan du ansöker Kutools för ExcelBer ladda ner och installera det först.

1. Välj den tabell som du behöver använda för att skapa nya ark och klicka sedan på Kutools Plus> Spitdata. Se skärmdump:

2. I Dela data i flera kalkylblad dialogrutan, gör så här.

A. För att skapa nya ark baserat på kolumnvärde:

1). Välj Specifik kolumn alternativ och ange en kolumn som du vill dela data baserat på i listrutan;
2). Om du vill namnge kalkylblad med kolumnvärden, välj Värden på kolumnen i regler rullgardinsmeny
3). Klicka på OK knapp. Se skärmdump:

B. För att direkt skapa nya ark för varje rad:

1). Välj Fasta rader alternativet, ange nummer 1 i lådan;
2). Välj Radnummer från regler rullgardinsmeny
3). Klicka på OK knapp. Se skärmdump:

en ny arbetsbok skapas med alla nya ark inuti. Se skärmdumpar nedan.

Skapa nya ark för varje rad baserat på kolumnvärde:

Skapa nytt ark för varje rad utan att ta hänsyn till kolumnvärde:

  Om du vill ha en gratis provperiod (30-dag) för detta verktyg, klicka för att ladda ner den, och gå sedan till för att tillämpa operationen enligt ovanstående steg.

Skapa nya ark för varje rad med verktyget Split Data för Kutools för Excel


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (33)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag vill skapa kalkylblad baserat på min mallfil Myformat och namnge dem enligt den första kolumndata. Jag anpassade VBA-koden enligt följande, men den genererar för många tomma ark. Kan du snälla hjälpa mig att sluta generera tomma ark. Tack. Kumar Sub AddSheets() Dim cell As Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Set wsWithSheetNames = ActiveSheet Set wbToAddSheetsTo = ActiveWorkbook For Every cell In wsWithSheetNames.Range:AsheetToSheet. Lägg till efter:=ActiveSheet Sheets.Add Type:= _ "C:\Users\Dimple\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" Vid fel Fortsätt Nästa ActiveSheet.Name = cell.Value If Err.Number = 2 Då Debug.Print cell.Value & "används redan som ett arknamn" End If On Error GoTo 165 End With Next cell End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Jag får alltid 2 ark per unik post på en rad. Någon aning om varför? Också hur svårt skulle det vara att lägga den totala mängden rader som det genererade arket skapar till arknamnet. Tack så mycket! Meddela mig om du tar emot donationer.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag vill använda min exel-filmall MyFormat för att generera kalkylblad och namnge kalkylbladen efter data i den första kolumnen. Följande VBA-kod fungerar ok för att generera kalkylbladen enligt MyFormat. Men det genererar hundratals tomma ark på normala Excel-tempel också. Kan någon snälla hjälpa mig att sluta generera överflödiga tomma ark. Tack Kumar Sub AddSheets() Dim cell As Excel.Range Dim wsWithSheetNames As Excel.Worksheet Dim wbToAddSheetsTo As Excel.Workbook Set wsWithSheetNames = ActiveSheet Set wbToAddSheetsTo = ActiveWorkbook For Every cell In wsWithAsheetsheets.WithASheetsTos. .Add After:=ActiveSheet Sheets.Add Type:= _ "C:\Users\Dreamline\AppData\Roaming\Microsoft\Templates\MyFormat.xltx" Vid fel Fortsätt Nästa ActiveSheet.Name = cell.Value If Err.Number = 2 Sedan Debug.Print cell.Value & "används redan som ett arknamn" End If On Error GoTo 165 End With Next cell End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Kalkylbladsnamn måste vara mindre än eller lika med trettio tecken långa.
Inte särskilt allmänt känt, men annars kommer koden att mata ut ett standardtomt "Sheet #"-kalkylblad.

Skapa ett nytt kalkylblad som din analyskod kommer att köras igenom och referera till den första kolumnen enligt följande:
=OM(ELLER('Refererat original'!B1<>"", LEN('Refererat original'!B1)>30), LEFT('Refererat original'!B1,30),'Refererat original'!B1)


Antingen kopiera eller hänvisa till resten av arket som du vill. Se till att kolumnen är fri från datavalideringsrestriktioner om du har problem med att referera till det andra kalkylbladet.
Denna kommentar minimerades av moderatoren på webbplatsen
Tack så mycket för att du postade detta!!!! Fungerade som en smäck. Kan du förklara hur den första uppsättningen kod fungerar?
Denna kommentar minimerades av moderatoren på webbplatsen
Tack för det här!



I VBA-koden finns det ändå att namnge de resulterande arken från den första och andra kolumnradens data kombinerade?



så för ditt exempel skulle blad 2 automatiskt heta "linda 100"
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Joyce,
Tack för din kommentar! Hoppas att nedanstående VBA-skript kan hjälpa dig.

Sub parse_data()
Dim xRCount As Long
Dim xSht Som arbetsblad
Dim xNSht Som arbetsblad
Dim I As Long
Dim xTRrow Som heltal
Dim xCol Som ny kollektion
Dim xTitle As String
On Error Resume Next
Application.ScreenUpdating = False
Ställ in xSht = ActiveSheet
xRCount = xSht.UsedRange.End(xlDown).Row
xTitle = "A1:B1"
xTRrow = xSht.Range(xTitle).Row
För I = 2 Till xRCount
Anrop xCol.Add(CSt(xSht.Cells(I, 1)), CStr(xSht.Cells(I, 1)))
Nästa
Debug.Print xCol.Count
För I = 1 Till xCol.Count
Anrop xSht.Range(xTitle).AutoFilter(1, CStr(xCol.Item(I)))
Ställ in xNSht = Ingenting
Ställ in xNSht = Worksheets(CSr(xCol.Item(I)))
Om xNSht är ingenting då
Ställ in xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I) & xSht.Cells(I + 1, 2))
annars
xNSht.Move , Sheets(Sheets.Count)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Nästa
xSht.AutoFilterMode = Falskt
xSht.Aktivera
Application.ScreenUpdating = True
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Detta var oerhört hjälpsamt, precis vad jag letade efter. Tack!
Denna kommentar minimerades av moderatoren på webbplatsen
Den här koden är mycket användbar och nästan vad jag letade efter.
Men kan det justeras så att det finns två ark -
Blad 1 är Data - en datatabell där kolumn A är namnet
Blad 2 är en mall, med många fält som kräver ifyllning
Det jag hoppades var att köra ett makro, vilket kommer
1 Kopiera-klistra in mallen, i samma fil, namnge arket som namnet i cell A1
2 Kopiera cell B1 och förbi sedan till ett markerat fält i den nya mallen
3 upprepa längs rad 1 tills den är tom
4 upprepa sedan för rad 2 och varje rad till slutet.
Resultatet är en fil med x-nr. arken är likadana som mallen, med alla fält ifyllda.
Jag ärvde en fil som fungerar åt andra hållet, extraherar data från mallar till en tabell, men kan inte vända den.....
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Sam,
Skulle vara trevligt om du kunde bifoga din arbetsbok här.
Du kan ladda upp din fil med knappen Ladda upp filer nedan.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Jag försökte använda din kod men jag får ett felmeddelande
Körtidsfel '1004':
Programdefinierat eller objektdefinierat fel
Jag har ingen kunskap om VBA (eller någon teknik för den delen) men om en tryckfelsökning framhäver rad 11 xRCount=xSht.Cells(xSht.Rows.Count,1). Slut(xIUp). Rad
Jag arbetar med en stor fil som har 127 kolumner och 337 rader (rader kommer att variera kolumner kommer inte) och det är en lista med I'd-nummer och deras detaljer.
Jag ändrade intervallet som du noterade men det fungerar fortfarande inte. Jag använder Excel 2010 kan du berätta för mig hur man får det att fungera om möjligt
Tack
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Beatriz,
Koden uppdateras med problemlösningen. Försök igen. Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag tror att det finns något användbart här för min situation, men jag kan göra VBA eller script, hoppas du kan hjälpa.
Jag har en mall med många celler att fylla med data, och det kommer att finnas en söknyckel (icke unik) som jag skulle vilja skriva in i mallen. Baserat på söknyckeln, söks data och motsvarande data på den matchade nyckeln hämtas och fylls i mallen. Den ifyllda mallen sparas i ett nytt kalkylblad. Det kanske finns fler än 1 matchbidrag. Jag behöver skriptet för att fortsätta söka ner i listan, tills alla matchningar har valts och ett visst antal nya kalkylblad skapats.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, finns det något sätt att behålla rubrikraden på varje nytt kalkylblad? (inringad i rött på min bilaga)

Koden tar alla rader från mitt huvudkalkylblad och överför dem till nya kalkylblad, vilket är bra. Men jag vill behålla mitt "master"-huvudvärde (inringat i rött) överst på varje nytt kalkylblad. Tack!



Jag syftar på denna kod från ovan:

Sub RowToSheet()
Dim xRow As Long
Dim I As Long
Med ActiveSheet
xRow = .Range("A" & Rows.Count).End(xlUp).Row
För I = 1 Till xRow
Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I
.Rows(I).Copy Sheets("Row " & I).Range("A1")
Nästa jag
Sluta med
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Bra kod, men kan jag få hjälp om jag har mina uppgifter i kolumn G istället för kolumn A? vad behöver jag ändra för att ha kolumn G-data på en annan flik?

Tack
Denna kommentar minimerades av moderatoren på webbplatsen
Det här är bra kod. Stort tack till brain-boxar på OfficeExtend !! Finns det ändå den här koden som skulle kunna anpassas något för att skapa separata ark för varje *kolumn* istället för rad? Jag har bifogat en bild på vad jag försöker uppnå. Är detta möjligt? Vänliga Hälsningar.
Denna kommentar minimerades av moderatoren på webbplatsen
God dag,
Jag såg inte din bild här.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, hur man ändrar koden, om mitt namnfält är i C-kolumnen
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Abdul Basit,
VBA-koden nedan kan hjälpa dig. Gör ett försök.
På raden: xCName = "3", 3 indikerar kolumnnumret (här är C-kolumnen) i Excel. Du kan ändra det till valfritt kolumnnummer efter behov.

Sub parse_data()
'Uppdatera av Extendoffice 2018/3/2
Dim xRCount As Long
Dim xSht Som arbetsblad
Dim xNSht Som arbetsblad
Dim I As Long
Dim xTRrow Som heltal
Dim xCol Som ny kollektion
Dim xTitle As String
Dim xSupdate Som Boolean
Dim xCName Som heltal
Dim xTA, xRA, xSRg1 Som sträng
Ställ in xSht = ActiveSheet
On Error Resume Next
xRCount = xSht.Cells(xSht.Rows.Count, 1).End(xlUp).Row
xTitle = "A1:C1"
xCName = "3" 'Ändra detta nummer till kolumnnumret som du kommer att skapa nya ark baserat på
xTRrow = xSht.Range(xTitle).Cells(1).Row
För I = 2 Till xRCount
Anrop xCol.Add(xSht.Cells(I, xCName).Text, xSht.Cells(I, xCName).Text)
Nästa
xSUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
xSRg = xSht.Cells(1, xCName).Address(RowAbsolute:=False, ColumnAbsolute:=False)
För I = 1 Till xCol.Count
Anrop xSht.Range(xTitle).AutoFilter(xCName, CStr(xCol.Item(I)))
Ställ in xNSht = Ingenting
Ställ in xNSht = Worksheets(CSr(xCol.Item(I)))
Om xNSht är ingenting då
Ställ in xNSht = Worksheets.Add(, Sheets(Sheets.Count))
xNSht.Name = CStr(xCol.Item(I))
annars
xNSht.Move , Sheets(Sheets.Count)
End If
xSht.Range("A" & xTRrow & ":A" & xRCount).EntireRow.Copy xNSht.Range("A1")
xNSht.Columns.AutoFit
Nästa
xSht.AutoFilterMode = Falskt
xSht.Aktivera
Application.ScreenUpdating = xSUpdate
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Cool VBA-kod för att göra susen.

Hur kan jag ändra den så att den inte kopierar den första kolumnen? Och för att ta bort kolumnnamnet?

Hälsningar
Denna kommentar minimerades av moderatoren på webbplatsen
Kan jag få hjälp med hur man automatiskt namnger arken med en viss kolumn. Detta är för rad till ark VBA. Se nedan

Sub RowToSheet()

Dim xRow As Long

Dim I As Long

Med ActiveSheet

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

För I = 1 Till xRow

Worksheets.Add(, Sheets(Sheets.Count)).Name = "Row " & I

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

Nästa jag

Sluta med

End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Strunt i att det var dolda efterföljande utrymmen. Jag använde TRIM-funktionen och rensade upp den. Att ha ett radantal (radantal verkligen så att rader -1 läggs in på arket skulle vara fantastiskt)
Denna kommentar minimerades av moderatoren på webbplatsen
Hur refererar man till användningen av koden ovan (kredit)? Är det möjligt att ändra koden?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, detta är en öppen kommunikationsplattform. Koden är tillåten att referera och modifiera.
Denna kommentar minimerades av moderatoren på webbplatsen
Nana
86
2
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå! Jag använde precis den här koden och det fungerade! Förutom att skapa ett nytt ark för varje post vill jag överföra det till kolumner och kan inte lista ut det. Så för exemplet ovan skulle utdata för Nana se ut så här - Namn NanaBetyg 86Nej. 2
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, använde den här koden och fungerade, men om jag vill välja fler än en rad i rubriken, vad kommer att ändras i koden? Jag har flera rader i arket som jag vill ha i varje ark.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, kom du på hur?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, finns det en kod som bara skulle lägga till ett nytt ark varje gång makrot körs, t.ex. första gången det nya arket skulle namnges på innehållet i cell A1, andra gången makrot kördes skulle det nya arket namnges på innehåll i A1 etc. tack i väntan
Det finns inga kommentarer här ännu
Ladda fler
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL