Excel - Sao chép hàng và chèn n lần
![](http://img.brin-designs.com/img/games/907/excel-copy-row-insert-n-times.png)
Vấn đề
Tôi đang cố gắng tạo một macro trong Excel.
Dữ liệu của tôi như sau:
Cột1 Cột2 Cột3 Cột4
Dữ liệu1 Dữ liệu1 Tên1; Tên2; Tên3 Dữ liệu1
Data2 Data2 Name1; Name2; Data2
Dữ liệu3 Dữ liệu3 Tên1; Tên2; Tên3 Dữ liệu3
Mỗi ô trong cột 3 chứa n số tên được phân tách bằng dấu chấm phẩy.
Tôi cần một macro thực hiện những điều này:
1) Tạo n số hàng sau hàng đầu tiên. N là số lượng tên trong ô trong cột đầu tiên của cột 3.
2) Tách các tên trong các hàng bên dưới. (Tương tự văn bản với cột)
3) Sao chép nội dung của các ô khác trong hàng ban đầu vào các hàng được chèn bên dưới.
4) Tiếp tục hàng tiếp theo và làm lại tất cả.
Kết quả sẽ như thế này:
Cột1 Cột2 Cột3 Cột4
Dữ liệu1 Dữ liệu1 Tên1 Dữ liệu1
Dữ liệu1 Dữ liệu1 Tên2 Dữ liệu1
Dữ liệu1 Dữ liệu1 Tên3 Dữ liệu1
Dữ liệu2 Dữ liệu2 Tên1 Dữ liệu2
Dữ liệu2 Dữ liệu2 Tên2 Dữ liệu2
Dữ liệu3 Dữ liệu3 Tên1 Dữ liệu3
Dữ liệu3 Dữ liệu3 Tên2 Dữ liệu3
Dữ liệu3 Dữ liệu3 Tên3 Dữ liệu3
Bạn có thể giúp tôi không?
Dung dịch
Tải xuống tệp "duffy.xlsm" từ trang web này //speedy.sh/ruRSQ/duffy.xlsm.
Dữ liệu chính nằm ở trang 1 (không có dấu chấm phẩy) và kết quả là ở trang 2.
Các macro được lặp lại ở đây:
Sub test () Dim rrow1 As Range, rrow2 As Range, crow2 As String, rcol As Range Dim j As Long, k As Long, nname () As String Dim m As Integer, Dest As Range, ddata () As String, n Khi ứng dụng dài.ScreenUpdating = Sai hoàn tác với bảng tính ("sheet1") j = .Range ("a1"). 1) = .Cells (k, Cột. C.) ) .End (xlToRight) .Packset (0, -1)) 'Trình tin hộp thư rcol. (1, n) 'nboxbox nname (n) Tiếp theo n' Trình tin hộp thư rcol.Address Range (.Cells (k, "A"), .Cells (k, "B")). Dest = .Cells (Rows.Count, "A"). End (xlUp) .Packset (1, 0) 'Trình tin hộp số Dest.Address Range (Dest, Dest. Offerset (m - 1, 0)). 1 To m Dest. Offerset (n - 1, 0). Offerset (0, 2) = nname (n) .Cells (Dest. Offerset (n - 1, 0) .Row, Cộts. .Packset (0, 1) = ddata (k - 1) Nex t n Kết thúc với tiếp theo k Kết thúc với ứng dụng.ScreenUpdating = True Application.CutCopyMode = false MsgBox "macro trên" End Sub Sub undo () Worksheet ("sheet2"). Cells.Clear End Sub
Cảm ơn venkat1926 cho mẹo này.