Excel - Копиране на ред и вмъкване на n пъти

Проблем

Опитвам се да създам макрос в Excel.

Моите данни са следните:

Колона 1 Колона 2 Колона 3 Колона4

Данни1 Данни1 Име1; Име2; Име3 Данни1

Данни2 Данни2 Име1; Име2; Данни2

Данни3 Данни3 Име1; Име2; Име3 Данни3

Всяка клетка в колона 3 съдържа n броя имена, разделени с точка и запетая.

Имам нужда от макрос, който прави тези неща:

1) Създайте n брой редове след първия ред. N е броят на имената в клетката в първата колона 3.

2) Разделете имената в редовете по-долу. (Подобно на текст в колони)

3) Копирайте съдържанието на другите клетки в първоначалния ред в вмъкнатите редове по-долу.

4) Преминете към следващия ред и го направете отново.

Резултатът трябва да изглежда така:

Колона 1 Колона 2 Колона 3 Колона4

Данни1 Данни1 Име1 Данни1

Данни1 Данни1 Име2 Данни1

Данни1 Данни1 Име3 Данни1

Данни2 Данни2 Име1 Данни2

Данни2 Данни2 Име2 Данни2

Данни3 Данни3 Име1 Данни3

Данни3 Данни3 Име2 Данни3

Данни3 Данни3 Име3 Данни3

Можете ли да ми помогнете?

Решение

Изтеглете файла "duffy.xlsm" от тази уеб страница //speedy.sh/ruRSQ/duffy.xlsm.

Основните данни са в лист 1 (без точка и запетая) и резултатът е в лист2.

Макросите се повтарят тук:

 Под тест () Dim rrow1 As Range, rrow2 As Range, crow2 As String, rcol Като обхват Dim j Както Long, k As Long, nname () As String Dim m Като Integer, dest As Range, ddata () As String, n As Long Application.ScreenUpdating = False отмяна с работни листове ("sheet1") j = .Range ("a1"). Край (xlDown). 1) = .Клетки (k, Columns.Count). End (xlToLeft) .Value 'msgbox ddata (k - 1) Set rcol = Обхват (.Cells (k, "C"), .Cells (k, "c") Изкл. (XlToRight) .Offset (0, -1)) 'msgbox rcol.Address m = WorksheetFunction.CountA (rcol)' msgbox m ReDim nname (1 до m) За n = 1 До m nname (n) = rcol (1, n) 'msgbox nname (n) Следващ n' msgbox rcol.Address Обхват (.Cells (k, "A"), .Cells (k, "B")) Copy with Worksheets ("sheet2") Set край (xlUp) .Offset (1, 0) 'msgbox dest.Address Обхват (dest, dest.Offset (m - 1, 0)) PasteSpecial За n = 1 до 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 Край с следващ k Край с Application.ScreenUpdating = True Application.CutCopyMode = Грешно MsgBox "макро над" Край Sub Sub undo () Работни листове ("sheet2"). Cells.Clear End Sub 

Благодарение на venkat1926 за този съвет.

Предишна Статия Следваща Статия

Топ Съвети