Chèn dòng tự động trong excel

Liên hệ QC

thanhtam_thanhtam

Thành viên mới
Tham gia
27/2/11
Bài viết
37
Được thích
6
Nghề nghiệp
Finance
Chào mọi người,
Mình đang mất khá nhiều thời gian để lặp lại các thao tác manual, giống nhau, nên rất mong nhận được sự giúp đỡ của mọi người.
Vấn đề của mình đó là:
1/ Mình đang xử lý các tờ khai
2/ Các tờ khai sẽ có tờ khai nhánh và được đánh số thứ tự là 1,2,3....
3/ Mình cần phải gom các tờ khai có nhánh vào 1 dòng, vị trí của dòng chính là dòng được chèn (chèn vào dòng sau dòng có số thứ tự nhánh lớn nhất)
Do khá khó hình dung nên mình đính kèm file, nhờ mọi người xem và advise giùm mình nhé.
Mình cám ơn rất nhiều.

1570780629068.png
 

File đính kèm

  • 1570780570613.png
    1570780570613.png
    69.6 KB · Đọc: 2
  • Tach_dong.xlsx
    40.7 KB · Đọc: 6
Chào mọi người,
Mình đang mất khá nhiều thời gian để lặp lại các thao tác manual, giống nhau, nên rất mong nhận được sự giúp đỡ của mọi người.
Vấn đề của mình đó là:
1/ Mình đang xử lý các tờ khai
2/ Các tờ khai sẽ có tờ khai nhánh và được đánh số thứ tự là 1,2,3....
3/ Mình cần phải gom các tờ khai có nhánh vào 1 dòng, vị trí của dòng chính là dòng được chèn (chèn vào dòng sau dòng có số thứ tự nhánh lớn nhất)
Do khá khó hình dung nên mình đính kèm file, nhờ mọi người xem và advise giùm mình nhé.
Mình cám ơn rất nhiều.

View attachment 226474
Hàm mình không biết.Có thể dùng VBA.
 
Vậy thì quá tuyệt ạ, bạn có thể viết gửi giùm mình không. Cám ơn bạn rất nhiều,
Bạn thử.Chắc vẫn còn sót vài trường hợp.
Mã:
Sub chuyendulieu()
Application.ScreenUpdating = False
    Dim arr, a As Long, lr As Long, i As Long, kq, gop As String, b As Long, j As Long, c As Long
    With Sheets("Record")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 5 Then Exit Sub
         arr = .Range("A5:D" & lr).Value
         ReDim kq(1 To UBound(arr) + 1000, 1 To 4)
                For j = 1 To 4
                    kq(1, j) = arr(1, j)
                Next j
         b = arr(1, 3)
         a = 1
         If b = 1 Then gop = arr(i, 2)
         For i = 2 To UBound(arr)
             c = arr(i - 1, 3)
             b = arr(i, 3)
             If b = c Then
                a = a + 1
                For j = 1 To 4
                    kq(a, j) = arr(i, j)
                Next j
             ElseIf b > c Then
                If b = 1 Then
                   a = a + 1
                   For j = 1 To 4
                      kq(a, j) = arr(i, j)
                   Next j
                   gop = arr(i, 2) & "("
               ElseIf b > 1 Then
                   a = a + 1
                    For j = 1 To 4
                      kq(a, j) = arr(i, j)
                   Next j
                   gop = gop & arr(i, 2) & ","
               End If
            ElseIf b < c Then
                    a = a + 1
                   kq(a, 2) = Left(gop, Len(gop) - 1) & ")"
                   gop = Empty
                   a = a + 1
                   For j = 1 To 4
                      kq(a, j) = arr(i, j)
                   Next j
                 
           End If
      Next i
      lr = .Range("o" & Rows.Count).End(xlUp).Row
      If lr > 4 Then .Range("o5:R" & lr).ClearContents
      If a Then .Range("o5:r5").Resize(a).Value = kq
  End With
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Tach_dong.xlsm
    50.9 KB · Đọc: 8
Bạn thử.Chắc vẫn còn sót vài trường hợp.
Mã:
Sub chuyendulieu()
Application.ScreenUpdating = False
    Dim arr, a As Long, lr As Long, i As Long, kq, gop As String, b As Long, j As Long, c As Long
    With Sheets("Record")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 5 Then Exit Sub
         arr = .Range("A5:D" & lr).Value
         ReDim kq(1 To UBound(arr) + 1000, 1 To 4)
                For j = 1 To 4
                    kq(1, j) = arr(1, j)
                Next j
         b = arr(1, 3)
         a = 1
         If b = 1 Then gop = arr(i, 2)
         For i = 2 To UBound(arr)
             c = arr(i - 1, 3)
             b = arr(i, 3)
             If b = c Then
                a = a + 1
                For j = 1 To 4
                    kq(a, j) = arr(i, j)
                Next j
             ElseIf b > c Then
                If b = 1 Then
                   a = a + 1
                   For j = 1 To 4
                      kq(a, j) = arr(i, j)
                   Next j
                   gop = arr(i, 2) & "("
               ElseIf b > 1 Then
                   a = a + 1
                    For j = 1 To 4
                      kq(a, j) = arr(i, j)
                   Next j
                   gop = gop & arr(i, 2) & ","
               End If
            ElseIf b < c Then
                    a = a + 1
                   kq(a, 2) = Left(gop, Len(gop) - 1) & ")"
                   gop = Empty
                   a = a + 1
                   For j = 1 To 4
                      kq(a, j) = arr(i, j)
                   Next j
                
           End If
      Next i
      lr = .Range("o" & Rows.Count).End(xlUp).Row
      If lr > 4 Then .Range("o5:R" & lr).ClearContents
      If a Then .Range("o5:r5").Resize(a).Value = kq
  End With
Application.ScreenUpdating = True
End Sub
Cám ơn bạn rất nhiều, rất là tiện luôn ạ
 
Web KT
Back
Top Bottom