Nhờ gíup chèn dòng có điều kiện (1 người xem)

  • Thread starter Thread starter tle2003
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

tle2003

Thành viên hoạt động
Tham gia
22/1/07
Bài viết
166
Được thích
59
Tôi muốn chèn xuống số dòng bằng giá trị cột 3 giảm đi 1. sau đó lặp lại nội dung của cột thứ 2 và 3 ở số dòng vừa chèn (kết quả như sheet 2).
Cứ lặp lại như thế cho đến dòng cuối cùng.
Nhờ ACE xem file đính kèm và gíup gìum
Cám ơn
 

File đính kèm

Tôi muốn chèn xuống số dòng bằng giá trị cột 3 giảm đi 1. sau đó lặp lại nội dung của cột thứ 2 và 3 ở số dòng vừa chèn (kết quả như sheet 2).
Cứ lặp lại như thế cho đến dòng cuối cùng.
Nhờ ACE xem file đính kèm và gíup gìum
Cám ơn
Bạn chạy thử code sau:
PHP:
Sub InsertRows()
    Dim sArr(), Res(1 To 10000, 1 To 6), Header As Range
    Dim I As Long, J As Long, K As Long, lR As Long, nR As Long
    
    With Sheet1
        lR = .Range("A" & Rows.Count).End(xlUp).Row
        sArr() = .Range("A2:F" & lR).Value
        Set Header = .Range("A1:F1")
    End With
    
    For I = 1 To UBound(sArr, 1)
        K = K + 1
        For J = 1 To 6
            Res(K, J) = sArr(I, J)
        Next J
        If sArr(I, 4) > 1 Then
            For nR = 1 To sArr(I, 4) - 1
                K = K + 1
                Res(K, 2) = sArr(I, 2): Res(K, 3) = CStr(sArr(I, 3))
            Next nR
        End If
    Next I
    
    Header.Copy Sheet2.Range("H1")
    Sheet2.Range("H2").Resize(K, 6) = Res
    
    Set Header = Nothing
    MsgBox "Done", vbInformation, "GPE"
End Sub
 
Upvote 0
Tôi muốn chèn xuống số dòng bằng giá trị cột 3 giảm đi 1. sau đó lặp lại nội dung của cột thứ 2 và 3 ở số dòng vừa chèn (kết quả như sheet 2).
Cứ lặp lại như thế cho đến dòng cuối cùng.
Nhờ ACE xem file đính kèm và gíup gìum
Cám ơn
Đây bạn xem.
Mã:
Sub chuyendulieu()
Dim arr, arr1, lr As Long, i As Long, j As Long, a As Long, dk As Integer
With Sheet1
     lr = .Range("B" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr = .Range("A2:F" & lr).Value
     ReDim arr1(1 To UBound(arr, 1) * 50, 1 To 6)
     For i = 1 To UBound(arr, 1)
         a = a + 1
         For j = 1 To 6
             arr1(a, j) = arr(i, j)
         Next j
         dk = arr(i, 4) - 1
         If dk > 0 Then
            For j = 1 To dk
                a = a + 1
                arr1(a, 2) = arr(i, 2)
                arr1(a, 3) = arr(i, 3)
            Next j
         End If
    Next i
End With
With Sheet2
     lr = .Range("B" & Rows.Count).End(xlUp).Row
     If lr > 1 Then .Range("A2:F" & lr).ClearContents
     If a Then .Range("A2").Resize(a, 6).Value = arr1
End With
End Sub
 

File đính kèm

Upvote 0
Đây bạn xem.
Mã:
Sub chuyendulieu()
Dim arr, arr1, lr As Long, i As Long, j As Long, a As Long, dk As Integer
With Sheet1
     lr = .Range("B" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr = .Range("A2:F" & lr).Value
     ReDim arr1(1 To UBound(arr, 1) * 50, 1 To 6)
     For i = 1 To UBound(arr, 1)
         a = a + 1
         For j = 1 To 6
             arr1(a, j) = arr(i, j)
         Next j
         dk = arr(i, 4) - 1
         If dk > 0 Then
            For j = 1 To dk
                a = a + 1
                arr1(a, 2) = arr(i, 2)
                arr1(a, 3) = arr(i, 3)
            Next j
         End If
    Next i
End With
With Sheet2
     lr = .Range("B" & Rows.Count).End(xlUp).Row
     If lr > 1 Then .Range("A2:F" & lr).ClearContents
     If a Then .Range("A2").Resize(a, 6).Value = arr1
End With
End Sub

Cám ơn bạn
Bài đã được tự động gộp:

Bạn chạy thử code sau:
PHP:
Sub InsertRows()
    Dim sArr(), Res(1 To 10000, 1 To 6), Header As Range
    Dim I As Long, J As Long, K As Long, lR As Long, nR As Long
   
    With Sheet1
        lR = .Range("A" & Rows.Count).End(xlUp).Row
        sArr() = .Range("A2:F" & lR).Value
        Set Header = .Range("A1:F1")
    End With
   
    For I = 1 To UBound(sArr, 1)
        K = K + 1
        For J = 1 To 6
            Res(K, J) = sArr(I, J)
        Next J
        If sArr(I, 4) > 1 Then
            For nR = 1 To sArr(I, 4) - 1
                K = K + 1
                Res(K, 2) = sArr(I, 2): Res(K, 3) = CStr(sArr(I, 3))
            Next nR
        End If
    Next I
   
    Header.Copy Sheet2.Range("H1")
    Sheet2.Range("H2").Resize(K, 6) = Res
   
    Set Header = Nothing
    MsgBox "Done", vbInformation, "GPE"
End Sub
Cám ơn bạn
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom