Tôi dùng vòng lặp For Each Next kết hợp với If Then để làm nhưng không được, nhờ các thầy giứp dùng
Bạn tham khảo đoạn code dưới đây nhé:
Sub insert_row()
Dim lr As Long
Dim i As Long
lr = Sheets("nam").Range("C" & Rows.Count).End(xlUp).Row
For i = 8 To lr * 2
If Range("A" & i).Value <> "" Then
Rows(i & ":" & i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
i = i + 1
End If
Next i
End Sub
Trong đó quy trình là:
- Bước 1: xác định dòng cuối có dữ liệu trong bảng. Dựa theo cột C là cột có dữ liệu liên tục => biến lr đại diện cho dòng cuối
- Bước 2: vòng lặp bạn sẽ tính dừ dòng đầu + 1 (là dòng 8) đến dòng cuối * 2 vì:
+ dòng đầu tiên luôn có dữ liệu, nếu xét từ dòng này sẽ chèn dòng trống trước cột đầu tiên => không đúng.
+ nếu chỉ xét tới dòng cuối thì khi chèn thêm dòng trống => nội dung bị vượt quá vị trí dòng cuối ban đầu => có thể thiếu các dòng này => lấy giá trị dòng cuối * 2 để đảm bảo trường hợp bảng tính có thể tăng gấp 2 lần số dòng so với ban đầu (là tối đa)
- Bước 3: xét logic nếu dòng ở cột A không phải là dòng trống thì thực hiện lệnh chèn dòng. Nhưng chú ý là chèn xong thì vị trí dòng đang có dữ liệu bị đẩy xuống 1 dòng => phải nhảy qua dòng này thì mới xét các dòng tiếp theo được => đặt i = i + 1 để cho phép vượt qua điểm này.
Khi đó Next i sẽ tính là i + 2 (vì next trong vòng lặp đã là +1 rồi. vòng lặp không xét tới step là bao nhiêu thì được hiểu step = 1)
Bạn có thể chạy thử vòng lặp này và kiểm tra qua thao tác nhấn phím F8 để rõ hơn cách thức vòng lặp hoạt động nhé.
Cám ơn chuyên gia rất nhiều