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

  • Thread starter seal
  • Ngày gửi
S

seal

Thành viên sơ cấp
25/11/05
9
0
0
TPHCM
#1
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
 
Secret_grasses

Secret_grasses

Thành viên sơ cấp
#2
seal nói:
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
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.
 

Đính kèm

  • 2.7 KB Lượt xem: 191
D

duyennt

Thành viên thân thiết
14/7/05
94
0
6
Bình Dương
#3
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)
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
36
Nha Trang
#4
(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;
 
L

Longlv

Thành viên sơ cấp
21/10/05
44
1
8
41
Hanoi
#5
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.
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#6
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
 
Sửa lần cuối:
L

lathanhtom

Thành viên sơ cấp
8/8/05
46
0
0
42
hcmc
#7
Longlv nói:
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.
Pivot table la best way
 
W

WhoamI

Thành viên thân thiết
#8
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.
 
S

seal

Thành viên sơ cấp
25/11/05
9
0
0
TPHCM
#9
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
 
O

omron

Thành viên sơ cấp
28/6/05
34
0
0
41
TPHCM
#10
WhoamI nó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.
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
 
T

thucthuc

Thành viên sơ cấp
17/10/05
38
0
0
Lò nấu cao HỔ cốt
#11
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.
 
O

omron

Thành viên sơ cấp
28/6/05
34
0
0
41
TPHCM
#14
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:
 

Thành viên trực tuyến

  • theanhst92
  • Hà Huy Tiến
  • daongocnam0603
  • linhprohn9

Xem nhiều