Excel - Sorok másolása és beillesztése n alkalommal

Probléma

Egy makrót próbálok létrehozni az Excel alatt.

Adataim a következők:

1. oszlop, 2. oszlop, 3. oszlop, 4. oszlop

Adat1 Adat1 Név1; Név2; Név3 Adat1

Data2 Data2 név1; név2; adat2

Adat3 Adat3 Név1; Név2; Név3 Adat3

A 3. oszlop minden egyes cellájában nincs szám pontosvesszővel elválasztva.

Szükségem van egy makróra, amely ezeket a dolgokat teszi:

1) Készítsen n sorszámot az első sor után. N a nevek száma a cellában a 3. oszlop első részében.

2) Válasszuk ki a neveket az alábbi sorokban. (Hasonló az oszlopokhoz)

3) Másolja az eredeti sor többi cellájának tartalmát az alábbi sorokba.

4) Folytassa a következő sorba, és tegye meg újra.

Az eredménynek így kell kinéznie:

1. oszlop, 2. oszlop, 3. oszlop, 4. oszlop

Adat1 Adat1 Név1 Adat1

Adat1 Adat1 Név2 Adat1

Adat1 Adat1 Név3 Adat1

Data2 Data2 Név1 Adat2

Data2 Data2 Név2 Adat2

Adat3 Adat3 Név1 Adat3

Adat3 Adat3 Név2 Adat3

Adat3 Adat3 Név3 Adat3

Ki tudnál segíteni?

Megoldás

Töltse le a "duffy.xlsm" fájlt ezen a weboldalon //speedy.sh/ruRSQ/duffy.xlsm.

A fő adatok az 1. lapon találhatók (pontosvessző nélkül), és az eredmény a 2. lapban van.

A makrókat itt ismételjük:

 Sub teszt () Dim rrow1 mint tartomány, sor2 2 mint tartomány, varjú 2 karakterláncként, rcol as tartomány Dim j hosszú, k mint hosszú, nname () karakterláncként m m integer, dest as range, ddata () mint karakterlánc, Hosszú alkalmazás.ScreenUpdating = Hamis visszavonás munkalapokkal ("sheet1") j = .Range ("a1"). Vége (xlDown) .Row ReDim ddata (1 To j - 1) k = 2 To j ddata (k - 1) = .Cells (k, Columns.Count) .End (xlToLeft) .Value 'msgbox ddata (k - 1) Set rcol = Range (.Cells (k, "C"), .Cells (k, "c" ) .End (xlToRight) .Offset (0, -1)) 'msgbox rcol.Address m = WorksheetFunction.CountA (rcol)' msgbox m Név újbóli elnevezése (1-től m-ig) n = 1 esetén n nname (n) = rcol (1, n) 'msgbox nname (n) Következő n' msgbox rcol.Address Range (.Cells (k, "A"), .Cells (k, "B")) Másolás munkalapokkal ("sheet2") dest = .Cells (sorok.Count, "A"). End (xlUp) .Offset (1, 0) 'msgbox dest.Address Range (dest, dest.Offset (m - 1, 0)) PasteSpecial for n = 1 A m dest.Offset (n - 1, 0) .Offset (0, 2) = nname (n) .Cells (dest.Offset (n - 1, 0) .Row, Columns.Count) .End (xlToLeft) .Offset (0, 1) = ddata (k - 1) Nex t n Vége a következővel k Vége az alkalmazással.ScreenUpdating = True Application.CutCopyMode = Hamis MsgBox "makró felett" Vége Sub Sub Undo () munkalapok ("sheet2"). 

Köszönet venkat1926-nak a tippért.

Előző Cikk Következő Cikk

Top Tippek