Right Click vào Sheet1 ==> ViewCode ==> chép cái này vàoHic, cái lệnh trong đấy là dùng để copy dòng tương tự. Của mình là tạo ra dòng trống mà. Nếu mình hiểu về code thì đã có thể tự sửa được rùi.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then
If Target.Value > 1 Then
Target.Offset(1).Resize(Target.Value - 1).EntireRow.Insert
End If
End If
End Sub
"Hổng" hiểuCảm ơn bạn. File mình đưa lên chỉ là ví dụ thôi. Toàn bộ cột C2 là có số lượng rồi và đứng liền nhau. Mình cần một Code để chèn lần lượt theo từng dòng một (không phải áp dụng cho mỗi ô C2 mà là toàn từng dòng ở cột C). Bạn xem lại giúp nhé!
Private Sub CommandButton1_Click()
Dim tam, iR, i
tam = Range("C2", [C65536].End(3))
iR = 3
For i = 1 To UBound(tam, 1)
If tam(i, 1) > 1 Then
Rows(iR).Resize(tam(i, 1) - 1).Insert Shift:=xlDown
iR = iR + tam(i, 1)
Else
iR = iR + 1
End If
Next
End Sub
Private Sub Chen()
Dim Cl As Range
Set Cl = [C65000].End(3)
Do
If Cl.Row < 2 Then Exit Do
If Cl.Value > 1 Then Rows(Cl.Row + 1).Resize(Cl.Value - 1).Insert Shift:=xlDown
Set Cl = Cl.Offset(-1)
Loop
End Sub
Sub chendong()
Dim i As Long, adrss As Range
For i = 1 To 10000
If Sheet1.Cells(i, 1) <> "" Then
Set adrss = Cells(i, 1)
Rows(adrss.Row + 1 & ":" & adrss.Row + 23).Insert xlDown
End If
Next
End Sub
Sub CommandButton1_Click()
Dim Rg As Range, Dg
Dim tam, mg(), i, j
Set Rg = Application.InputBox("Nhap hay chon vung danh sach", , , , , , , 8)
Dg = InputBox("Nhap so dong chen them moi nguoi")
tam = Rg
ReDim mg(Rg.Rows.Count + Rg.Rows.Count * Dg, Rg.Columns.Count)
For i = 1 To Rg.Rows.Count
For j = 1 To Rg.Columns.Count
mg((i - 1) * (Dg + 1), j - 1) = tam(i, j)
Next
Next
Rg.Cells(1).Resize(UBound(mg, 1), Rg.Columns.Count) = mg
End Sub
Cảm ơn anh Sealand, em đang học về mảng mà không hiểu cho lắm đoạn code này hay lắm mà em không hiểu cho lắm anh giải thích giúp hen. ThanksBạn thử sub này xem sao, mình thử vài ngàn dòng khá nhanh đấy. Mặt khác không chèn dòng nên ít ảnh hưởng cấu trúc bảng
Mình chưa viết các phhần chống lỗi như chọn vùng không hơp lệ, số dòng chèn vượt 65536 vvMã:Sub CommandButton1_Click() Dim Rg As Range, Dg Dim tam, mg(), i, j Set Rg = Application.InputBox("Nhap hay chon vung danh sach", , , , , , , 8) Dg = InputBox("Nhap so dong chen them moi nguoi") tam = Rg ReDim mg(Rg.Rows.Count + Rg.Rows.Count * Dg, Rg.Columns.Count) For i = 1 To Rg.Rows.Count For j = 1 To Rg.Columns.Count mg((i - 1) * (Dg + 1), j - 1) = tam(i, j) Next Next Rg.Cells(1).Resize(UBound(mg, 1), Rg.Columns.Count) = mg End Sub
Cái này cũng hay. Đương nhiên dùng mảng sẽ cho tốc độ cực cao. Tuy nhiên, sẽ hay hơn nếu anh viết thành 1 Function hoặc Sub có tham số truyền vào thì càng tuyệt! Mai này cứ việc "móc ra" mà dùngBạn thử sub này xem sao, mình thử vài ngàn dòng khá nhanh đấy. Mặt khác không chèn dòng nên ít ảnh hưởng cấu trúc bảng
Mình chưa viết các phhần chống lỗi như chọn vùng không hơp lệ, số dòng chèn vượt 65536 vvMã:Sub CommandButton1_Click() Dim Rg As Range, Dg Dim tam, mg(), i, j Set Rg = Application.InputBox("Nhap hay chon vung danh sach", , , , , , , 8) Dg = InputBox("Nhap so dong chen them moi nguoi") tam = Rg ReDim mg(Rg.Rows.Count + Rg.Rows.Count * Dg, Rg.Columns.Count) For i = 1 To Rg.Rows.Count For j = 1 To Rg.Columns.Count mg((i - 1) * (Dg + 1), j - 1) = tam(i, j) Next Next Rg.Cells(1).Resize(UBound(mg, 1), Rg.Columns.Count) = mg End Sub
Function InsertRow(byVal sArray, byVal lRow as Long)
sub InsertRow(byVal sArray, byVal lRow as Long, Target as Range)