Excel - Sao chép hàng và chèn n lần

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.

Bài TrướC TiếP Theo Bài ViếT

Lên Trên LờI Khuyên