Hỏi về sort (lấy danh sách với giá trị một cột không trùng)

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi seal, 26 Tháng mười một 2005.

5,795 lượt xem

  1. seal

    seal Thành viên sơ cấp

    Bài viết:
    9
    Đã được thích:
    0
    Nơi ở:
    TPHCM
    Giả sử có bảng sau :
    Tên Tiền
    Nguyen Van A 5000
    Nguyen Van B 8000
    Nguyen Van A 5000
    Nguyen Van C 9000
    Nguyen Van A 3000
    Nguyen Van B 5000
    Nguyen Van A 3000

    Vấn đề 1 : Giả sử tôi muốn select dạng DISTINCT của SQL túc chỉ hiên lên 3 tên A B C thôi.(3 hàng thôi ko hiện những tên trùng)
    Vấn đề 2 : Tôi muốn tính tiền tổng theo từng người - và tui đã dùng cách trên để SUMIF với dối chiếu bằng tên người kế bên đã lựa ra nhưng tôi phải đánh lại từng tên và vấn đề này có vẻ ko hợp lý lắm(đánh lại từng tên)
    Các bạn ơi dữ liệu này ko phải của tôi nếu tôi tôi chuyển wa VB viet chương trình luôn gùi nhưng do dữ liệu đã nhập lâu lắm rùi và ko thể thay đổi dữ liệu đc
     
    #1
  2. Secret_grasses

    Secret_grasses Thành viên hoạt động

    Bài viết:
    317
    Đã được thích:
    3
    Nơi ở:
    Ngôi nhà nhỏ trên thảo nguyên.
    Em không rành SQL lắm. Nhưng anh có thể sd hàm subtotal trong excel để tính thổng tiền theo từng người.
    Giả sử cột tên là cột A, cột tiền là cột B.
    Trước tiên anh sort theo cột A. Sau đó vào data/subtotal.
    Ở At each change in: bạn chọn cột A,Use function : chọn sum,Add subtotal to: chọn cột B.
    Sau đó bạn vào format condition để tô đậm phần tổng cho dễ nhìn.
     

    Các file đính kèm:

    • vd.rar
      Kích thước:
      2.7 KB
      Đọc:
      190
    #2
  3. duyennt

    duyennt Thành viên thân thiết

    Bài viết:
    94
    Đã được thích:
    0
    Nơi ở:
    Bình Dương
    Tôi không biết ý của bạn cụ thể thế nào. Nếu lấy những giá trị không trùng nhau từ 1 danh sách, có thể sử dụng hàm If để lọai ra cũng được. Trước hết bạn cần Sort theo thứ tự, sau đó dùng công thức =if(B3<>B2,1,"") và sau đó dùng Autofilter chọn Blanks hoặc Nonblanks bạn sẽ được những giá trị không trùng nhau. (cũng hơi thủ công đấy)
     
    #3
  4. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    (Các bác ơi tên tiêu đề là do em sửa lại phần trong ngoặc là do em ghi nếu kô đúng thì báo để em sửa lại)

    Ngoài các cách trên còn có thể dùng Advance Filter để lọc:
    1. Chọn vùng lọc là cột tên (chỉ là cột tên)
    2. Vùng điều kiện là vùng trống
    3. Tích chọn 'Unique record only'
    --> kết quả lọc một vùng dử liệu với các tên kô trùng nhau.
    --> copy cái này đi chổ khác vậy là có một danh sách các tên không trùng nhau trong bảng rồi.

    Ngày xưa em đã từng làm như Secrect_Grasses rồi collapse nó để lấy cột tên với chữ Total. Sau đó tách chữ total ra. Bây giờ nghĩ lại cách này buồn cười quá. (Cái này kô phải là chê bài của Secrect_Grasses buồn cười đâu àh nha. Subtotal thì làm như Secrect_Grasses là hoàn toàn đúng nhưng nếu lấy danh sách duy nhất thì ...) :biggrin;
     
    #4
  5. Longlv

    Longlv Thành viên hoạt động

    Bài viết:
    44
    Đã được thích:
    1
    Nơi ở:
    Hanoi
    Theo tôi có lẽ dùng Pivot table là cách làm nhanh và dễ nhất. Chọn cột tên vào Row area và cột Tiền vào data area chọn subtotal là sum, là có thể giải quyết cả 2 yêu cầu đặt ra.
     
    #5
  6. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Vấn đề này được các bạn thảo luận rồi, cũng có nhiều hướng giải quyết, cũng đã có bạn còn viết hẳn một cái Add-In cơ. Đại khái cũng có nhiều cách, dùng công thức kết hợp Look up and Reference, Short sau đó kiểm tra như bạn Duyennt, dùng VBA v...v
    Vấn đề này tôi cũng có viết 1 cái macro (lâu rồi, khi mới học VBA) mà theo anh Duyệt là còn rất nhiều lỗi... nhưng tôi thấy nó cũng chạy được. Tôi copy lại đây:

    Sub OnlyList()
    On Error Resume Next
    Dim i As Long, dsNguon As Range, dsLoc As Range
    Set dsLoc = Range(Selection, Selection.Offset(1000, 0))
    Set dsNguon = Range(InputBox("Nhap vao danh sach can trich loc"))
    Selection = dsNguon(1)
    For i = 1 To dsNguon.Rows.Count
    If Not Tontai(dsNguon(i), dsLoc) And dsNguon(i) <> "" Then
    Selection.Offset(1, 0).Select
    Selection = dsNguon(i)
    End If
    Next i
    End Sub
    Function Tontai(Giatri, List As Range)
    Dim i As Long
    Tontai = False
    For i = 1 To List.Rows.Count
    If List(i) = "" Then
    Exit Function
    ElseIf Giatri = List(i) Then
    Tontai = True
    Exit Function
    End If
    Next i
    End Function
     
    Last edited: 28 Tháng mười một 2005
    #6
  7. lathanhtom

    lathanhtom Thành viên hoạt động

    Bài viết:
    46
    Đã được thích:
    0
    Nơi ở:
    hcmc
    Pivot table la best way
     
    #7
  8. WhoamI

    WhoamI Thành viên thân thiết

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    2 in 1. Cả 2 vấn đề của bạn đều được giải quyết rất đơn giản = tools của Excel:
    Thứ nhất = pivottable
    Thứ nhì = Consolidate
    Có rất nhiều bài viết hướng dẫn sử dụng 2 tool này. Bạn có thể tìm đọc lại bên box Excel chuyên đề.
    Hi`, và nếu Excel pó tay và muốn trình bày đẹp thì hãy dùng đến VBA.
     
    #8
  9. seal

    seal Thành viên sơ cấp

    Bài viết:
    9
    Đã được thích:
    0
    Nơi ở:
    TPHCM
    Lâu wá mới way lại diễn đàn cảm ơn các bác trước để em thử rùi phúc đáp sau
     
    #9
  10. omron

    omron Thành viên hoạt động

    Bài viết:
    34
    Đã được thích:
    0
    Nơi ở:
    TPHCM
    Bạn còn có thể kết hợp hai hàm countif va vlookup la cũng trích lọc được mà. chưa cần đến pivottable và Consolidate
     
    #10
  11. thucthuc

    thucthuc Thành viên sơ cấp

    Bài viết:
    38
    Đã được thích:
    0
    Nơi ở:
    Lò nấu cao HỔ cốt
    Cái này tui nghĩ cũng dễ thôi mà, các bác nói addin, pivot.... nhức đầu quá.
    ------------------------------------
    A ......................B
    ------------------------------------
    CHAI600VH
    CHAI700TK
    CHAI700TK28
    CHAI700TK28
    CHAI750VICCO
    CHAI900BT
    CHAI900BT
    CHAI900BT
    CHAI900BT

    Nếu muốn lọc ra thì mình sort trước, sau đó cho B1"=A1", còn B2 "= IF(A2=A1;0;A2)". Drag đến hàng cuối, sau đó copy cột B rồi paste value lại rồi sort 1 lần nữa ta được kết quả như ý.
    Làm cái này thủ công nhưng nhanh, đỡ nhức đầu.
     
    #11
  12. WhoamI

    WhoamI Thành viên thân thiết

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    Hihi, đúng rồi bác ah, đỡ nhức đầu nhưng sẽ nhức tay :biggrin:
     
    #12
  13. thucthuc

    thucthuc Thành viên sơ cấp

    Bài viết:
    38
    Đã được thích:
    0
    Nơi ở:
    Lò nấu cao HỔ cốt
    Chính xác như xe rác!
     
    #13
  14. omron

    omron Thành viên hoạt động

    Bài viết:
    34
    Đã được thích:
    0
    Nơi ở:
    TPHCM
    Làm cái này thủ công nhưng nhanh, đỡ nhức đầu.[/QUOTE]

    Nhức đầu 1 lần sẽ k nhức đầu lần tới ! Làm như bạn sẽ còn nhứt đầu hoài !:wall:
     
    #14

Chia sẻ trang này