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.

Předchozí Článek Následující Článek

Nejlepší Tipy