Tìm kiếm giá trị trùng từ dưới lên trên.

Liên hệ QC

kingempty

Thành viên mới
Tham gia
29/6/10
Bài viết
7
Được thích
1
Chào các bạn, mình có bài toán đặt ra như sau, tìm kiếm giá trị bị trùng và lấy giá trị cuối cùng của giá trị bị trùng đó.
VD:
Sắt 10000
Kẽm 20000
Đồng 30000
Kẽm 60000
Nhôm 40000

Mình muốn lấy giá trị của kẽm sau cùng là 60000. (Hàm VLOOKUP chỉ tìm thấy Kẽm = 20000 thôi) Giúp mình gấp nha các bạn. Thanks!
 
Macro thử nha:

PHP:
Option Explicit
Sub LastValue()
 Dim Rng As Range, sRng As Range
 
 Set Rng = Range("I3:I8")
 Set sRng = Rng.Find("Zn", , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
   Set sRng = Rng.FindPrevious(sRng)
   MsgBox sRng.Offset(, 1).Value
 End If
End Sub
3 |KLoai|Gia|
4 |Fe|10000|
5 |Zn|20000|
6 |Cu|30000|
7 |Zn|60000|
8 |Al|40000|
 
Sử dụng marco này như thế nào bạn ơi! Mình làm bên excel, dùng được marco này được hả bạn?
 
Chào các bạn, mình có bài toán đặt ra như sau, tìm kiếm giá trị bị trùng và lấy giá trị cuối cùng của giá trị bị trùng đó.
VD:
Sắt 10000
Kẽm 20000
Đồng 30000
Kẽm 60000
Nhôm 40000

Mình muốn lấy giá trị của kẽm sau cùng là 60000. (Hàm VLOOKUP chỉ tìm thấy Kẽm = 20000 thôi) Giúp mình gấp nha các bạn. Thanks!
Gấp thì cũng phải chờ xem "quơ cấp" xong đã chứ.
Không sử dụng code được thì xài tạm cái này
 

File đính kèm

Xem thêm trong file, nhen.

Sử dụng marco này như thế nào bạn ơi! Mình làm bên excel, dùng được marco này được hả bạn?

Bạn mở file đính kèm & nhấn tổ hợp {CTRL}+{SHIFT}+V để macro tính cho bạn. (Tổ hợp fím tắc mình gán cho macro đó bạn có thể sửa lại)

(2) Xin biếu bạn thêm hàm người dùng (Tất nhiên trong excel):
PHP:
Option Explicit
Function lVLOOKUP(VungTra As Range, NgTo As String) As Double
 Dim Clls As Range
 
 For Each Clls In VungTra
   If Clls.Value = NgTo Then lVLOOKUP = Clls.Offset(, 1).Value
 Next Clls
End Function

Mình đang xài hàm này ở [G5] đó
 

File đính kèm

Thanks mọi người, mình đã làm được marco.
Hàm người dùng của bạn SA_DQ hay quá, thanks bạn rất nhiều!
 
Lần chỉnh sửa cuối:
Bạn mở file đính kèm & nhấn tổ hợp {CTRL}+{SHIFT}+V để macro tính cho bạn. (Tổ hợp fím tắc mình gán cho macro đó bạn có thể sửa lại)

(2) Xin biếu bạn thêm hàm người dùng (Tất nhiên trong excel):
PHP:
Option Explicit
Function lVLOOKUP(VungTra As Range, NgTo As String) As Double
 Dim Clls As Range
 
 For Each Clls In VungTra
   If Clls.Value = NgTo Then lVLOOKUP = Clls.Offset(, 1).Value
 Next Clls
End Function

Mình đang xài hàm này ở [G5] đó
Sư phụ dò ngựoc từ dứoi lên trên, gặp đúng điều kiện thì ra kết quả và Exit For luôn --> Như vậy chắc chắn tốc độ nhanh hơn nhiều lần
 
Dò ngược như thế nào bạn, có thể cho mình cái code đó không?
 
Dò ngược như thế nào bạn, có thể cho mình cái code đó không?
Thì vầy nè:
PHP:
Function PrLookup(LVal, LRange As Range, ColIndex As Long)
  Dim i As Long
  For i = LRange.Rows.Count To 1 Step -1
    If LRange(i, 1) = LVal Then
      PrLookup = LRange(i, ColIndex)
      Exit Function
    End If
  Next
End Function
Cách dùng giống y chang VLOOKUP
=PrLookup(Trị dò, Bảng dò, Cột dò)
Ví dụ
PHP:
=PrLookup(E5,$B$5:$C$9,2)
--------------
Vấn đề ở đây là: Tìm từ dưới lên (Step -1), nếu tìm thấy thì gán giá trị và thoát luôn ---> Như vậy tốc độ sẽ nhanh hơn so với tìm tất tần tật
 

File đính kèm

Lần chỉnh sửa cuối:
Ok, thanks bạn nhiều! Mình viết được y chang bạn nhưng thiếu "Step -1" nên nó chạy không ra! Mình hơi gà VB :D
Các hàm hoạt động rất hiệu quả.
Một lần nữa thanks tất cả các bạn đã giúp đỡ!!
 
Lần chỉnh sửa cuối:
Thì vầy nè:
PHP:
Function PrLookup(LVal, LRange As Range, ColIndex As Long)
  Dim i As Long
  For i = LRange.Rows.Count To 1 Step -1
    If LRange(i, 1) = LVal Then
      PrLookup = LRange(i, ColIndex)
      Exit Function
    End If
  Next
End Function
Cách dùng giống y chang VLOOKUP
=PrLookup(Trị dò, Bảng dò, Cột dò)
Ví dụ
PHP:
=PrLookup(E5,$B$5:$C$9,2)
--------------
Vấn đề ở đây là: Tìm từ dưới lên (Step -1), nếu tìm thấy thì gán giá trị và thoát luôn ---> Như vậy tốc độ sẽ nhanh hơn so với tìm tất tần tật

Cám ơn thầy, tốc độ nhanh hơn, và rất dễ dùng.

Khoi
 
Web KT

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

Back
Top Bottom