Cần giúp lấy dữ liệu

Liên hệ QC

longkhanhck

Thành viên mới
Tham gia
3/10/11
Bài viết
48
Được thích
3
Em có file excel cần lấy dữ liệu từ nhiều dòng khác nhau của sheet detail vào 1 dòng bên sheet summary. Lấy dữ liệu đến khi nào hết thông tin ở cột A,B,C trong sheet detail nhưng nếu làm bằng tay thì lâu quá nên nhờ Anh chị trên diễn đàng giúp đỡ.
Thông tin cần lấy như file đính kèm ạ
 

File đính kèm

  • Data.xls
    1.6 MB · Đọc: 19
Em có file excel cần lấy dữ liệu từ nhiều dòng khác nhau của sheet detail vào 1 dòng bên sheet summary. Lấy dữ liệu đến khi nào hết thông tin ở cột A,B,C trong sheet detail nhưng nếu làm bằng tay thì lâu quá nên nhờ Anh chị trên diễn đàng giúp đỡ.
Thông tin cần lấy như file đính kèm ạ
Trong khi chờ các giải pháp khác thử code này xem sao
Mã:
Option Explicit

Sub ABC()
Dim i&, j&, Lr&, t&, k&, d&, R&, Length&
Dim Arr(), KQ()
Dim Sh As Worksheet, Ws  As Worksheet
Set Sh = Sheets("Detail")
Lr = Sh.Cells(Rows.Count, 13).End(xlUp).Row
Arr = Sh.Range("A7:P" & Lr).Value
R = UBound(Arr)
ReDim KQ(1 To R, 1 To 9)
For i = 1 To R
    If Arr(i, 3) <> Empty Then
        t = t + 1: d = 0: Length = 0: k = i
        d = Sh.Cells(i + 6, 13).End(xlDown).Row - 6
            KQ(t, 1) = t
            KQ(t, 2) = Arr(i, 1)
            KQ(t, 3) = Arr(i, 2)
            KQ(t, 4) = Arr(i, 3)
        For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
        For k = i To d
            If Arr(k, 16) <> Empty Then KQ(t, 9) = Arr(k, 16): Exit For
        Next k
            KQ(t, 6) = Arr(d, 13)
            KQ(t, 7) = Arr(d, 14)
            KQ(t, 8) = Arr(d, 15)
    End If
Next i
Set Ws = Sheets("Summary List")
If t Then
    Ws.Range("B4").Resize(50000, 9).Clear
    Ws.Range("B4").Resize(t, 9) = KQ
    Ws.Range("B4").Resize(t, 9).Borders.LineStyle = 1
End If
MsgBox "Done"
End Sub
 
Upvote 0
@HUONGHCKT chú lại ẩu rồi. Chú chưa coi hết dữ liệu đúng không ? Dữ liệu file này có vẻ không chuẩn. Chuẩn mấy dòng đầu á.
1664727992869.png
 
Upvote 0
Trong khi chờ các giải pháp khác thử code này xem sao
Mã:
Option Explicit

Sub ABC()
Dim i&, j&, Lr&, t&, k&, d&, R&, Length&
Dim Arr(), KQ()
Dim Sh As Worksheet, Ws  As Worksheet
Set Sh = Sheets("Detail")
Lr = Sh.Cells(Rows.Count, 13).End(xlUp).Row
Arr = Sh.Range("A7:P" & Lr).Value
R = UBound(Arr)
ReDim KQ(1 To R, 1 To 9)
For i = 1 To R
    If Arr(i, 3) <> Empty Then
        t = t + 1: d = 0: Length = 0: k = i
        d = Sh.Cells(i + 6, 13).End(xlDown).Row - 6
            KQ(t, 1) = t
            KQ(t, 2) = Arr(i, 1)
            KQ(t, 3) = Arr(i, 2)
            KQ(t, 4) = Arr(i, 3)
        For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
        For k = i To d
            If Arr(k, 16) <> Empty Then KQ(t, 9) = Arr(k, 16): Exit For
        Next k
            KQ(t, 6) = Arr(d, 13)
            KQ(t, 7) = Arr(d, 14)
            KQ(t, 8) = Arr(d, 15)
    End If
Next i
Set Ws = Sheets("Summary List")
If t Then
    Ws.Range("B4").Resize(50000, 9).Clear
    Ws.Range("B4").Resize(t, 9) = KQ
    Ws.Range("B4").Resize(t, 9).Borders.LineStyle = 1
End If
MsgBox "Done"
End Sub
Cảm ơn bạn đã chia sẽ, nhưng code sẽ bỏ qua dữ liệu nếu 1 trong 3 ô ở cùng 1 dòng của cột A, B,C trống
ví dụ như Ảnh dưới. Vẫn lấy tất cả những dữ liệu khác (màu đỏ) nếu B,C trống dữ liệu (màu xanh).
Bạn giúp mình điều chỉnh code với nha.
1664728190167.png
Bài đã được tự động gộp:

@HUONGHCKT chú lại ẩu rồi. Chú chưa coi hết dữ liệu đúng không ? Dữ liệu file này có vẻ không chuẩn. Chuẩn mấy dòng đầu á.
View attachment 281615
Bạn đúng là chuyên gia rồi.
 
Upvote 0
@HUONGHCKT chú lại ẩu rồi. Chú chưa coi hết dữ liệu đúng không ? Dữ liệu file này có vẻ không chuẩn. Chuẩn mấy dòng đầu á.
Cảm ơn bạn đã nhắc nhở. Tôi chi xem dữ liệu mấy dòng đầu và mấy dòng cuối, chứ không xem hết phần bên trong.
Mà cũng nhân tiện hỏi bạn luôn là: Làm cách nào mà bạn phát hiện ra dữ liệu không chuẩn vậy? Chẳng nhẽ lại dò từng dòng ư? Tôi nghĩ là không chỉ có tôi mà có rất rất nhiều bạn muốn biết cách phát hiện dữ liệu không chuẩn đấy. Xin được thông não
Rất mong bạn hồi âm. Trân trọng cảm ơn.
 
Upvote 0
Cảm ơn bạn đã chia sẽ, nhưng code sẽ bỏ qua dữ liệu nếu 1 trong 3 ô ở cùng 1 dòng của cột A, B,C trống
ví dụ như Ảnh dưới. Vẫn lấy tất cả những dữ liệu khác (màu đỏ) nếu B,C trống dữ liệu (màu xanh).
Bạn giúp mình điều chỉnh code với nha.
View attachment 281616
Bài đã được tự động gộp:


Bạn đúng là chuyên gia rồi.
Thay code cũ bằng code này
Mã:
Option Explicit

Sub ABC()
Dim i&, j&, Lr&, t&, k&, d&, R&, Length&, A&
Dim Arr(), KQ()
Dim Sh As Worksheet, Ws  As Worksheet
Set Sh = Sheets("Detail")
Lr = Sh.Cells(Rows.Count, 13).End(xlUp).Row
Arr = Sh.Range("A6:P" & Lr).Value
R = UBound(Arr)
ReDim KQ(1 To R, 1 To 9)
For i = 1 To R
    If Arr(i, 1) <> Empty Then
        If Not IsNumeric(Mid(Arr(i, 1), 2, 1)) Then
            j = j + 1: A = A + 1
            KQ(j, 1) = Application.WorksheetFunction.Roman(A)
            KQ(j, 2) = Arr(i, 1)
        End If
        If IsNumeric(Mid(Arr(i, 1), 1, 2)) Then
            t = t + 1: j = j + 1: d = 0: Length = 0: k = i
        d = Sh.Cells(i + 5, 13).End(xlDown).Row - 5
            KQ(j, 1) = t
            KQ(j, 2) = Arr(i, 1)
            KQ(j, 3) = Arr(i, 2)
            KQ(j, 4) = Arr(i, 3)
        For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
        For k = i To d
            If Arr(k, 16) <> Empty Then KQ(j, 9) = Arr(k, 16): Exit For
        Next k
            KQ(j, 6) = Arr(d, 13)
            KQ(j, 7) = Arr(d, 14)
            KQ(j, 8) = Arr(d, 15)
    End If
End If
Next i
Set Ws = Sheets("Summary List")
If t Then
    Ws.Range("B4").Resize(50000, 9).Clear
    Ws.Range("B4").Resize(j, 9) = KQ
    Ws.Range("B4").Resize(j, 9).Borders.LineStyle = 1
End If
MsgBox "Done"
End Sub
xem file
 

File đính kèm

  • Data.xlsm
    2 MB · Đọc: 9
Upvote 0
Thay code cũ bằng code này
Mã:
Option Explicit

Sub ABC()
Dim i&, j&, Lr&, t&, k&, d&, R&, Length&, A&
Dim Arr(), KQ()
Dim Sh As Worksheet, Ws  As Worksheet
Set Sh = Sheets("Detail")
Lr = Sh.Cells(Rows.Count, 13).End(xlUp).Row
Arr = Sh.Range("A6:P" & Lr).Value
R = UBound(Arr)
ReDim KQ(1 To R, 1 To 9)
For i = 1 To R
    If Arr(i, 1) <> Empty Then
        If Not IsNumeric(Mid(Arr(i, 1), 2, 1)) Then
            j = j + 1: A = A + 1
            KQ(j, 1) = Application.WorksheetFunction.Roman(A)
            KQ(j, 2) = Arr(i, 1)
        End If
        If IsNumeric(Mid(Arr(i, 1), 1, 2)) Then
            t = t + 1: j = j + 1: d = 0: Length = 0: k = i
        d = Sh.Cells(i + 5, 13).End(xlDown).Row - 5
            KQ(j, 1) = t
            KQ(j, 2) = Arr(i, 1)
            KQ(j, 3) = Arr(i, 2)
            KQ(j, 4) = Arr(i, 3)
        For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
        For k = i To d
            If Arr(k, 16) <> Empty Then KQ(j, 9) = Arr(k, 16): Exit For
        Next k
            KQ(j, 6) = Arr(d, 13)
            KQ(j, 7) = Arr(d, 14)
            KQ(j, 8) = Arr(d, 15)
    End If
End If
Next i
Set Ws = Sheets("Summary List")
If t Then
    Ws.Range("B4").Resize(50000, 9).Clear
    Ws.Range("B4").Resize(j, 9) = KQ
    Ws.Range("B4").Resize(j, 9).Borders.LineStyle = 1
End If
MsgBox "Done"
End Sub
xem file
1664761494977.png

1664761597125.png
Lần này thì code lấy sai giá trị max của length
 
Upvote 0
View attachment 281620

View attachment 281621
Lần này thì code lấy sai giá trị max của length
Bạn thay dòng lệnh sau
Mã:
 For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
Thành
Mã:
 For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(j, 5) = Length
        Next k
 
Upvote 0
Bạn thay dòng lệnh sau
Mã:
 For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
Thành
Mã:
 For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(j, 5) = Length
        Next k
Gía trị sum ở cột I (Total Weight) hiện tại code cho kết quả = 289254.39 nhưng kết quả đúng phải là 289065.26.
Có nhầm lẫn ở chỗ nào đó
 
Upvote 0
Bạn thay dòng lệnh sau
Mã:
 For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(t, 5) = Length
        Next k
Thành
Mã:
 For k = i To d
            If Arr(k, 7) <> Empty And IsNumeric(Arr(k, 7)) And Arr(k, 7) >= Length Then Length = Arr(k, 7): KQ(j, 5) = Length
        Next k
1664766442386.png
Mình check lại thì thấy Code sẽ bỏ qua dữ liệu nếu cell ở đó trống, và mã kia có tên như vậy
 

File đính kèm

  • 1664765292828.png
    1664765292828.png
    64.9 KB · Đọc: 16
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom