Excel - Kopírovať riadok a vložiť n krát

Problém

Snažím sa vytvoriť makro v programe Excel.

Moje údaje sú nasledovné:

Stĺpec 1 Stĺpec2 Stĺpec3 Stĺpec4

Data1 Data1 Name1; Name2; Name3 Data1

Data2 Data2 Name1; Name2; Data2

Data3 Data3 Name1; Name2; Name3 Data3

Každá bunka v stĺpci 3 obsahuje n počet mien oddelených bodkočiarkou.

Potrebujem makro, ktoré robí tieto veci:

1) Za prvým riadkom vytvorte n počet riadkov. N je počet mien v bunke v prvom stĺpci 3.

2) Oddeľte názvy v riadkoch nižšie. (Podobné ako text do stĺpcov)

3) Skopírujte obsah ostatných buniek v pôvodnom riadku do vložených riadkov nižšie.

4) Pokračujte na ďalší riadok a urobte to všetko znova.

Výsledok by mal vyzerať takto:

Stĺpec 1 Stĺpec2 Stĺpec3 Stĺpec4

Data1 Data1 Name1 Data1

Data1 Data1 Name2 Data1

Data1 Data1 Name3 Data1

Data2 Data2 Name1 Data2

Data2 Data2 Name2 Data2

Data3 Data3 Name1 Dáta3

Data3 Data3 Name2 Data3

Data3 Data3 Name3 Dáta3

Môžete mi pomôcť?

Riešenie

Stiahnite si súbor "duffy.xlsm" z tejto webovej stránky //speedy.sh/ruRSQ/duffy.xlsm.

Hlavné údaje sú uvedené v liste 1 (bez bodkočiariek) a výsledok je uvedený v liste2.

Makrá sa tu opakujú:

 Sub test () Dim rrow1 As Range, rrow2 As Range, crow2 As String, rcol As Range Dim j Ako dlhé, k As Long, nname () As String Dim m Ako Integer, dest As Range, ddata () As String, n As Long Application.ScreenUpdating = False undo S pracovnými hárkami ("sheet1") j = .Range ("a1") End (xlDown) .Row ReDim ddata (1 To j - 1) Pre k = 2 Do j ddata (k - 2) 1) = .Cells (k, Columns.Count) .End (xlToLeft). Hodnota '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) Pre n = 1 Pre m nname (n) = rcol (1, n) 'msgbox nname (n) Nasledujúci n' msgbox rcol.Address Range (.Cells (k, "A"), .Cells (k, "B")) Kopírovanie pomocou pracovných hárkov ("sheet2") Set dest = .Cells (Rows.Count, "A"). Koniec (xlUp) .Offset (1, 0) 'msgbox dest.Address Range (dest, dest.Offset (m - 1, 0)) PasteSpecial Pre 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 Koniec s nasledujúcim k Koniec s Application.ScreenUpdating = True Application.CutCopyMode = False MsgBox "Makro nad" End Sub Sub undo () Pracovné hárky ("sheet2"). 

Ďakujeme venkat1926 za tento tip.

Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy