Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 15

Chủ đề: Bài toán lọc và lấy dữ liệu & Nối chuỗi cột 2 nếu trùng dữ liệu cột 1

  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi n0bita1010
    Mình có bảng tính sheet 1 gồm 2 cột sau:
    Cột A: Danh sách tên công nhân (nhiều tên bị trùng do làm nhiều công trình)
    Cột B: Tên công trình họ làm trong năm 2014
    Bây giờ mình muốn đưa ra sheet 2 giống hệt sheet 3 đấy là:
    Cột A: Danh sách tên công nhân nhưng không bị trùng
    Cột B: Những công trình họ làm trong năm 2014
    ?????????????

    Sheet 3 mình lọc cột A theo Remove Duplicate rồi, cột B thì làm thủ công rất mất thời gian.
    Liệu có công thức nào giúp mình lấy dữ liệu nhanh hơn không? Mình cảm ơn.
    Sau khi đã lọc được cột A bằng Remove Duplicate rồi bạn dùng hàm "LOC" để tìm tên công trình nhé.
    Cách dùng:Tại ô B2 nhập công thức:


    =LOC(A2)
    Kéo xuống-->Ok
    Code hàm lọc:


    Public Function LOC(a As Range)
    Dim noi As String, i As Long, rng As Range
    Set rng = Sheet1.Range("A2:B" & Sheet1.Range("B65536").End(xlUp).Row)
    For i = 1 To rng.Rows.Count
    If rng(i, 1) = a Then noi = noi & rng(i, 2) & ", "
    Next i
    LOC = Left(noi, Len(noi) - 2)
    End Function

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi chuot0106
    Sau khi đã lọc được cột A bằng Remove Duplicate rồi bạn dùng hàm "LOC" để tìm tên công trình nhé.
    Cách dùng:Tại ô B2 nhập công thức:

    Kéo xuống-->Ok
    Code hàm lọc:

    <div class="bbcode_container">
    <div class="bbcode_quote">
    <div class="quote_container">
    <div class="bbcode_quote_container">
    </div>

    </div>
    </div>
    </div>
    Code thế này thiếu tổng quát nha bạn! Bởi nếu dữ liệu của người ta nếu không nằm ở sheet1, cũng không phải thuộc vùng A2:Bx thì làm sao? Bảo người ta tự sửa code à?
    Bài toán nối chuỗi có cả đống trên diễn đàn rồi, bạn tự tìm và tham khảo đi nhé
    ------------------------------
    Các bạn thử viết 1 Sub như bài 2 nhưng không dùng Transpose xem thế nào. Đây là bài tập khá hay để "dợt" dic + array đấy

  3. #3
    zincos Guest

    Bài toán lọc và lấy dữ liệu & Nối chuỗi cột 2 nếu trùng dữ liệu cột 1

    Mình có bảng tính sheet 1 gồm 2 cột sau:
    Cột A: Danh sách tên công nhân (nhiều tên bị trùng do làm nhiều công trình)
    Cột B: Tên công trình họ làm trong năm 2014
    Bây giờ mình muốn đưa ra sheet 2 giống hệt sheet 3 đấy là:
    Cột A: Danh sách tên công nhân nhưng không bị trùng
    Cột B: Những công trình họ làm trong năm 2014
    ?????????????

    Sheet 3 mình lọc cột A theo Remove Duplicate rồi, cột B thì làm thủ công rất mất thời gian.
    Liệu có công thức nào giúp mình lấy dữ liệu nhanh hơn không? Mình cảm ơn.

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi n0bita1010
    Mình có bảng tính sheet 1 gồm 2 cột sau:
    Cột A: Danh sách tên công nhân (nhiều tên bị trùng do làm nhiều công trình)
    Cột B: Tên công trình họ làm trong năm 2014
    Bây giờ mình muốn đưa ra sheet 2 giống hệt sheet 3 đấy là:
    Cột A: Danh sách tên công nhân nhưng không bị trùng
    Cột B: Những công trình họ làm trong năm 2014
    ?????????????

    Sheet 3 mình lọc cột A theo Remove Duplicate rồi, cột B thì làm thủ công rất mất thời gian.
    Liệu có công thức nào giúp mình lấy dữ liệu nhanh hơn không? Mình cảm ơn.
    Công thức thì chịu, nếu dùng VBA thì thử code này xem sao


    Mã:
    Public Sub Tong_HopCV()
    Dim DL, r As Long
    DL = Sheet1.Range("A1", Sheet1.Range("B1000000").End(xlUp))
    
    With CreateObject("Scripting.Dictionary")
    For r = 1 To UBound(DL)
    If Not .exists(DL(r, 1)) Then
    .Add DL(r, 1), DL(r, 2)
    Else
    .Item(DL(r, 1)) = .Item(DL(r, 1)) & ", " & DL(r, 2)
    End If
    Next r
    DL = .keys
    Sheet2.Range("A1", Sheet2.Range("A1000000").End(xlUp)).Clear
    Sheet2.Range("A1").Resize(.Count, 1).Value = Application.Transpose(DL)
    DL = .items
    Sheet2.Range("B1", Sheet2.Range("B1000000").End(xlUp)).Clear
    Sheet2.Range("B1").Resize(.Count, 1).Value = Application.Transpose(DL)
    End With
    
    End Sub

  5. #5
    denpk Guest
    Trích dẫn Gửi bởi quocphuoc88
    Mượn nguồn bài 2 , e thử vận dụng Dic không dùng hàm transpose theo gợi ý của Thầy Ndu.

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Cám ơn bạn! Tuy chưa test cũng thấy code ngon lành rồi
    Bài toán sẽ khó hơn khi phải tính trường hợp cột A hoặc cột B có dữ liệu rổng
    Mời tiếp tục [IMG]images/smilies/a01.gif[/IMG]
    (đã chơi thì phải chơi.. tới)

  6. #6
    hungosp Guest
    Liệu có thể giải bài toán này = DAO hoặc ADO?

  7. #7
    vietglass68 Guest
    Trích dẫn Gửi bởi Hai Lúa Miền Tây
    Liệu có thể giải bài toán này = DAO hoặc ADO?
    Ủa? Vậy ADO cũng có nối chuỗi sao ta? Nếu có, Hai Lúa đưa lên cho mọi người xem thử

  8. #8
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi OverAC
    Một cách làm bằng công thức kèm một số điều kiện áp dụng: Danh sách được sắp xếp trước, thêm một cột phụ
    hay, dể hiểu nhưng chịu khó lọc tên sát nhau theo thứ tự hàng nếu tên nằm ở hàng khác cách tên 1 người khác thì hàm của mình sẽ trả về kết quả ko như mong muốn. Nhưng chịu khó tí nếu võ công yếu sử dụng code sẽ bị tẩu hỏa... thank bạn

  9. #9
    kingkonghn Guest
    Trích dẫn Gửi bởi ndu96081631
    Ủa? Vậy ADO cũng có nối chuỗi sao ta? Nếu có, Hai Lúa đưa lên cho mọi người xem thử
    Em làm thử = DAO, tuy nhiên làm chơi cho vui vậy thôi chứ ai mà vận dụng.


    Mã nguồn PHP:
    Sub DAO_HLMT() Dim db As Database Dim rst As Recordset, rst1 As Recordset Set db = OpenDatabase(ThisWorkbook.FullName, False, False, "Excel 8.0;HDR=YES;") Set rst = db.OpenRecordset("SELECT * FROM [DataGoc$]") Sheet4.Range("A2:B100").EntireRow.Delete Set rst1 = db.OpenRecordset("SELECT * FROM [DataMoi$]") Do Until rst.EOF = True rst1.FindFirst ("TenCN = '" & rst![TenCN] & "'") If rst1.NoMatch = True Then rst1.AddNew rst1![TenCN] = rst![TenCN] rst1![TenCT] = rst![TenCT] rst1.Update Else rst1.Edit rst1![TenCT] = rst1![TenCT] & ", " & rst![TenCT] rst1.Update End If rst.MoveNext Loop rst.Close rst1.Close db.CloseEnd Sub  
    Code trên chưa tự động chọn thư viện ...DAO x.x...

  10. #10
    hailong Guest
    Mượn nguồn bài 2 , e thử vận dụng Dic không dùng hàm transpose theo gợi ý của Thầy Ndu.

    Mã:
    Public Sub Tong_HopCV()
    Dim DL, r As Long, KQ(), i As Long, k As Long
        DL = Sheet1.Range("A2", Sheet1.Range("B1000000").End(xlUp))
        ReDim KQ(1 To UBound(DL, 1), 1 To 2)
        With CreateObject("Scripting.Dictionary")
            For r = 1 To UBound(DL)
                If Not .exists(DL(r, 1)) Then
                    i = i + 1
                    .Add DL(r, 1), i
                    KQ(i, 1) = DL(r, 1)
                    KQ(i, 2) = DL(r, 2)
                Else
                    k = .Item(DL(r, 1))
                    KQ(k, 2) = KQ(k, 2) & "," & DL(r, 2)
                End If
            Next r
            Sheet3.Range("A2", Sheet3.Range("A1000000").End(xlUp)).Clear
            Sheet3.Range("A2").Resize(i, 2).Value = KQ
        End With
    
    End Sub

Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •