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

Jak duplikovat řádky na základě hodnoty buňky ve sloupci?

Například mám rozsah dat, který obsahuje seznam čísel ve sloupci D, a teď chci duplikovat celé řádky několikrát na základě číselných hodnot ve sloupci D, abych získal následující výsledek. Jak mohu zkopírovat řádky vícekrát na základě hodnot buněk v aplikaci Excel?

doc duplikovat řádky podle buňky 1

Duplikujte řádky několikrát na základě hodnot buněk pomocí kódu VBA


šipka modrá pravá bublina Duplikujte řádky několikrát na základě hodnot buněk pomocí kódu VBA

Chcete-li zkopírovat a duplikovat celé řádky vícekrát na základě hodnot buňky, může vám pomoci následující kód VBA, postupujte takto:

1. Podržte ALT + F11 klávesy pro otevření Microsoft Visual Basic pro aplikace okno.

2, klikněte Vložit > Modula vložte následující kód do Modul Okno.

Kód VBA: Duplikujte řádky několikrát na základě hodnoty buňky:

Sub CopyData()
'Updateby Extendoffice
    Dim xRow As Long
    Dim VInSertNum As Variant
    xRow = 1
    Application.ScreenUpdating = False
    Do While (Cells(xRow, "A") <> "")
        VInSertNum = Cells(xRow, "D")
        If ((VInSertNum > 1) And IsNumeric(VInSertNum)) Then
           Range(Cells(xRow, "A"), Cells(xRow, "D")).Copy
           Range(Cells(xRow + 1, "A"), Cells(xRow + VInSertNum - 1, "D")).Select
           Selection.Insert Shift:=xlDown
           xRow = xRow + VInSertNum - 1
        End If
        xRow = xRow + 1
    Loop
    Application.ScreenUpdating = False
End Sub

3. Pak stiskněte tlačítko F5 klíč ke spuštění tohoto kódu, byly všechny řádky duplikovány několikrát na základě hodnoty buňky ve sloupci D, jak potřebujete.

Poznámka: Ve výše uvedeném kódu písmeno A označuje počáteční sloupec rozsahu dat a písmeno D je písmeno sloupce, podle kterého chcete duplikovat řádky. Změňte je prosím podle svých potřeb.


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-2019 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Kompletní 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 omezuje stovky kliknutí myší každý den!
officetab dno
Komentáře (41)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Tohle fungovalo perfektně. Co bych přidal do vašeho kódu, aby zmizely všechny řádky s '0'? Používáme to pro štítky SKU. Díky za skvělé řešení!
Tento komentář byl moderátorem webu minimalizován
Miluji tě. Děkuji.
Tento komentář byl moderátorem webu minimalizován
Děkuji! Řádky 10 a 11 "D" označují konec řádku a toto může být nutné změnit na rozsah dat, aby to fungovalo.
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Ví někdo, jak rychle převést tento kód VBA na skripty Google Apps (tabulky Google)?
Tento komentář byl moderátorem webu minimalizován
Použil jsem výše uvedený kód, který funguje skvěle, ale po vložení řádku potřebuji ještě jeden krok. Jen se mi to nedaří správně fungovat. Potřebuji, aby po vložení do sloupce "N" vložil nulu, ale ponechal hodnotu v "N" v původním zkopírovaném řádku.


Sub CopyData()
'Aktualizovat Extendoffice 20160922
Dim xRow As Long
Dim VInSertNum jako varianta
xRow = 1
Application.ScreenUpdating = False
Do While (Cells(xRow, "A") <> "")
VInSertNum = Cells(xRow, "J")
If ((VInSertNum > 1) And IsNumeric(VInSertNum)) Pak
Rozsah(Cells(xRow, "A"), Cells(xRow, "AN")).Kopírovat
' Cells(xRow, 14).Value = 0 to udělalo všechny řádky
Rozsah(Cells(xRow + 1, "A"), Cells(xRow + VInSertNum - 1, "AN")).Vybrat
'Cells(xRow, 14). Hodnota = 0
"Tohle udělaly všechny řádky."
Selection.Insert Shift: = xlDown
' Cells(xRow, 14).Value = 0 to udělalo pouze první řádek
xRow = xRow + VInSertNum - 1
'Cells(xRow - 1, 14). Hodnota = 0
End If
' Cells(xRow - 1, 14). Hodnota = 0
xRow = xRow + 1
' Cells(xRow + 1, 14). Hodnota = 0
Smyčka
'Cells(xRow, 14).Hodnota = 0 to neudělalo žádné řádky
Application.ScreenUpdating = False
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj Steve, dokázal jsi to udělat. můj požadavek je stejný :(
Tento komentář byl moderátorem webu minimalizován
Ahoj hoši,
Možná vám pomůže následující článek, zkontrolujte ho:
https://www.extendoffice.com/documents/excel/3682-excel-copy-and-insert-row-multiple-times.html
Tento komentář byl moderátorem webu minimalizován
Víte, jaký by byl kód duplikovat řádek jen jednou, na základě if řekněme, že buňka d obsahuje 'Ano' - Hledal jsem podobný kód, ale pro něco, co bude duplikovat řádek na základě buňky, která říká ano
Tento komentář byl moderátorem webu minimalizován
Takže používám tento kód, ale chci, aby prohledal celý dokument, nejen řádek 1 nebo cokoli, co je označeno xRow = 1. Snažím se zadat rozsah 1:2000, ale nefunguje to. Jak mohu identifikovat xRow = jakýkoli řádek na listu, který obsahuje informace, které identifikuji v kódu níže?


Dim xRow As Long
Špatná hodnota jako varianta


xRow = 1:2000

Application.ScreenUpdating = False
Do While (Cells(xRow, "A") <> "")
Hodnota = Cells(xRow, "D")
Hodnota2 = Cells(xRow, "A")
Pokud ne ((Value = "allegheny general") A IsNumeric(Value2 = G0202)) Pak
Rozsah(Cells(xRow, "A"), Cells(xRow, "D")).Kopírovat
Rozsah(Cells(xRow + 1, "A"), Cells(xRow + 1, "D")).Vybrat
Selection.Insert Shift: = xlDown
xRow = xRow + 1
End If
xRow = xRow + 1
Smyčka
Application.ScreenUpdating = False
End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den, fungovalo to skvěle. Mám však sestavu s 1000 položkami a kód se přestal kopírovat kolem položky 480. Je něco, co mohu přidat, aby to dokončilo akci na celém hlášení?
Tento komentář byl moderátorem webu minimalizován
Dobrý den, Leah,
Testoval jsem kód na 2000 řádcích a funguje dobře.
Mohl byste mi poslat svůj pracovní list na otestování kódu?
Moje e-mailová adresa je skyyang@extendoffice.com
Těším se na Tvoji odpověď!
Tento komentář byl moderátorem webu minimalizován
Ahoj! Mám to do práce. Byla to chyba na mé straně, sestava měla několik prázdných řádků, které byly skryté, což způsobilo, že se skript přestal opakovat. Fungovalo to pro můj přehled s 8,000 XNUMX řádky! DěkujiQ
Tento komentář byl moderátorem webu minimalizován
Ahoj Leah a Skyyang,
Mám podobný problém - skript funguje dobře v listu o přibližně 100 řádcích, ale přestane fungovat pro cokoliv většího. Zkontroloval jsem prázdné řádky ve sloupci, odkud pochází číslo násobení, a žádné tam nejsou. Nějaké další důvody, proč skript nemusí fungovat pro větší datové sady?
Tento komentář byl moderátorem webu minimalizován
Dík! bylo to skvělé řešení všech mých problémů!
Tento komentář byl moderátorem webu minimalizován
Zdá se, že tento skript je přesně to, co potřebuji, ale když ho spustím, dostávám chybu na řádku Selection.Insert Shift:=x1Down

Nějaké návrhy, jak to opravit?
Tento komentář byl moderátorem webu minimalizován
ahoj, pro mě to nefunguje, chci odstranit písmena a duplicita čísel je možná?
Tento komentář byl moderátorem webu minimalizován
Existuje způsob, jak aktualizovat modul tak, aby pouze duplikoval nová data? Pracuji na probíhajícím dokumentu a nechci, aby kód duplikoval data, která již byla duplikována dříve.
Tento komentář byl moderátorem webu minimalizován
existuje nějaký způsob, jak přidat do každé opakované buňky po sobě jdoucí znaky? příklad
KTE+0001

KTE+0002
Tento komentář byl moderátorem webu minimalizován
Půvabný! Děkuji. Zajímalo by mě, jestli by mi někdo mohl poradit, jak bych do tabulky začlenil nový sloupec informací (sloupec E), což je číslo zvyšující se hodnoty pro každý zkopírovaný řádek, 1, 2, 3, 4 atd. když se dostane k další položce, která má být Xkrát duplikována, začne číslovat znovu od 1 a pokaždé se zvýší o 1.
Tento komentář byl moderátorem webu minimalizován
Ahoj, zkusil jsem to, ale existuje způsob, jak zvážit, zda existuje více kritérií pro data, která duplikuji
Tento komentář byl moderátorem webu minimalizován
Dobrý den,

Vytvářím tabulku pomocí poskytnutého vzorce, ale mám chyby. prosím může mi někdo dát vědět, jaký by měl být můj vzorec?

moje tabulka je z AY s množstvím v K.
Tento komentář byl moderátorem webu minimalizován
ahoj, snažil jsem se upravit tento kód, ale mám potíže.
mám inventární položky. každá položka je dva rows.and chtít, aby byly duplikovány N kolikrát
v horní části tabulky mám buňku, nazvěme ji A1, kolikrát jsem duplikoval? N
ať je hodnota N jakákoliv, chci tolikrát duplikovat původní položku zásob, kterou mám (A16, A17).
takže zkopírovaná položka by měla začínat v A18 (a to jsou dva řádky, další položka a20 atd.
Díky
Tento komentář byl moderátorem webu minimalizován
Ahoj, kód funguje skvěle. Také jsem chtěl přidat + 1 k datu (pouze ve všední dny) pokaždé, když je řádek duplikován.
Tento komentář byl moderátorem webu minimalizován
Děkuji mnohokrát! To mi ušetřilo tolik času, že jsem plýtval kopírováním a vkládáním všech svých řádků dat.
Dva palce nahoru!!
Tento komentář byl moderátorem webu minimalizován
Skvělý kousek kódu!!! Děkuji!!!
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í