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ä.

Edellinen Artikkeli Seuraava Artikkeli

Top Vinkkejä