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.