Giúp đỡ chèn thêm dòng sau khi lấy thông tin từ Sheet qua Sheet khác

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
719
Được thích
97
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Kính gửi anh chị!
1. Trong file em có 02 Sheet, em muốn lấy nội dung từ Sheet TD-QT-TH qua Sheet DM_NT. Nếu có tiêu đề tại cột B thì đưa qua Sheet DM_NT Đánh số hạng mục như HM01, HM02
2. Sau dòng HM thì chèn thêm 1 dòng GDxx theo số thứ tự Hạng mục với nội dung tên giống tên của Hạng mục
3. Lấy nội dung còn của hạng mục từ Sheet TD-QT-TH qua Sheet DM_NT
Em đã mày mò đã lấy được thong tin qua, còn đoạn chèn thêm dòng GD em bí và mò đủ các cách nhưng không thể nào thêm được. Mong anh chị ghé qua giúp em đoạn này ạ
Em cám ơn nhiều
1642444066335.png1642444084432.png

Mã:
Sub QLCL_DM_Cviec_Import()
    If CheckFileXLMS = False Then Exit Sub
    'De xuat tao ma se lay cot T giao nhiem vu trien khai thi cong
    On Error Resume Next
    Dim aCV(), res_CV()
    Dim sRow&, I&, k&, kt&, stt&, t&, tdR&, tdB As Boolean
    Dim LastRow, LastRow_BRN
    Call TangTocCode(True)
    With Sheets("TD-QT-TH")
        aCV = .Range("A17:N" & .Range("O" & .Rows.count).End(xlUp).row - 1).value     'Lay dong cuoi cung cua ten CT
    End With
    sRow = UBound(aCV)
    ReDim res_CV(1 To sRow, 1 To 37)    'Chinh so cot
    k = 0
    For I = 1 To sRow
        If aCV(I, 2) <> "" Then
            k = k + 1
            stt = stt + 1
            If aCV(I, 2) Like "HM*" Then
                ktt = ktt + 1
                If ktt < 10 Then ktt = "0" & ktt
                res_CV(k, 2) = aCV(I, 2)
                res_CV(k, 4) = "HM" & ktt                   'Thu tu Hang muc
                'res_CV(k + 1, 4) = "GD" & ktt                   'Thu tu Hang muc
                res_CV(k, 5) = aCV(I, 3)                'Ten Hang muc
                'res_CV(k + 1, 5) = aCV(I, 3)              'Ten Hang muc
                
                stt = 0

            Else
                res_CV(k, 1) = stt                        'STT
                res_CV(k, 4) = stt
            End If
                res_CV(k, 2) = aCV(I, 2)
                res_CV(k, 5) = aCV(I, 3)
                res_CV(k, 6) = aCV(I, 4)
                res_CV(k, 7) = aCV(I, 5)

        End If
    Next I
    Sheets("DM_NT CVXD").Select
    With Sheets("DM_NT CVXD")
        LastRow = .Cells(Rows.count, "D").End(xlUp).row
        If LastRow > 9 Then
            'Xoa toan bo bang du lieu hien huu dang co
            .Rows("9:" & LastRow - 1).Delete Shift:=xlShiftUp
        Else
            .Range("C9:J" & LastRow + 1).ClearContents
        End If
        .Range("A9:A" & 9 + k).EntireRow.Insert
        If k Then
            .Range("A9").Resize(k, 37).value = res_CV
            .Range("E9:F" & 9 + k).WrapText = 1
            .Range("E9:E" & 9 + k).HorizontalAlignment = xlJustify
            .Range("E9:F" & 9 + k).VerticalAlignment = xlCenter
            .Range("A9:I" & 9 + k).Font.Bold = False
            .Range("A9").Resize(k, 37).Borders.LineStyle = 1
            .Range("A9").Resize(k + 1, 37).Interior.Color = xlNone
            .Rows("9:" & LastRow & "").EntireRow.AutoFit
        End If
    End With
    Call TangTocCode(False)
End Sub
 

File đính kèm

  • Help_Chen bo sung dong Giai doan.xlsx
    39 KB · Đọc: 5
Kính gửi anh chị!
1. Trong file em có 02 Sheet, em muốn lấy nội dung từ Sheet TD-QT-TH qua Sheet DM_NT. Nếu có tiêu đề tại cột B thì đưa qua Sheet DM_NT Đánh số hạng mục như HM01, HM02
2. Sau dòng HM thì chèn thêm 1 dòng GDxx theo số thứ tự Hạng mục với nội dung tên giống tên của Hạng mục
3. Lấy nội dung còn của hạng mục từ Sheet TD-QT-TH qua Sheet DM_NT
Em đã mày mò đã lấy được thong tin qua, còn đoạn chèn thêm dòng GD em bí và mò đủ các cách nhưng không thể nào thêm được. Mong anh chị ghé qua giúp em đoạn này ạ
Em cám ơn nhiều
View attachment 271559View attachment 271560

Mã:
Sub QLCL_DM_Cviec_Import()
    If CheckFileXLMS = False Then Exit Sub
    'De xuat tao ma se lay cot T giao nhiem vu trien khai thi cong
    On Error Resume Next
    Dim aCV(), res_CV()
    Dim sRow&, I&, k&, kt&, stt&, t&, tdR&, tdB As Boolean
    Dim LastRow, LastRow_BRN
    Call TangTocCode(True)
    With Sheets("TD-QT-TH")
        aCV = .Range("A17:N" & .Range("O" & .Rows.count).End(xlUp).row - 1).value     'Lay dong cuoi cung cua ten CT
    End With
    sRow = UBound(aCV)
    ReDim res_CV(1 To sRow, 1 To 37)    'Chinh so cot
    k = 0
    For I = 1 To sRow
        If aCV(I, 2) <> "" Then
            k = k + 1
            stt = stt + 1
            If aCV(I, 2) Like "HM*" Then
                ktt = ktt + 1
                If ktt < 10 Then ktt = "0" & ktt
                res_CV(k, 2) = aCV(I, 2)
                res_CV(k, 4) = "HM" & ktt                   'Thu tu Hang muc
                'res_CV(k + 1, 4) = "GD" & ktt                   'Thu tu Hang muc
                res_CV(k, 5) = aCV(I, 3)                'Ten Hang muc
                'res_CV(k + 1, 5) = aCV(I, 3)              'Ten Hang muc
               
                stt = 0

            Else
                res_CV(k, 1) = stt                        'STT
                res_CV(k, 4) = stt
            End If
                res_CV(k, 2) = aCV(I, 2)
                res_CV(k, 5) = aCV(I, 3)
                res_CV(k, 6) = aCV(I, 4)
                res_CV(k, 7) = aCV(I, 5)

        End If
    Next I
    Sheets("DM_NT CVXD").Select
    With Sheets("DM_NT CVXD")
        LastRow = .Cells(Rows.count, "D").End(xlUp).row
        If LastRow > 9 Then
            'Xoa toan bo bang du lieu hien huu dang co
            .Rows("9:" & LastRow - 1).Delete Shift:=xlShiftUp
        Else
            .Range("C9:J" & LastRow + 1).ClearContents
        End If
        .Range("A9:A" & 9 + k).EntireRow.Insert
        If k Then
            .Range("A9").Resize(k, 37).value = res_CV
            .Range("E9:F" & 9 + k).WrapText = 1
            .Range("E9:E" & 9 + k).HorizontalAlignment = xlJustify
            .Range("E9:F" & 9 + k).VerticalAlignment = xlCenter
            .Range("A9:I" & 9 + k).Font.Bold = False
            .Range("A9").Resize(k, 37).Borders.LineStyle = 1
            .Range("A9").Resize(k + 1, 37).Interior.Color = xlNone
            .Rows("9:" & LastRow & "").EntireRow.AutoFit
        End If
    End With
    Call TangTocCode(False)
End Sub
Chạy code
Mã:
Option Explicit
Sub ABC()
  Dim aCV(), res(), eRow&, sRow&, i&, k&, stt&, hm&
  'Call TangTocCode(True)
  With Sheets("TD-QT-TH")
    eRow = .Range("A" & .Rows.Count).End(xlUp).Row 'Lay dong cuoi cung cua cot STT
    If eRow < 17 Then MsgBox ("khong co du lieu!"): Exit Sub
    aCV = .Range("A17:F" & .Range("A" & .Rows.Count).End(xlUp).Row - 1).Value
  End With
  sRow = UBound(aCV)
  ReDim res(1 To sRow * 2, 1 To 8)
  k = 0
  For i = 1 To sRow
    If aCV(i, 2) = "HM" Then
      k = k + 2
      hm = hm + 1
      res(k - 1, 2) = "HM"
      res(k - 1, 4) = "HM" & Format(hm, "00")
      res(k - 1, 5) = aCV(i, 3)
      res(k, 4) = "GD" & Format(hm, "00")
      res(k, 5) = aCV(i, 3)
    ElseIf aCV(i, 1) <> Empty Then
      stt = stt + 1
      k = k + 1
      res(k, 1) = stt: res(k, 4) = stt
      res(k, 2) = aCV(i, 2)
      res(k, 6) = aCV(i, 4)
      res(k, 7) = aCV(i, 5)
      res(k, 8) = aCV(i, 6)
    End If
  Next i
  With Sheets("DM_NT")
    eRow = .Cells(Rows.Count, "D").End(xlUp).Row
    If eRow > 8 Then .Range("A9:J" & eRow).Clear
    If k Then
      .Range("A9").Resize(k, 8).Value = res
      .Range("E9:F9").Resize(k).WrapText = 1
      .Range("E9:F9").Resize(k).HorizontalAlignment = xlJustify
      .Range("E9:F9").Resize(k).VerticalAlignment = xlCenter
      .Range("A9").Resize(k, 8).Borders.LineStyle = 1
      .Rows("9:" & 8 + k).EntireRow.AutoFit
    End If
  End With
  'Call TangTocCode(False)
End Sub
 
Upvote 0
Anh thật tuyệt vời anh HieuCD! Em cám ơn anh nhiều ạ. Code chạy rất tốt ạ, thiếu 1 dòng code em đã bổ sung ạ
Mã:
    If aCV(i, 2) = "HM" Then
      k = k + 2
      hm = hm + 1
      res(k - 1, 2) = "HM"
      res(k - 1, 4) = "HM" & Format(hm, "00")
      res(k - 1, 5) = aCV(i, 3)
      res(k, 4) = "GD" & Format(hm, "00")
      res(k, 5) = aCV(i, 3)
    ElseIf aCV(i, 1) <> Empty Then
      stt = stt + 1
      k = k + 1
      res(k, 1) = stt: res(k, 4) = stt
      res(k, 2) = aCV(i, 2)
      res(k, 5) = aCV(i, 3)
      res(k, 6) = aCV(i, 4)
      res(k, 7) = aCV(i, 5)
      res(k, 8) = aCV(i, 6)
    End If
 
Upvote 0
Web KT

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

Back
Top Bottom