Excel - Kopioi rivi ja lisää n kertaa
Ongelma
Yritän luoda makron Excelissä.
Omat tiedot ovat seuraavat:
Sarake1 Sarake2 Sarake 3 Sarake4
Data1 Data1 Nimi1, Nimi2, Nimi3 Data1
Data2 Data2 Nimi1, Nimi2, Data2
Data3 Data3 Nimi1, Nimi2, Nimi3 Data3
Jokainen sarakkeen 3 solu sisältää n lukumäärän puolipisteellä erotettuja nimiä.
Tarvitsen makron, joka tekee nämä asiat:
1) Luo n rivien määrä ensimmäisen rivin jälkeen. N on nimien lukumäärä sarakkeen 3 sarakkeessa.
2) Erota nimet alla olevilla riveillä. (Samankaltainen kuin sarakkeisiin)
3) Kopioi alkuperäisten rivien muiden solujen sisältö alla oleviin riveihin.
4) Siirry seuraavaan riviin ja tee kaikki uudelleen.
Tuloksen pitäisi näyttää tältä:
Sarake1 Sarake2 Sarake 3 Sarake4
Data1 Data1 Name1 Data1
Data1 Data1 Name2 Data1
Data1 Data1 Nimi3 Data1
Data2 Data2 Name1 Data2
Data2 Data2 Name2 Data2
Data3 Data3 Name1 Data3
Data3 Data3 Name2 Data3
Data3 Data3 Nimi3 Data3
Voitko auttaa minua?
Ratkaisu
Lataa tiedosto "duffy.xlsm" tältä verkkosivulta //speedy.sh/ruRSQ/duffy.xlsm.
Tärkeimmät tiedot ovat arkissa 1 (ilman puolipisteitä) ja tulos on arkissa2.
Makrot toistetaan täällä:
Sub-testi () Dim rrow1 Alue, rivi2 alueena, varsi2 merkkijonoina rcol As Range Dim j Kuten pitkä, k Pitkänä, nname () merkkijonoina Dim m Integer, dest As Range, ddata () merkkijonoina, ddata () merkkijonoina, Niin kauan sovellus.ScreenUpdating = False undo With Worksheets ("sheet1") j = .Range ("a1"). End (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 ReDim nname (1 - m) n = 1: lle m nname (n) = rcol (1, n) 'msgbox nname (n) Seuraava n' msgbox rcol.Address Range (.Cells (k, "A"), .Cells (k, "B")) Kopioi työarkkeilla ("sheet2") dest = .Cells (Rows.Count, "A"). End (xlUp) .Offset (1, 0) 'msgbox dest.Address Range (dest, dest.Offset (m - 1, 0)) PasteSpecial For n = 1 To m dest.Offset (n - 1, 0) .Offset (0, 2) = nname (n) .Kohdat (dest.Offset (n - 1, 0) .Row, Columns.Count) .End (xlToLeft) .Offset (0, 1) = ddata (k - 1) Nex t n Lopeta Seuraava k Lopeta sovelluksella.ScreenUpdating = True Application.CutCopyMode = False MsgBox "makro yli" End Sub Sub Undo () -arkit ("sheet2").
Kiitos venkat1926 tästä vinkistä.