LinDan
Thành viên tiêu biểu

- Tham gia
- 8/2/12
- Bài viết
- 412
- Được thích
- 111
sSQL = "SELECT DISTINCT" & FieldName & "FROM" & SheetName [COLOR=#ff0000]& _
"WHERE" & FieldName & "<> NULL AND" & FieldName & "<>0"
[/COLOR]
Sub LocDuyNhat()
Dim FileName As String, SheetName As String, FieldName As String, _
AppPath As String, sSQL As String, ObjRcs As Object
AppPath = ThisWorkbook.Path
FileName = "LocDuyNhat.xlsm"
SheetName = " [Sheet1$] "
FieldName = " [Title] "
If ExcelConnect(AppPath, FileName) = False Then
MsgBox "Không kêt nôi", vbOKOnly + vbExclamation, "Thông báo"
GoTo ExitSub
Else
sSQL = "SELECT DISTINCT" & FieldName & "FROM" & SheetName & _
"WHERE" & FieldName & "<> NULL AND" & FieldName & "<>0"
Set ObjRcs = CreateObject("ADODB.Recordset")
On Error GoTo SheetFieldNameErr
ObjConnect.Open
ObjRcs.Open sSQL, ObjConnect, 0, 1, 1
If ObjRcs.EOF Then
MsgBox "Không có dieu kien này", vbOKOnly + vbInformation, "THÔNG BÁO"
GoTo ExitSub
Else
Sheet1.Range("C2:C1048576").ClearContents
Sheet1.Range("C2").CopyFromRecordset ObjRcs
End If
End If
ExitSub:
Set ObjRcs = Nothing
If Not ObjConnect Is Nothing Then
If (ObjConnect.State And adStateOpen) = adStateOpen Then ObjConnect.Close
Set ObjConnect = Nothing
End If
Exit Sub
SheetFieldNameErr:
MsgBox "Ten Sheet hoac ten Tieu de cot chua dung, xin kiem tra lai!", vbCritical, "THÔNG BÁO"
Resume ExitSub
End Sub
sSQL = "SELECT DISTINCT" & FieldName & _
"FROM" & SheetName & _
"WHERE" & FieldName & "<> NULL AND" & FieldName & "<>[COLOR=#0000cd]0 " & _[/COLOR]
[COLOR=#0000cd]"ORDER BY" & FieldName & "DESC"[/COLOR]
Dùng ADO đi, khi lọc sẽ tự sắp xếp tăng dần!
Tham khảo tại bài 113:
http://www.giaiphapexcel.com/forum/showthread.php?75143-Bài-tập-về-ADO-căn-bản&p=474034#post474034
Bạn tham khảo bài tương tự như ở dưới xem có đúng không nhé
Cách này chưa chuẩn bác ah.
Em đọc bài giải VBA như của các thày trên diễn đàn, em có hiểu cách làm. Nhưng quả là không thể nào nghĩ ra cách giải bằng công thức thông thường như thế nào (em định dùng hàm Index nhưng hàm này chỉ cho kết quả duy nhất, không cho dưới dạng mảng). Em có cảm giác thuật toán của bài này nếu giải bằng công thức có khi còn khó hơn VBA?
Xin Trân trọng nhờ mọi người chỉ cho em cách giải bằng công thức (không dùng VBA, không dùng Sort bằng công cụ có sẵn trong Excel). Bởi em đang cần luyện thêm về phần công thức, mặt khắc với dữ liệu hằng ngày em xử lý thông thường chỉ khoảng 200 dòng thì có lẽ cách này tỏ ra phù hợp hơn nhât.
ADO có thể dùng cho name range màTrường hợp này bắt buộc ta phải chỉ chính xác vùng dữ liệu mà ta cần lọc (chứ đâu phải lọc nguyên sheet). Vậy trường hợp này ta tính sao?
ADO có thể dùng cho name range mà
Nếu dữ liệu của bạn là số, giống như trong file ví dụ của bạn thì dùng công thức có thể như thế này. Đặt các Name sau cho tiện:LinDan đã viết:Xin Trân trọng nhờ mọi người chỉ cho em cách giải bằng công thức (không dùng VBA, không dùng Sort bằng công cụ có sẵn trong Excel). Bởi em đang cần luyện thêm về phần công thức, mặt khắc với dữ liệu hằng ngày em xử lý thông thường chỉ khoảng 200 dòng thì có lẽ cách này tỏ ra phù hợp hơn nhât.
Data=Sheet1!$A$2:$A$13
Ma=SMALL(IF(Data=0,"",Data),ROW(INDIRECT("1:"&COUNTIF(Data,">0"))))
=INDEX(Ma,MATCH(0,COUNTIF($D$1:D1,Ma),0))
Dạ em biết. Ác cái nếu range vượt quá 65536 dòng thì code báo lỗi (dù file là xlsm đàng hoàng)
Sư phụ xem cái này sẽ biết:
http://www.giaiphapexcel.com/forum/showthread.php?75143-B%C3%A0i-t%E1%BA%ADp-v%E1%BB%81-ADO-c%C4%83n-b%E1%BA%A3n/page12
Một cách dùng công thức theo kiểu dữ liệu trong bàiEm đọc bài giải VBA như của các thày trên diễn đàn, em có hiểu cách làm. Nhưng quả là không thể nào nghĩ ra cách giải bằng công thức thông thường như thế nào (em định dùng hàm Index nhưng hàm này chỉ cho kết quả duy nhất, không cho dưới dạng mảng). Em có cảm giác thuật toán của bài này nếu giải bằng công thức có khi còn khó hơn VBA?
Xin Trân trọng nhờ mọi người chỉ cho em cách giải bằng công thức (không dùng VBA, không dùng Sort bằng công cụ có sẵn trong Excel). Bởi em đang cần luyện thêm về phần công thức, mặt khắc với dữ liệu hằng ngày em xử lý thông thường chỉ khoảng 200 dòng thì có lẽ cách này tỏ ra phù hợp hơn nhât.
Thân=IF(C12="","",IF(C12=MAX($A$2:$A$13),"",SMALL($A$2:$A$13,COUNTIF($A$2:$A$13,"<="&N(C12))+1)))
Unique bằng công thức đã khó, Unique and sort lại càng khó hơn (chứ không phải không làm được)
Xin hỏi bạn: Dữ liệu mà bạn cần lọc thuộc dạng number hay text?
Một cách dùng công thức theo kiểu dữ liệu trong bài
Công thưc ở [C2]:
ThânPHP:=IF(C12="","",IF(C12=MAX($A$2:$A$13),"",SMALL($A$2 :$A$13,COUNTIF($A$2:$A$13,"<="&N(C12))+1)))
Cách này chưa chuẩn bác ah.
Xin chào GPE!
E có một bài toàn trong file kèm mong GPE xem và giúp Em với ạ.
Xin cảm ơn!
Xin chào GPE!
Mong mọi người xem file kèm và giúp em với ạ!
Em xin cảm ơn!