Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 53
-
19-03-08, 12:38 AM #1
So sánh trùng và không trùng trên 2 cột.
Tôi làm file có các cột như sau :
- Cột A : Dữ liệu so sánh 1
- Cột B : Dữ liệu so sánh 2
- Cột C : Lọc dữ liệu có trong cột A mà không có trong cột B
- Cột D : Lọc dữ liệu có trong cột B mà không có trong cột A
- Cột E : Lọc dữ liệu trùng cột A và B
Sau khi thử dữ liệu 300 dòng thì nó đã "lết bánh" rồi, trong khi công việc đang cần so sánh số liệu khoảng 50.000 dòng.
Nhờ các Anh Chị xem hướng dẫn sửa Name và công thức dùm, làm bằng BVA cũng tốt, miễn sao nó chạy lẹ lẹ 1 tí. Thanks
Bán tự vi Sư
-
Có 5 thành viên cảm ơn viendo về bài viết này:
-
19-03-08, 08:10 AM #2
Bạn Thử Với 2 Cái Ni Xem Tốc Độ Ra Răng?
PHP Code:Option Explicit
Dim lRow As Long, jZ As Long
Dim lRow0 As Long, jW As Long
Sub FilterAll()
Dim SChu As String
Dim XH As String
XH = Chr(13) & Chr(10)
lRow = Range("A65432").End(xlUp).Row
lRow0 = Range("B65432").End(xlUp).Row
SChu = "A: Co O Cot 'A', Khong Co O Cot 'B'" & XH
SChu = SChu & "B: Co O Cot 'B', Khong Co O Cot 'A'"
SChu = SChu & XH & "C: Co O Ca 2 Cot"
SChu = InputBox(SChu, "GPE - SaDQ")
SChu = UCase$(Left(SChu, 1))
Application.ScreenUpdating = False
If SChu = "A" Or SChu = "B" Then
TongHop SChu
ElseIf SChu = "C" Then
Dim tRow As Long
If lRow > lRow0 Then tRow = lRow Else tRow = lRow0
Range("E3:C" & tRow).ClearContents
For jZ = 3 To lRow
For jW = 3 To lRow0
If Cells(jZ, 1) = Cells(jW, 2) Then _
Range("E" & Range("E65432").End(xlUp).Row + 1) = Cells(jZ, 1)
Next jW
Next jZ
Else
XH = "BAN CAN CHON 1 TRONG 3 FUONG AN!" & XH
MsgBox XH & " BYE!", , "GPE - SaDQ"
End If
End Sub
PHP Code:Sub TongHop(MainCol As String)
Dim Cot1 As Long, Cot2 As Long
Dim StrC1 As String, StrC2 As String
Select Case UCase$(MainCol)
Case "A"
Cot1 = lRow: Cot2 = lRow0
StrC1 = "C": StrC2 = "C65432"
Range("C3:C" & lRow).ClearContents
Case "B"
Cot1 = lRow0: Cot2 = lRow
StrC1 = "D": StrC2 = "D65432"
Range("D3:d" & lRow0).ClearContents
End Select
For jZ = 3 To Cot1
For jW = 3 To Cot2
If Cells(jZ, 1) = Cells(jW, 2) Then _
Exit For
Next jW
If jW > Cot2 Then _
Range(StrC1 & Range(StrC2).End(xlUp).Row + 1) = Cells(jZ, 1)
Next jZ
End Sub
(hào tất cả mọi người!
-
Có 7 thành viên cảm ơn SA_DQ về bài viết này:
-
19-03-08, 10:00 AM #3
bạn có thê dùng công thức mảng
={if(Or(phần tử cột A = cột B),"trùng","ko trùng")}
Bạn làm tương tự cho cột B
Dùng Filter, lọc và paste sang một vùng mới.
Cái này tôi đã dùng rồi (Công ty tôi có danh sách gốc gần 200 người, danh sách tham gia cứu thương lần 1, .........tạo danh sách học cho những người chưa tham gia lần 1 sẽ tham gia lần 2 tôi cũng dùng cách này.
Bạn có thể tham khảo ở bài viết, trong đó có những cách của AnhTuan 1006 cũng rất hay mà chưa cần phải dùng đến VBA
http://www.giaiphapexcel.com/forum/s...ead.php?t=8170thay đổi nội dung bởi: feelingyes, 19-03-08 lúc 10:06 AM
-
Có 5 thành viên cảm ơn feelingyes về bài viết này:
-
19-03-08, 10:23 AM #4
Sư phụ SA_DQ ơi tôi làm chưa được, phải nhờ các sư phụ chỉ tiếp và đừng la nhé vì chưa đủ hiểu cái code này và làm sao cho nó chạy, đang bị vướng thế này đây :
- Chép thử code 1 và code 2 lần lượt vào vùng Immediate để chạy thử nó báo lỗi là Invalid in Immediate pane.
- Chép code 1 lần lượt vào Module1, Thisworkkbbookk và Sheet1. Khi nhấn chạy nó đều báo lỗi là Sub or Function not defined. Ngoài ra nó tô vàng dòng Sub FillterAll() và tô đen Tonghop ở dòng TongHop Schu.
- Chép code 2 lần lượt vào Module1, Thisworkkbbookk và Sheet1. Khi nhấn chạy nó hiện bảng Macro mà chẳng có cái Macro nào để chọn.
Phiền các sư phụ chỉ giáo tiếp dùm. Thanks
Bán tự vi Sư
-
19-03-08, 10:58 AM #5
Bạn nhấn tổ hợp fím {ALT} +{F11} để mở CS VBEphải nhờ các sư phụ chỉ tiếp vì chưa đủ hiểu cái code này và làm sao cho nó chạy, đang bị vướng. Phiền các sư phụ chỉ giáo tiếp dùm.
Và chép cả 2 macro vô module 1
Nói thêm: Macro TongHop được gọi bỡi macro còn lại & phải được nhận 1 đối số (biến) thích hợp 'A'/'B')
Như vậy bạn cần chạy cái macro còn lại kia (tên nó là FilterAll)
Khi đó 1 hộp thoại sẽ hỏi bạn cần chép vố cột nào tương ứng 'C', 'D' hay 'E'
Nếu bạn nạp biến 'A' hay 'B' thì macro này sẽ gọi macro còn lại (TongHop) truyền cho nó đối số tương ứng để nó chạy ra kết quả (KQ sẽ thể hiện trên cột 'C' hay 'D' tương ứng)
Nếu bạn nhập phương án 'C' thì macro FilterAll sẽ tiếp tục cho đến khi xong chuyện lọc ~ giá trị trùng trong 2 cột 'A' & 'B' ghi => 'E'
Bổ sung:
Nếu bạn muốn trường hợp 'C' nhanh hơn 1 tẹo nữa, thì trong macro FilterAll, tại dòng lệnh
Nên sửa lại là (Chú í: tôi đã bỏ dấu gạch dưới dùng nối 2 dòng lệnh)Code:If Cells(jZ, 1) = Cells(jW, 2) Then _ Range("E" & Range("E65432").End(xlUp).Row + 1) = Cells(jZ, 1)PHP Code:If Cells(jZ, 1) = Cells(jW, 2) Then
Range("E" & Range("E65432").End(xlUp).Row + 1) = Cells(jZ, 1)
Exit For
End If
thay đổi nội dung bởi: SA_DQ, 19-03-08 lúc 11:09 AM
(hào tất cả mọi người!
-
Có 3 thành viên cảm ơn SA_DQ về bài viết này:
-
19-03-08, 11:22 AM #6Cám ơn bạn nhiều, tôi đã tham khảo cách làm trên rồi, file tôi làm cũng đa phần là học từ các file của Anhtuan, trường hợp hiện tại của tôi là phải xử lý số liệu rất lớn và phải làm khoảng 4 lần (mỗi lần làm 1 quí khoảng 40 đến 50 ngàn dòng) rồi mới tổng hợp nên nó chạy không nổi luôn.
Nguyên văn bởi feelingyes
Ý tôi làm file này để đối chiếu sai sót của số lượng kiểm kê thực tế và số liệu trong chương trình xuất ra có chênh lệch. Một mặt phiền các sư phụ giúp file xử lý, một mặt tôi đang đề nghị chỉ kiểm tra trong từng tháng thì số liệu còn khoảng mười mấy ngàn dòng thôi.
To Sư phụ SA_DQ : để làm theo sư phụ chỉ, có gì sẽ phiền tiếp nhé, do công lực yếu kém quá nên tiếp thu cũng kém luôn hichic..Bán tự vi Sư
-
Có 2 thành viên cảm ơn viendo về bài viết này:
-
19-03-08, 02:18 PM #7
Đã làm theo hướng dẫn của Sư phụ và chạy rất ok với dữ liệu <1.000 dòng. Cám ơn rất nhiều.
Cho chạy thử Cột A 10.000 dòng và cột B 5.000 dòng nó chạy gần 20' Sư phụ ơi. (với cấu hình máy sau Processor: Intel(R) Pentium(R) 4 CPU 1.50GHz. Memory: 512MB RAM)
Có cách nào để cải thiện tiếp về tốc độ xử lý phiền các Sư phụ chỉ giáo tiếp. ThanksBán tự vi Sư
-
19-03-08, 03:08 PM #8
1*/ Hãy cho biết t1, t2 & t3 tương ứng là bao nhiêu; Để còn định hướng cải thiện í mà!Đã chạy rất ok với dữ liệu; Chạy thử Cột A 10.000 dòng và cột B 5.000 dòng nó chạy gần 20' Có cách nào để cải thiện tiếp về tốc độ xử lý phiền các Sư phụ chỉ giáo tiếp.
2*/ Dữ liệu của bạn có thể cho phép sắp xếp hay không?
Nếu trong trường hợp được phép, thì thử trước khi chạy macro, cho xếp 2 cột này lại 1 cách riêng rẽ xem tình hình có cải thiện hơn không?
(hào tất cả mọi người!
-
19-03-08, 04:21 PM #9
Nguyên văn bởi SA_DQ
- Dữ liệu hàng tháng dao động từ 10.000 đến cao nhất là 15.000 dòng.
- Dữ liệu này có thể sắp xếp, sort đều được vì mục đích là tìm ra các mã bị chênh lệch giữa 2 cột mà. Dữ liệu so sánh 2 cột thế này đây :
.....
SJL436MDFQ0030
SJL436MDFQ0025
HUL773ZABJ0006
HUL773ZABJ0010
HUL773ZABJ0004
ADXN001EABB0019
ADXN001EABB0020
AEJL064ZAEJ0006
AEJL064ZAEJ0007
.....
Bán tự vi Sư
-
19-03-08, 05:12 PM #10
Chúng ta thử từng phần việc, vậy!
Bạn vô CS VBE như trên đã nêu; Vô menu Insert & thêm 1 module nữa (tạm là module2) Và chép 2 macro này & chạy thử, so sánh với macro FilterAll -> TongHop (A) & báo kết quả nha!
Chú í: Mình mới tách & thử với trường hợp hình thành KQ trên cột 'C' thôi nha! Hai trường hợp còn lại sẽ tiếp, một khi cái này có xu hướng không tồi!
PHP Code:Option Explicit
Dim lRow As Long, jZ As Long
Dim lRowB As Long, jW As Long
Dim Timer_ As Double
Sub SearchColumnC()
Dim lTemp As Long
Timer_ = Timer
lRow = Range("A65432").End(xlUp).Row
lRowB = Range("b65432").End(xlUp).Row
Application.ScreenUpdating = False
Sort1Col Range("A2:A" & lRow), Range("A3")
Sort1Col Range("B2:B" & lRow), Range("B3")
Range("C2") = "List1<>List2"
Range("C3:C" & lRowB).ClearContents
lTemp = 3
For jZ = 3 To lRow
For jW = lTemp To lRowB
If Cells(jZ, 1) = Cells(jW, 2) Then
lTemp = jW: Exit For
End If
Next jW
If jW > lRowB Then _
Range("C" & Range("C65432").End(xlUp).Row + 1) = Cells(jZ, 1)
Next jZ
MsgBox Str(Timer - Timer_)
End Sub
PHP Code:
Sub Sort1Col(Rng As Range, Clls As Range)
Rng.Sort Key1:=Clls, Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
(hào tất cả mọi người!
Thông tin về chủ đề này
Users Browsing this Thread
Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)









Trả Lời Với Trích Dẫn



Bookmarks