Dò tìm chính xác tuyệt đối

Liên hệ QC

tangoctuan

Thành viên hoạt động
Tham gia
22/4/08
Bài viết
153
Được thích
19
Nhờ các Pro viết giúp 1 đoạn VBA để dò tìm giá trị chính xác tuyệt đối. Với điều kiện:
  • Chỉ trả kết quả dò tìm của các giá trị ở cột 3 vào cột KQ - khi giá trị ở cột 4 là 1.
  • Nếu giá trị cột 4 khác 1 thì không thay đổi giá trị tương ứng có sẵn ở cột KQ. (tức là code chỉ tác động vào cột KQ với những dòng có con 1 ở cột 4).
  • Dò tìm với điều kiện chính xác tuyệt đối, phân biệt cả hoa/thường hay không dấu/có dấu.
Dữ liệu có thể lên tới 500k dòng nên dùng hàm thông thường không chạy nổi.
Mình có gửi theo kèm file nhờ các bạn hỗ trợ giúp.
Untitled(2).png
 

File đính kèm

Lần chỉnh sửa cuối:
Bro viết tắt của Brother, tức nói về người đối diện với một sự tôn trọng, nể trọng, như một người bề trên.
...
Bro viết tắt của Brother: đúng
tôn trọng, nể trọng, như một người bề trên: sai
Khác với tiếng Việt, brother chỉ là anh hoặc em, không hề có chứa nghĩa "bề trên". Tiếng Việt thì "anh" là bề trên, "em" hoàn toàn không thể là bề trên. Chỉ khi nào từ Brother viết hoa, lúc ấy là một chức vị trong Công Giáo (Huynh), và là một cách gọi tôn trọng.
Từ brother, viết tắt thành bro là cách nói chuyện của dân giang hồ. Nó du nhập từ cách gọi của các nhóm băng đảng da đen hoặc Latin bên Mỹ. Tuy mang tiếng "thân mật" nhưng chỉ dùng để nói chuyện ngang hàng; không bao giờ dùng trong trường hợp lịch sự.
 
Upvote 0
Có gì đâu, hoàn toàn được. Nhưng mà trước hết mình thấy:
Lần trước thì bạn hỏi là 500 dòng thì cần gì code trong khi mình có nói rõ là 500k dòng.
Lần này thì bạn lại hỏi tiền làm key để tìm, trong khi mình cũng nói rất rõ là tiền là kết quả giá trị trả về khi dò tìm.
Có vẻ công việc của bạn khá là bận bịu nên thường ít khi đọc được kỹ.
Anw, vẫn có rất rất nhiều trường hợp tiền cũng là 1 key dò tìm thật sự, đối với tất cả mọi người chứ chẳng riêng gì mình. Chúng ta mỗi người chỉ làm 1 nghề, không thể biết hết mọi nghề của xã hội để có thể nghi ngờ vậy.
Với riêng mình, có thể tiền được dùng làm key để tìm ra khách hàng nào, thời điểm nào, ở địa điểm nào... tương ứng với giá trị tiền đó. Muôn hình muôn vẻ.



Cũng không hẳn như thế đâu, mình thì cũng ít khi dùng, nhưng bạn có thể dạo qua khá nhiều các forum lớn và uy tín, cả ở VN hay nước ngoài, thì có thể dễ dàng nhận ra từ đó được áp dụng rất thông dụng, với ý nghĩa trang trọng. Bro viết tắt của Brother, tức nói về người đối diện với một sự tôn trọng, nể trọng, như một người bề trên.

Tự bạn đọc lại. Tôi đúng là không có thời gian giúp mà phải đi dịch từ tắt, từ lóng ở đây, nên dùng sự giúp đỡ của các thành viên khác vậy. Cứ giữ cách nói cách viết cho của riêng.
 
Upvote 0
Mình rất ngạc nhiên nếu bạn chưa bao giờ gặp trường hợp nào như vậy đấy.
Thật tình là mình rất ngạc nhiên khi người Việt viết: Tks bạn, Dear mọi người, Sorry bạn,... giống thời trước 1975 dân "BỒI" nói tiếng "BỒI".
Còn "BỒI" thời trước nữa thì có: "Moa nói cho toa nghe", "Sao toa ôm vợ moa"...
Chú ý: Đây là nói về từ ngữ trong giao tiếp (viết, nói) với người Việt bằng tiếng Việt, còn các từ chuyên môn như "Window", "Office", "File", "Sheet", "Module", ... thì không nói tới.
 
Lần chỉnh sửa cuối:
Upvote 0
Bro viết tắt của Brother: đúng
tôn trọng, nể trọng, như một người bề trên: sai
Khác với tiếng Việt, brother chỉ là anh hoặc em, không hề có chứa nghĩa "bề trên". Tiếng Việt thì "anh" là bề trên, "em" hoàn toàn không thể là bề trên. Chỉ khi nào từ Brother viết hoa, lúc ấy là một chức vị trong Công Giáo (Huynh), và là một cách gọi tôn trọng.
Từ brother, viết tắt thành bro là cách nói chuyện của dân giang hồ. Nó du nhập từ cách gọi của các nhóm băng đảng da đen hoặc Latin bên Mỹ. Tuy mang tiếng "thân mật" nhưng chỉ dùng để nói chuyện ngang hàng; không bao giờ dùng trong trường hợp lịch sự.
Có những khi miệng nói anh nhưng là hàm ý mỉa mai, có những khi gọi em nhưng chất chứa đầy sự tôn trọng. Quan trọng là thái độ và cách nhìn nhận cũng như thể hiện của người nói, không nên quá đi vào từng câu chữ để đánh giá sự tôn trọng của mỗi người dành cho nhau.
Cách nhìn của mỗi người với cùng một vấn đề khác nhau là điều bình thường mình cũng đã nói rồi. Quan điểm của mỗi người cần tôn trọng, vì thế mình xin phép không tranh luận thêm về việc này. Hơn nữa, việc tranh luận này cảm thấy thật buồn cười, bởi nó chẳng liên quan gì đến topic này cả, cũng chẳng hiểu tại sao bro đó từ đâu mà có ở đây nữa.
 
Upvote 0
Tự bạn đọc lại. Tôi đúng là không có thời gian giúp mà phải đi dịch từ tắt, từ lóng ở đây, nên dùng sự giúp đỡ của các thành viên khác vậy. Cứ giữ cách nói cách viết cho của riêng.
Mình đọc lại rất nhiều rồi, nhưng không thấy có bất kỳ ý nào về những điều bạn nói (mà mình tưởng đã lỡ viết ra không hay biết). Và mình nghĩ chắc là bạn mới là người chỉ đọc 1 lần, lại là lần lướt.
Nếu có thể bạn chỉ hộ mình đã dùng từ tắt nào để bạn bị nhầm từ 500.000 thành 500? Hay bạn nghĩ 500k thì k kia là tắt? Không một ai hiểu nhầm như bạn thì bạn có đang nghĩ rằng bạn có thể đúng như một người từ hành tinh khác như lời một thành viên đã nói ở trên không?
Hay mình đã nói tắt thế nào để bạn nhầm mình đang chỉ việc tiền là từ khóa tìm trong khi mình nói rằng tiền là kết quả trả về khi dò tìm? Có lẽ bạn đã đọc lướt quá nhanh vì quá tự tin với khả năng đọc hiểu của mình.
Nếu bạn là một thành viên nhưng không giúp đỡ những thành viên khác với những lý do bạn đã nêu đó, thì mình cũng chẳng biết làm sao và cũng chẳng còn gì để nói nữa.
 
Upvote 0
Thật tình là mình rất ngạc nhiên khi người Việt viết: Tks bạn, Dear mọi người, Sorry bạn,... giống thời trước 1975 dân "BỒI" nói tiếng "BỒI".
Còn "BỒI" thời trước nữa thì có: "Moa nói cho toa nghe", "Sao toa ôm vợ moa"...
Chú ý: Đây là nói về từ ngữ trong giao tiếp (viết, nói) với người Việt bằng tiếng Việt, còn các từ chuyên môn như "Window", "Office", "File", "Sheet", "Module", ... thì không nói tới.
Vậy thì mình cũng chịu không biết mô tả thế nào nữa. Môi trường của mình thì những lời nói như thank you hay sorry quá bình thường luôn. Level, Share hay trên truyền thông liên tục nói về fairplay. Rất nhiều từ ngoại ngữ được sử dụng tùy từng tình huống hoàn cảnh mà mình không bao giờ nghĩ họ nói ra với một mục đích khoe khoang.
Riêng tiếng Trung Quốc phổ biến đến mức độ người ta nói ra một cách vô thức mà không biết mình đã nói ra một từ không phải của Việt Nam. Tiếng Pháp cũng quá nhiều luôn, có ai khi nói những từ như alo, ôtô, uống bia, chào sếp, ê kíp, búp bê, xi nhan, sân ga, nhà băng...mà biết được rằng mình đang nói những từ không phải tiếng mẹ đẻ?
Bài đã được tự động gộp:

Thì cứ coi như tôi lầm, tôi xin lỗi vậy.

View attachment 226929
Ồ bạn đang lấy từ một topic khác sang. Một người đã từng đi tù cách đây 10 năm bây giờ vẫn có thể là một người rất tử tế. Việc bàn luận theo cách như vậy không đến được điều gì cả.
Và cũng như mình đã nói ở trên rồi:
Có những khi miệng nói anh nhưng là hàm ý mỉa mai, có những khi gọi em nhưng chất chứa đầy sự tôn trọng. Quan trọng là thái độ và cách nhìn nhận cũng như thể hiện của người nói, không nên quá đi vào từng câu chữ để đánh giá sự tôn trọng của mỗi người dành cho nhau.
Cách nhìn của mỗi người với cùng một vấn đề khác nhau là điều bình thường mình cũng đã nói rồi. Quan điểm của mỗi người cần tôn trọng, vì thế mình xin phép không tranh luận thêm về việc này.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình đã thử hết các cách ở trên và đã hiện giải quyết tốt được vấn đề rồi. Sau không rõ còn tình huống nào nữa không nhưng như hiện tại là chạy nhanh lắm rồi, mất có khoang trên dưới 2 phút thôi, so với trước mình ngồi uống hết cafe vẫn chưa xong.
Cám ơn các bro rất nhiều!
Bài đã được tự động gộp:


File text chạy báo lỗi.
Bài đã được tự động gộp:


Sửa lại code bác Hiếu theo như này thì chạy ngon lành luôn. :)
Dữ liệu lớn muốn tăng tốc độ cần chia nhỏ dữ liệu, tùy cấu hình máy tính khoảng cách chia có thể gia giảm
Mã:
Sub DoTimBigData()
  Dim sArr(), dArr(), S() As Object, Res()
  Dim fRow&, eRow&, eRow2&, sRow&, i&, j&, M&, ikey$
  Const dR As Long = 50000 'Tuy cau hinh may, tang giam dR phu hop

  With Sheet1
    eRow = .Range("A" & Rows.Count).End(xlUp).Row
    eRow2 = .Range("D" & Rows.Count).End(xlUp).Row
    If eRow < 3 Or eRow2 < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A3:B" & eRow).Value
    dArr = .Range("D3:E" & eRow2).Value
    Res = .Range("F3:F" & eRow2).Value
  End With

  sRow = UBound(sArr)
  M = sRow \ dR + 1
  ReDim S(1 To M)
  fRow = 1
  For j = 1 To M
    Set S(j) = CreateObject("scripting.dictionary")
    If j = M Then eRow = sRow Else eRow = fRow + dR - 1
    For i = fRow To eRow
      S(j).Item(CStr(sArr(i, 1))) = sArr(i, 2)
    Next i
    fRow = eRow + 1
  Next j

  sRow = UBound(dArr)
  For i = 1 To sRow
    If dArr(i, 2) = 1 Then
      ikey = dArr(i, 1)
      For j = 1 To M
        If S(j).exists(ikey) Then
          Res(i, 1) = S(j).Item(ikey)
          Exit For
        End If
      Next j
    End If
  Next i
  Sheet1.Range("F3").Resize(sRow).Value = Res
End Sub
 
Upvote 0
Mình đọc lại rất nhiều rồi, nhưng không thấy có bất kỳ ý nào về những điều bạn nói (mà mình tưởng đã lỡ viết ra không hay biết). Và mình nghĩ chắc là bạn mới là người chỉ đọc 1 lần, lại là lần lướt.
Nếu có thể bạn chỉ hộ mình đã dùng từ tắt nào để bạn bị nhầm từ 500.000 thành 500? Hay bạn nghĩ 500k thì k kia là tắt? Không một ai hiểu nhầm như bạn thì bạn có đang nghĩ rằng bạn có thể đúng như một người từ hành tinh khác như lời một thành viên đã nói ở trên không?
Hay mình đã nói tắt thế nào để bạn nhầm mình đang chỉ việc tiền là từ khóa tìm trong khi mình nói rằng tiền là kết quả trả về khi dò tìm? Có lẽ bạn đã đọc lướt quá nhanh vì quá tự tin với khả năng đọc hiểu của mình.
Nếu bạn là một thành viên nhưng không giúp đỡ những thành viên khác với những lý do bạn đã nêu đó, thì mình cũng chẳng biết làm sao và cũng chẳng còn gì để nói nữa.
Hãy làm sao các thành viên hiểu và giúp mình thay vì quay sang trách người giúp không hiểu và đôi co với họ. Hết nói.
 
Upvote 0
...
Ồ bạn đang lấy từ một topic khác sang. Một người đã từng đi tù cách đây 10 năm bây giờ vẫn có thể là một người rất tử tế. Việc bàn luận theo cách như vậy không đến được điều gì cả.
...
Ủa tôi có nói là lầm, và xin lỗi mà. Hay là phải nói bằng tiếng "thông dụng" hơn?
Nô pơ ró lem mô. Mi nói lầm. So ri du.

(Má bầy trẻ đâu. Đưa xà bông đây cho tẩy miệng)
 
Upvote 0
Ủa tôi có nói là lầm, và xin lỗi mà. Hay là phải nói bằng tiếng "thông dụng" hơn?
Nô pơ ró lem mô. Mi nói lầm. So ri du.

(Má bầy trẻ đâu. Đưa xà bông đây cho tẩy miệng)
Đây chính là thể hiện rõ ràng nhất của việc nói A nhưng bụng lại nghĩ B đấy. :)
 
Upvote 0
Dữ liệu lớn muốn tăng tốc độ cần chia nhỏ dữ liệu, tùy cấu hình máy tính khoảng cách chia có thể gia giảm

Const dR As Long = 50000 'Tuy cau hinh may, tang giam dR phu hop
Cám ơn bạn nhiều. Code này chạy nhanh hơn rất nhiều rồi. 50000 này là dòng à bạn? Máy càng mạnh thì càng tăng được cao hơn hay càng nhỏ đi thì chạy càng nhanh nhỉ? Nhưng thế nào thì mặc định giá trị này cũng đã chạy ổn lắm rồi.
 
Upvote 0
Bài kiểu này muốn nhanh thì tốt nhất có thể không nên dùng object Dictionary?
 
Upvote 0
Đây chính là thể hiện rõ ràng nhất của việc nói A nhưng bụng lại nghĩ B đấy. :)
Tây bồi mờ. Ý muốn A nhưng xổ Tây thành ra nghĩa B là bình thường.
Điển hình, dân Tây bồi hay dùng câu "Sorry bạn".
sorry là một tĩnh tự (adjective). Theo văn phạm Anh, tĩnh tự bổ nghĩa cho danh tự ở hai trường hợp:
1. khi nó đi theo một động tự loại tả trạng, điển hình là động từ to be.
2. khi nó đi trước một danh tự.
Khi Tây bồi nói "sorry bạn", họ không biết rằng theio văn phạm thì nó lọt vào trường hợp thứ hai. Và thay vì xin lỗi, câu này người biết tiếng Anh đọc thành ra "bạn đáng tội thật".

Chú: ở đây cũng dã có bạn từng được Tây bồi gọi là Master. Tuy master có nghĩa là "thầy, chủ", nhưng lúc di với danh từ riêng (tên) thì danh vị; và có nghĩa là "cậu" (chỉ gọi con nít dưới 14). Nguyễn nếu trên 14 thì gọi là Mr Nguyễn; dưới tuổi ấy thì gọi là Master Nguyễn.
Trong truyện Batman, Pennyworth gọi Master Wayne không phải do Bruce là chủ ông ta. Mà chính vì ông ta chăm sóc y thừ nhỏ.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom