Excel - Kopírovat řádek a vkládat n krát
Problém
Snažím se vytvořit makro v aplikaci Excel.
Moje data jsou následující:
Sloupec1 Sloupec2 Sloupec3 Sloupec4
Data1 Data1 Name1; Name2; Name3 Data1
Data2 Data2 Name1; Name2; Data2
Data3 Data3 Name1; Name2; Name3 Data3
Každá buňka ve sloupci 3 obsahuje n počet jmen oddělených středníkem.
Potřebuji makro, které dělá tyto věci:
1) Za prvním řádkem vytvořte n počet řádků. N je počet jmen v buňce v prvním sloupci 3.
2) Oddělte názvy v řádcích níže. (Podobné jako text do sloupců)
3) Zkopírujte obsah ostatních buněk v původním řádku do vložených řádků níže.
4) Pokračujte na další řádek a udělejte to znovu.
Výsledek by měl vypadat takto:
Sloupec1 Sloupec2 Sloupec3 Sloupec4
Data1 Data1 Název1 Data1
Data1 Data1 Název2 Data1
Data1 Data1 Name3 Data1
Data2 Data2 Name1 Data2
Data2 Data2 Name2 Data2
Data3 Data3 Name1 Data3
Data3 Data3 Name2 Data3
Data3 Data3 Name3 Data3
Můžeš mi pomoct?
Řešení
Stáhněte soubor "duffy.xlsm" z této webové stránky //speedy.sh/ruRSQ/duffy.xlsm.
Hlavní údaje jsou uvedeny v listu 1 (bez středníků) a výsledek je uveden v listu2.
Makra se zde opakují:
Sub test () Dim rrow1 As Range, rrow2 As Range, crow2 Jako String, rcol As Range Dim j As Long, k As Long, nname () As String Dim m jako Integer, dest As Range, ddata () As String, n As Long Application.ScreenUpdating = False undo s listy ("sheet1") j = .Range ("a1") Konec (xlDown) .Row ReDim ddata (1 To j - 1) Pro k = 2 Do j ddata (k - 2) 1) = .Cells (k, Columns.Count) .End (xlToLeft) .Value 'msgbox ddata (k - 1) Nastavte rcol = Range (.Cells (k, "C"), .Cells (k, "c") ) .End (xlToRight) .Offset (0, -1)) 'msgbox rcol.Address m = WorksheetFunction.CountA (rcol)' msgbox m ReDim nname (1 To m) Pro n = 1 Pro m nname (n) = rcol (1, n) 'msgbox nname (n) Další n' msgbox rcol.Address Range (.Cells (k, "A"), .Cells (k, "B")) Kopírování pomocí listů ("sheet2") Set dest = .Cells (Rows.Count, "A") Konec (xlUp) .Offset (1, 0) 'msgbox dest.Address Range (dest, dest.Offset (m - 1, 0)) PasteSpecial Pro n = 1 Do m dest.Offset (n - 1, 0) .Offset (0, 2) = nname (n) .Články (dest.Offset (n - 1, 0) .Row, Columns.Count) .End (xlToLeft) .Offset (0, 1) = ddata (k - 1) Nex t n Konec S Další k Konec S Application.ScreenUpdating = True Application.CutCopyMode = False MsgBox "Makro přes" Konec Sub Sub undo () Listy ("sheet2") Cells.Clear End Sub
Děkujeme venkat1926 za tento tip.