Các câu hỏi về hàm dò tìm dữ liệu (Lookup, Vlookup, Hlookup...) (1 người xem)

  • Thread starter Thread starter songlon
  • Ngày gửi Ngày gửi
Liên hệ QC

Closed poll

  • 1

    Votes: 1 100.0%
  • 2

    Votes: 0 0.0%

  • Total voters
    1
  • Poll closed .

Người dùng đang xem chủ đề này

Status
Không mở trả lời sau này.
Đành chờ tác giả Topic vậy! Cũng mong bạn không sai!

Rất có thể cách hiểu khác nhau. Hàm của mình có cơ chế tìm như sau: Tìm trong vùng TC kể cả nội dung của ô hay comment nếu thỏa mãn trả về giá trị ô chỉ định. Như bạn viết rất có thể bạn muốn lấy Comment thì phải? Nếu truy xuất kiểu đó thì phải xác định kết quả để riêng hay trộn lẫn, vì rất có thể kết quả có cả giá trị có cả comment.

Mình bổ sung thêm phần gán trị của hàm VLOOKUP() trong excel cho đủ lễ bộ đây

PHP:
Option Explicit
Function LookUpComm(LookUpValue, LookUpRegion As Range, Col As Byte)
 Dim Clls As Range, Rng As Range:         Dim Comm
 On Error GoTo LoiLookup
 Set Rng = LookUpRegion.Cells(1, 1).Resize(LookUpRegion.Rows.Count)
 For Each Clls In Rng
   If Clls.Value = LookUpValue Then
      With Clls.Offset(, Col)                      'xlCellTypeComments '
         If Intersect(.Offset(), Cells.SpecialCells(-4144)) Is Nothing Then
            LookUpComm = .Value
         Else
            Comm = .Comment.Text
            LookUpComm = .Value & " " & Comm
         End If
      End With
   End If
 Next Clls
ErrLookUp:           Exit Function
LoiLookup:
   LookUpComm = Application.WorksheetFunction.VLookup(LookUpValue, LookUpRegion, 1 + Col, 0)
   Resume ErrLookUp
End Function

(Xin nhắc lại: Hàm tự tạo này sẽ trả về giá trị trong ô tìm thấy thỏa điều kiện & nối thêm đoạn ghi chú nếu ô đó có ghi chú (Comments)

Tất nhiên, nếu cần tách hai phần giá trị & phần Comment thì phải thêm vài từ nữa vô câu lệnh.

Thân ái!
 
Mình thêm hàm look1() các bạn cho ý kiến nhé. (Nếu kết quả có comment thì ô hàm trả về cũng có comment)
=Look1(VungTK,TC,cot,dc)
-VungTK: Vùng dò tìm
-TC: Tiêu chuẩn tìm
-Cột lấy dữ liệu.
-dc: Địa chỉ ô đặt hàm này.

Mã:
Public Function look1(vung As Range, tc, cot, dc As Range)
Dim rg As Range
Dim c As Comment
    Application.Volatile
    Set rg = vung.Find(tc, LookIn:=xlValues, LookAt:=xlWhole)
        If Not rg Is Nothing Then
        look1 = rg.Offset(, cot)
        Else
    look1 = "None"
    Exit Function
        End If
        Set c = dc.Comment
           If Not c Is Nothing Then c.Delete
        Set c = rg.Offset(, cot).Comment
           If Not c Is Nothing Then dc.AddComment c.Text
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Mình thêm hàm look1() các bạn cho ý kiến nhé. (Nếu kết quả có comment thì ô hàm trả về cũng có comment)
=Look1(VungTK,TC,cot,dc)
-VungTK: Vùng dò tìm
-TC: Tiêu chuẩn tìm
-Cột lấy dữ liệu.
-dc: Địa chỉ ô đặt hàm này.

Mã:
Public Function look1(vung As Range, tc, cot, dc As Range)
Dim rg As Range
Dim c As Comment
    Application.Volatile
    Set rg = vung.Find(tc, LookIn:=xlValues, LookAt:=xlWhole)
        If Not rg Is Nothing Then
        look1 = rg.Offset(, cot)
        Else
    look1 = "None"
    Exit Function
        End If
        Set c = dc.Comment
           If Not c Is Nothing Then c.Delete
        Set c = rg.Offset(, cot).Comment
           If Not c Is Nothing Then dc.AddComment c.Text
End Function
Anh Sealand làm hàm này rất hay, nhưng có 1 điểm hơi khó chịu, đó là phải thêm biến dc vào (em vẩn đang bó tay chổ này) ---> Không biết "nói" thế nào cho Excel hiểu là "Tôi đang nói đến cell mà tôi đang gõ công thức"
Add Comment sang 1 cell khác là điều quá dể... Hic...
Em đang liên tưởng tới việc Add Comment thông qua UDF ở bài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=22707
 
To Ndu: Nếu là Sub thì khỏi nói nhưng hàm thì mình hơi quẩn chưa tìm ra cách nên đành phải khai thêm vậy,rồi đưa lên mong sẽ có ý kiến mọi người chắc sẽ hay hơn.
Trong bài Ndu giới thiệu cũng cho thấy đây là vấn đề không đơn giản, dám mạo muội bắt UDF thay đổi sheet trong khi nó còn là chuyện chưa ngã ngũ của các cao thủ.

Giờ mình sửa thành hàm Look2(VungTK,TC,cot) (Cái đoạn tìm kiếm thì mình tạm vậy, ai có code hay hơn thì bổ xung giùm)
(Ndu à, giải pháp ở từ khóa Thiscell và mình cũng chứng minh Anh Tuan có lý cho rằng UDF không những trả về kết quả mà còn làm thay đổi bảng tính)
Mã:
Public Function look2(vung As Range, tc, cot)
Dim rg As Range
Dim c As Comment
    Application.Volatile
    Set rg = vung.Find(tc, LookIn:=xlValues, LookAt:=xlWhole)
        If Not rg Is Nothing Then
        look2 = rg.Offset(, cot)
        Else
    look2 = "None"
    Exit Function
        End If
        Set c = Application.ThisCell.Comment
           If Not c Is Nothing Then c.Delete
        Set c = rg.Offset(, cot).Comment
           If Not c Is Nothing Then Application.ThisCell.AddComment c.Text
       End Function
 

File đính kèm

Lần chỉnh sửa cuối:
To Ndu: Nếu là Sub thì khỏi nói nhưng hàm thì mình hơi quẩn chưa tìm ra cách nên đành phải khai thêm vậy,rồi đưa lên mong sẽ có ý kiến mọi người chắc sẽ hay hơn.
Trong bài Ndu giới thiệu cũng cho thấy đây là vấn đề không đơn giản, dám mạo muội bắt UDF thay đổi sheet trong khi nó còn là chuyện chưa ngã ngũ của các cao thủ.

Giờ mình sửa thành hàm Look2(VungTK,TC,cot) (Cái đoạn tìm kiếm thì mình tạm vậy, ai có code hay hơn thì bổ xung giùm)
(Ndu à, giải pháp ở từ khóa Thiscell và mình cũng chứng minh Anh Tuan có lý cho rằng UDF không những trả về kết quả mà còn làm thay đổi bảng tính)
Mã:
Public Function look2(vung As Range, tc, cot)
Dim rg As Range
Dim c As Comment
    Application.Volatile
    Set rg = vung.Find(tc, LookIn:=xlValues, LookAt:=xlWhole)
        If Not rg Is Nothing Then
        look2 = rg.Offset(, cot)
        Else
    look2 = "None"
    Exit Function
        End If
        Set c = Application.ThisCell.Comment
           If Not c Is Nothing Then c.Delete
        Set c = rg.Offset(, cot).Comment
           If Not c Is Nothing Then Application.ThisCell.AddComment c.Text
       End Function
Quá tuyệt... cứ lẩn quẩn mà không hề biết rằng có cái "ThisCell" này...
Cảm ơn anh Sealand... Chỉ cần vậy, mọi chuyện còn lại là quá dể
Ẹc... Ẹc...
 
--=0Mình rất cảm ơn các bác đã nghiên cứu giúp mình%#^#$, nhưng mình chỉ vừa tìm hiểu về excel gần đây nên chưa hiểu nhiều về macro. Mình xin nói cụ thể hơn về vấn đề đang mắc phải: Trong sheet2 mình có một danh sách gồm tên, giới tính, địa chỉ, số điện thoại và hình của các bạn trong lớp mình, hình này mình đã đưa vào comment ở dạng nền của comment (như các bác đã nói ở những topic trước - fill effect...). Ở sheet1 mình đặt một thanh tiêu đề cũng gồm tên, giới tính, địa chỉ, số điện thoại và hình như tiêu đề trong sheet2, ở row bên dưới thanh tiêu đề này mình dùng lệnh vlookup cho từng ô tương ứng để tìm dữ liệu từ sheet2 (từ khóa là tên các bạn trong danh sách mà mình sẽ nhập vào 1 ô ($A$1)), khi đó nếu mình nhập tên ví dụ tên An thì trong các ô tên, giới tính, địa chỉ, số điện thoại và hình cũng sẽ ra kết quả của bạn An tương ứng trong sheet2. Các hàm vlookup vẫn ra kết quả đúng, nhưng chỉ có phần hình là không ra được vì hình mình đưa vào comment ở dạng hình nền (fill effect). +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+Vậy xin các bác giúp mình làm sao để khi mình đánh tên của bạn An thì ở ô hình cũng xuất hiện comment (mỗi khi draw chuột đến) là hình nền của bạn An tương ứng. Rất mong sự giúp đỡ của các bác. Cảm ơn các bác đã đọc topic của mình.
 
Để giải quyết yêu cầu của Topic bằng sub thì không khó, cái khó là tạo hàm thôi.
Hiện mình đang loay hoay lấy Path & Name của hình trên Comment gốc. Nếu gỡ được thì yêu cầu của Topic sử lý bằng hàm OK
 
Lần chỉnh sửa cuối:
Ví dụ ở trang tính 'S0' có các trường sau:
A|B|C|D|E
TT | Ma | HoTen | NSinh | Picture
01|A001|Nguyen Van Minh|1957|H1
02|A017|Nguyen Viet Hong|1948|H2
03|A005|Le Thi Thom|1974|H7
04|B001|Trinh Luong Phong|1956|H4
05|A081|Ha Cuong Quyet|1953|H9
. .|. . .|. . .:-= |}}}}} |--=0
(Mà tại cột 'E', bắt đầu từ 'E2' chứa hình ảnh của đương sự)

Tại trang tính 'S1' ta có các trường sau:
A|B|C|D|E
| Ma | HoTen | NSinh | Picture
[A2]||||

Tại ô [A2] của 'S1' ta lập danh sách đổ xuống nhờ CF để chọn mã nhân viên theo danh sách có bên 'S0'

Ta phải chuột vô thanh SheetName của 'S1', & chọn dòng cuối để mở cửa sổ VBE;

Bạn Copy & dán macro này vô CS vừa xuất hiện:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [A2]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range
 
   Set Sh = Sheets("S0"):        Set Rng = Sh.Range(Sh.[b1], Sh.[b1].End(xlDown))
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      With Target.Offset(, 4)
         .Offset(, -2).Value = sRng.Offset(, 1).Value
         .Offset(, -1).Value = sRng.Offset(, 2).Value
         sRng.Offset(, 3).Copy Destination:=.Offset()
      End With
   End If
 End If
End Sub


Vận hành: Chọn 1 mã trong [A2] sẽ có đủ thông tin về người có mã số như vậy!


Chúc bạn thành công :-= --=0 :-=
 
Tạm thời giải quyết câu hỏi của dophuhao
 

File đính kèm

To Ndu: Nếu là Sub thì khỏi nói nhưng hàm thì mình hơi quẩn chưa tìm ra cách nên đành phải khai thêm vậy,rồi đưa lên mong sẽ có ý kiến mọi người chắc sẽ hay hơn.
Trong bài Ndu giới thiệu cũng cho thấy đây là vấn đề không đơn giản, dám mạo muội bắt UDF thay đổi sheet trong khi nó còn là chuyện chưa ngã ngũ của các cao thủ.

Giờ mình sửa thành hàm Look2(VungTK,TC,cot) (Cái đoạn tìm kiếm thì mình tạm vậy, ai có code hay hơn thì bổ xung giùm)
(Ndu à, giải pháp ở từ khóa Thiscell và mình cũng chứng minh Anh Tuan có lý cho rằng UDF không những trả về kết quả mà còn làm thay đổi bảng tính)
Mã:
[COLOR=black]Public Function look2(vung As Range, tc, cot)[/COLOR]
[COLOR=black]Dim rg As Range[/COLOR]
[COLOR=black]Dim c As Comment[/COLOR]
[COLOR=black]  Application.Volatile[/COLOR]
[COLOR=black]  Set rg = vung.Find(tc, LookIn:=xlValues, LookAt:=xlWhole)[/COLOR]
[COLOR=black]      If Not rg Is Nothing Then[/COLOR]
[COLOR=black]      look2 = rg.Offset(, cot)[/COLOR]
[COLOR=black]      Else[/COLOR]
[COLOR=black]  look2 = "None"[/COLOR]
[COLOR=black]  Exit Function[/COLOR]
[COLOR=black]      End If[/COLOR]
[COLOR=black]      Set c = Application.ThisCell.Comment[/COLOR]
[COLOR=black]         If Not c Is Nothing Then c.Delete[/COLOR]
[COLOR=black]      Set c = rg.Offset(, cot).Comment[/COLOR]
[COLOR=black]         If Not c Is Nothing Then Application.ThisCell.AddComment c.Text[/COLOR]
[COLOR=black]     End Function[/COLOR]
Em nghĩ anh dùng Find trong UDF này coi chừng không ổn... anh có thể xem bài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=7146&page=12
Đố vui bài số #116
Vấn đề ở đây là nếu có 2 dử liệu trùng nhau, mà dử liệu trùng thứ nhất nằm tại cell đầu tiên của bảng dò thì Find sẽ lấy kết quả cell thứ 2
Theo em thì nên vầy:
PHP:
Function ComLookup(Tritim, Vungtim As Range, Cot As Long)
  With Application
    .Volatile
    If Not .ThisCell.Comment Is Nothing Then .ThisCell.Comment.Delete
    ComLookup = .VLookup(Tritim, Vungtim, Cot, 0)
    With Vungtim(.Match(Tritim, Vungtim.Resize(, 1), 0), Cot)
      If Not .Comment Is Nothing Then
        Application.ThisCell.AddComment .Comment.Text
      End If
    End With
  End With
End Function
Việc lổi xuất hiện khi hàm không tìm thấy ta cứ để nguyên (như hàm VLOOPUP của Excel vẩn làm thế)
 

File đính kèm

Em nghĩ anh dùng Find trong UDF này coi chừng không ổn... anh có thể xem bài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=7146&page=12
Đố vui bài số #116
Vấn đề ở đây là nếu có 2 dử liệu trùng nhau, mà dử liệu trùng thứ nhất nằm tại cell đầu tiên của bảng dò thì Find sẽ lấy kết quả cell thứ 2
Theo em thì nên vầy:
PHP:
Public Function look2(vung As Range, tc, cot)
Dim rg As Range
Dim c As Comment
  Application.Volatile
  Set rg = vung.Find(tc, LookIn:=xlValues, LookAt:=xlWhole)
      If Not rg Is Nothing Then
      look2 = rg.Offset(, cot)
      Else
  look2 = "None"
  Exit Function
      End If
      Set c = Application.ThisCell.Comment
         If Not c Is Nothing Then c.Delete
      Set c = rg.Offset(, cot).Comment
         If Not c Is Nothing Then Application.ThisCell.AddComment c.Text
     End Function
Việc lổi xuất hiện khi hàm không tìm thấy ta cứ để nguyên (như hàm VLOOPUP của Excel vẩn làm thế)

có cách nào dùng lệnh Find mà láy được 2 giá trị không anh
 
To AnhTuan:
Đúng là dùng Find dễ xảy ra chuyện nếu mã lồng nhau (Mã trùng thì khỏi nói ) Ví dụ MS10 và MS100

Như mình đã nói, tạm thời sd vậy, cái cần là tìm giải pháp thôi còn khi hoàn thiện thì có thể dùng Filter để lọc bớt dữ liệu sau đó dùng For như Topic "Tạo hiệu ứng cho Form" của AnhTuan có đề cập đó thì chắc ăn hơn.
 
có cách nào dùng lệnh Find mà láy được 2 giá trị không anh
Ý bạn là sao nhỉ? Hay bạn muốn lấy tất cả những giá trị trùng?
Tôi nghĩ là được, với điều kiện bạn cho một ít dử liệu lên đây!
Hiện mình đang loay hoay lấy Path & Name của hình trên Comment gốc. Nếu gỡ được thì yêu cầu của Topic sử lý bằng hàm OK
Việc chèn 1 hình vào Comment gần giống như chèn hình vào Label trong UserForm... Tức sau khi anh chèn hình xong thì hoàn toàn có thể xóa file hình gốc... Hình trong Comment hay Label vẫn tồn tại, tức nó đã được "nhúng" thẳng vào Object chứ không phải dạng Link... Vì thế anh không có cách nào lấy được đường dẩn của hình đâu...mà thực chất cũng không hề tồn tại đường dẩn này, chèn xong là cắt đứt quan hệ luôn... Thế mới có chuyện chèn càng nhiều hình vào các Comment thì dung lượng file càng tăng lên (nếu dạng link thì đâu có hiện tượng này)
 
Lần chỉnh sửa cuối:
Cám ơn Anh Tuan nhé, mình tìm mãi không ra cái đường dẫn đến nguồn của nó thì ra vậy.
 

File đính kèm

Cái này thì tranh với hắn được

dạ ý em là lấy tất cả dữ liệu trùng bằng lệnh Find

PHP:
 Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim eRw As Long, MyAdd As String:        Dim Rng As Range, sRng As Range
 eRw = [A65500].End(xlUp).Row
 If Not Intersect(Target, Range("E2:e" & eRw)) Is Nothing Then
   Set Rng = Range("A1:A" & eRw)
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If sRng Is Nothing Then
      Target.Offset(, 1).Value = "Chua Co Nguoi Nay"
   Else
      MyAdd = sRng.Address:               Target.Offset(, 1).Value = "GPE"
      Do
         With Target.Offset(, 1)
            .Value = .Value & " & " & sRng.Offset(, 1).Value
         End With
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And MyAdd <> sRng.Address
      Target.Offset(, 1).Value = Mid(Target.Offset(, 1).Value, 6)
   End If
 End If
End Sub
 
PHP:
 Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim eRw As Long, MyAdd As String:        Dim Rng As Range, sRng As Range
 eRw = [A65500].End(xlUp).Row
 If Not Intersect(Target, Range("E2:e" & eRw)) Is Nothing Then
   Set Rng = Range("A1:A" & eRw)
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If sRng Is Nothing Then
      Target.Offset(, 1).Value = "Chua Co Nguoi Nay"
   Else
      MyAdd = sRng.Address:               Target.Offset(, 1).Value = "GPE"
      Do
         With Target.Offset(, 1)
            .Value = .Value & " & " & sRng.Offset(, 1).Value
         End With
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And MyAdd <> sRng.Address
      Target.Offset(, 1).Value = Mid(Target.Offset(, 1).Value, 6)
   End If
 End If
End Sub
Sư phụ ơi! Dùng Find nó cứ bị trường hợp tìm không theo tuần tự từ trên xuống dưới... Nó cứ tìm Item số 2 trước rồi mới tiếp...
Vậy nếu em muốn sửa lại để code luôn tìm theo đúng thứ tự từ trên xuống thì làm thế nào
Mà e rằng nếu sửa lại chắc cũng khá rắc rối... Em thà dùng AutoFilter còn hay hơn!
Hic...
 
Sư phụ ơi! Dùng Find nó cứ bị trường hợp tìm không theo tuần tự từ trên xuống dưới... Nó cứ tìm Item số 2 trước rồi mới tiếp...
Vậy nếu em muốn sửa lại để code luôn tìm theo đúng thứ tự từ trên xuống thì làm thế nào
Mà e rằng nếu sửa lại chắc cũng khá rắc rối... Em thà dùng AutoFilter còn hay hơn!
Hic...

Người đặt hàng là 'Thượng đế' mà! 'Thượng đế' bảo mình phương thức FIND(), thì mình cứ FIND() mần tới thôi!

Còn cách khắc phục ư, tất nhiên còn thô, nhưng cũng có những cách sau:

(*) Thêm 1 vài dòng lệnh điều kiện, như
Nếu VungTim.Cells(1,1).Value<> TriTim thì đi tìm. . .
(*) . . . (Sẽ ngâm cứu tiếp thêm, Ví dụ FindPrevious. . . ) . . . .:-=

Bổ sung ngay đây:

Ta lừa 'Nó' bằng câu lệnh này:

Mã:
Set Rng = Union([B1], Range("A1:A" & eRw))

Một khi biết chắc rằng [B1] không chứa trị đang tìm! hì, hì, , , ,

(Thấy chưa: Nhớ môn lịch sử về Lê Lai cứu chúa cũng lợi lắm nhễ!)
 
Chỉnh sửa lần cuối bởi điều hành viên:
PHP:
 Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim eRw As Long, MyAdd As String:        Dim Rng As Range, sRng As Range
 eRw = [A65500].End(xlUp).Row
 If Not Intersect(Target, Range("E2:e" & eRw)) Is Nothing Then
   Set Rng = Range("A1:A" & eRw)
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If sRng Is Nothing Then
      Target.Offset(, 1).Value = "Chua Co Nguoi Nay"
   Else
      MyAdd = sRng.Address:               Target.Offset(, 1).Value = "GPE"
      Do
         With Target.Offset(, 1)
            .Value = .Value & " & " & sRng.Offset(, 1).Value
         End With
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And MyAdd <> sRng.Address
      Target.Offset(, 1).Value = Mid(Target.Offset(, 1).Value, 6)
   End If
 End If
End Sub
Dạ ý em là làm function chứ không phải Sub
 
Muốn hàm thì có hàm, mà hai luôn. Mỗi cái xài 1 nơi!

Dạ ý em là làm function chứ không phải Sub

Đây là hàm của bạn:
PHP:
Option Explicit
Function LietKe(VungTra As Range, LookUpValue As Range) As String
 Dim Clls As Range
 For Each Clls In VungTra.Cells(1, 1).Resize(VungTra.Rows.Count)
   If Clls.Value = LookUpValue Then _
      LietKe = LietKe & " & " & Clls.Offset(, 1).Value
 Next Clls
 If Len(LietKe) > 3 Then
   LietKe = Mid(LietKe, 4)
 Else
   LietKe = "Chua Co Nguoi Nay Trong Danh Sach!"
 End If
End Function

Còn hàm này cho kết quả tốt chỉ trong cửa sổ Immediate
Mã:
Function TimKiem(VungTra As Range, LookUpValue As Range) As String
 Dim Clls As Range, Rng As Range:            Dim MyAdd As String
 
 Set Rng = VungTra.Cells(1, 1).Resize(VungTra.Rows.Count)
 Set Clls = Rng.Find(LookUpValue.Value, , xlFormulas, xlWhole)
 If Clls Is Nothing Then
   TimKiem = "Khong Co Ket Qua"
 Else
   MyAdd = Clls.Address
   Do
      TimKiem = TimKiem & " & " & Clls.Offset(, 1).Value
      Set Clls = Rng.FindNext(Clls)
   Loop While Not Clls Is Nothing And MyAdd <> Clls.Address
 
   If Len(TimKiem) > 3 Then
      TimKiem = Mid(TimKiem, 4)
   Else
      TimKiem = "Chua Co Nguoi Nay Trong Danh Sach!"
 End If:             End If
End Function
 
dạ ý em là lấy tất cả dữ liệu trùng bằng lệnh Find

Ví dụ đính kèm
Đây là hàm dành cho bạn với yêu cầu dùng Find method
Bảo đảm nhanh và chính xác (tìm đúng thứ tự từ trên xuống)
PHP:
Function JoinIf(LValue, LRange As Range, Col As Long, Optional Sep As String = " ")
  Dim Temp As String, FRng As Range, CountLValue As Long
  With LRange.Resize(, 1)
    CountLValue = WorksheetFunction.CountIf(.Cells, LValue)
    If CountLValue Then
      Set FRng = .Cells(WorksheetFunction.Match(LValue, .Cells, 0))
      Do
        Temp = Temp & Sep & FRng(, Col)
        CountLValue = CountLValue - 1
        Set FRng = .Find(LValue, FRng, xlValues, xlWhole)
      Loop Until CountLValue = 0
    End If
  End With
  JoinIf = Mid(Temp, Len(Sep) + 1, Len(Temp))
End Function
Cú pháp gần giống với VLOOKUP
PHP:
= JoinIf(Trị dò, bảng dò, cột dò, dấu phân cách)
Ở đây nếu bạn bỏ qua tham số dấu phân cách thì mặc định của nó là 1 khoảng trắng
-------------------
Còn hàm này cho kết quả tốt chỉ trong cửa sổ Immediate
Mã:
Function TimKiem(VungTra As Range, LookUpValue As Range) As String
 Dim Clls As Range, Rng As Range:            Dim MyAdd As String
 
 Set Rng = VungTra.Cells(1, 1).Resize(VungTra.Rows.Count)
 Set Clls = Rng.Find(LookUpValue.Value, , xlFormulas, xlWhole)
 If Clls Is Nothing Then
   TimKiem = "Khong Co Ket Qua"
 Else
   MyAdd = Clls.Address
   Do
      TimKiem = TimKiem & " & " & Clls.Offset(, 1).Value
      Set Clls = [B][U]Rng.FindNext(Clls)[/U][/B]
   Loop While Not Clls Is Nothing And MyAdd <> Clls.Address
 
   If Len(TimKiem) > 3 Then
      TimKiem = Mid(TimKiem, 4)
   Else
      TimKiem = "Chua Co Nguoi Nay Trong Danh Sach!"
 End If:             End If
End Function
FindNext không làm việc được với UDF đâu sư phụ à!
 

File đính kèm

Lần chỉnh sửa cuối:
Nhờ các bác giải thích thêm hàm về VLOOKUP? (viết bài giúp bạn)

Xin hỏi Bác, do em mới vào GPE nhưng không cách nào viết được bài trên forum. Nhờ bác viết hộ hoặc nếu được xin giải thích dùm trường hợp VLOOKUP này
|A
|B
|C
|D
|E
|
1|1
|3
|5
|7
|9
|
2|
2|
4|
6|
8|
10|
|
3|
A1|
4|
5|Công thức
6|=VLOOKUP(3; $a$1:$E$3; 3)
6|
7|=VLOOKUP(1,$A$1:$E$3,3)
5|
Không hiểu
=VLOOKUP(3,$A$1:$E$3,3) lại sao cho kết quả là 6
=VLOOKUP(1,$A$1:$E$3,3) lại sao kết quả là 5

Có thể giải thích hộ công thức này ý nghĩa nó ra sao không ?
Em xin cám ơn (các) bác

(Xin lỗi Miss Như Quỳnh do sự chậm trễ này;
Nhờ các bạn giúp cho bạn ấy!)
 
Dữ liệu hình như có vấn đề bác SA ơi, Bác copy table không ổn rổi.

Hàm Vlookup được sử dụng với đối số thứ 4 không có. Nghĩa là mặc định = true.
Với đối số thứ 4 là true thì dữ liệu phải được sắp xếp theo thứ tự từ nhỏ đến lớn và khi giá trị dò tìm không tìm thấy trong bảng hàm Vlookup sẽ cho ra một giá trị gần đó.
 
Bạn post file ví dụ đi, tôi nhìn thấy chưa hiểu rõ , hàm vlookup có thể dùng 3 đối số cũng được. Có thể đối số thứ 2 và thứ 3 không đồng chất cũng xẩy ra trwờng hợp hợp như trên, gần giống với việc dữ liệu chữ cái xếp không theo thứ tự a,b,c.
 
Xử lý hàm Vlookup
Bạn thêm số không vào cuối cùng
Cú pháp Vlookup(Số dò tìm, Mãng dò tìm, Cột cần lấy Sliệu,0)
Chúc bạn OK
 
|
A​
|
B​
|
C​
|
D​
|
E​
|
1​
|
1​
|
3​
|
5​
|
7​
|
9​
|
2​
|
2​
|
4​
|
6​
|
8​
|
10​
|
3​
|
A1​
|
A2​
|
A3​
|
A4​
|
A5​
|
4​
| | | | | |
5​
|Công thức| | | |Kết quả|
6​
|=VLOOKUP(3,$A$1:$E$3,3)| | | |
6​
|
7​
|=VLOOKUP(3,$A$1:$E$3,3)| | | | |

Cũng là câu hỏi của Miss Nhu Quynh đã gởi cho mình đây. Khổ nỗi dốt Excel nên không biết trả lời cho bạn ấy như thế nào.
Câu hỏi :
Không hiểu
=VLOOKUP(3,$A$1:$E$3,3) lại sao cho kết quả là 6
=VLOOKUP(1,$A$1:$E$3,3) lại sao kết quả là 5

Có thể giải thích hộ công thức này ý nghĩa nó ra sao không ?
Em xin cám ơn (các) bác
 
Cũng là câu hỏi của Miss Nhu Quynh đã gởi cho mình đây. Khổ nỗi dốt Excel nên không biết trả lời cho bạn ấy như thế nào.
Câu hỏi :
Không hiểu
=VLOOKUP(3,$A$1:$E$3,3) lại sao cho kết quả là 6
=VLOOKUP(1,$A$1:$E$3,3) lại sao kết quả là 5

Có thể giải thích hộ công thức này ý nghĩa nó ra sao không ?
Em xin cám ơn (các) bác
-----
Chắc Bác Kế Toán Già Gân chọc quê các bạn. Kỳ ghê!
Trong dòng 1 của ví dụ trên, hàm Vlookup nếu bỏ qua tham số thứ 4 hoặc nó là true (1), sẽ trả về giá trị trong cột C (cột thứ 3 từ cột A), tương ứng với giá trị tìm thấy lớn nhất nhưng nhỏ hơn "3" trong cột A là "2", sẽ cho kết quả là 6 (khi cột A được sort từ nhỏ đến lớn); nếu tham số thứ 4 là false(0), nó sẽ trả về giá trị #N/A vì không tìm thấy "3" trong cột A (dù cột A có sort hay không). Dòng 2 cũng tương tự.
Một ít hiểu biết về hàm Vlookup, mong được chỉ giáo thêm.
 
Lần chỉnh sửa cuối:
-----
Chắc Bác Kế Toán Già Gân chọc quê các bạn. Kỳ ghê!
....

Bác Ba Tê nói quá lời, không ngại mọi người buồn sao chời. Ai dám chọc quê ai ?

Bác không tin, thử load tài liều ebook : công thức và hàm excel và tìm đọc thử bài hàm

Trong tài liệu này có đoạn đề cập y như thế đó bác à.

2.5. Hàm tham chiếu và tìm kiếm (Lookup functions)
Tác giả: Bùi Nguyễn Triệu Tường (BNTT - GPE)
Tổng hợp: hoangdanh282vn (GPE)

Hàm VLOOKUP

Chức năng: Hàm VLOOKUP là hàm dò tìm theo cột, sẽ trả về giá trị của một ô nằm trên một cột nào đó nếu thỏa mãn điều kiện dò tìm.

Cú pháp hàm: VLOOKUP(lookup_value,table_array,col_index_num,option_lookup)

- Lookup_value: là giá trị dùng để dò tìm, giá trị này sẽ được dò tìm trong cột đầu tiên của bảng dữ liệu dò tìm. Giá trị dò tìm có thể là một số, một chuỗi, một công thức trả về giá trị hay một tham chiếu đến một ô nào đó dùng làm giá trị dò tìm.

- Table_array: là bảng dùng để dò tìm, bảng dò tìm có thể là tham chiếu đến một vùng nào đó hay Name trả về vùng dò tìm. Bảng dò tìm gồm có Rj hàng và Ci cột (I,j >=1), trong đó cột thứ nhất của bảng dò tìm sẽ được dùng để dò tìm.

- Col_index_num: là số thứ tự của cột (tính từ trái qua phải) trong bảng dò tìm chứa giá trị mà ta muốn trả về. Col_index_num phải >=1 và <= số cột lớn nhất có trong bảng dò tìm, ngược lại hàm sẽ trả về #VALUE! hoặc #REF.

- Option_lookup: là tùy chọn xác định kiểu dò tìm, có 2 kiểu dò tìm:

True hoặc 1 hoặc để trống: là kiểu dò tìm tương đối, hàm sẽ lấy giá trị đầu tiên mà nó tìm được trên cột đầu tiên trong bảng dò tìm. Trong trường hợp tìm không thấy, nó sẽ lấy giá trị lớn nhất mà có giá trị nhỏ hơn giá trị dò tìm.

False hoặc 0: là kiểu dò tìm chính xác, hàm sẽ lấy giá trị đầu tiên mà nó tìm được trên cột đầu tiên trong bảng dò tìm. Trong trường hợp tìm không thấy, hàm sẽ trả về #N/A.
 
Bác Ba Tê nói quá lời, không ngại mọi người buồn sao chời. Ai dám chọc quê ai ?

Bác không tin, thử load tài liều ebook : công thức và hàm excel và tìm đọc thử bài hàm

Trong tài liệu này có đoạn đề cập y như thế đó bác à.
-------
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
Lookup_value The value to search in the first column of the table array (array: Used to build single formulas that produce multiple results or that operate on a group of arguments that are arranged in rows and columns. An array range shares a common formula; an array constant is a group of constants used as an argument.). Lookup_value can be a value or a reference. If lookup_value is smaller than the smallest value in the first column of table_array, VLOOKUP returns the #N/A error value.

Table_array Two or more columns of data. Use a reference to a range or a range name. The values in the first column of table_array are the values searched by lookup_value. These values can be text, numbers, or logical values. Uppercase and lowercase text are equivalent. Col_index_num The column number in table_array from which the matching value must be returned. A col_index_num of 1 returns the value in the first column in table_array; a col_index_num of 2 returns the value in the second column in table_array, and so on. If col_index_num is:
  • Less than 1, VLOOKUP returns the #VALUE! error value.
  • Greater than the number of columns in table_array, VLOOKUP returns the #REF! error value.
Range_lookup A logical value that specifies whether you want VLOOKUP to find an exact match or an approximate match:
  • If TRUE or omitted, an exact or approximate match is returned. If an exact match is not found, the next largest value that is less than lookup_value is returned. The values in the first column of table_array must be placed in ascending sort order; otherwise, VLOOKUP may not give the correct value. You can put the values in ascending order by choosing the Sort command from the Data menu and selecting Ascending. For more information, see Default sort orders.
  • If FALSE, VLOOKUP will only find an exact match. In this case, the values in the first column of table_array do not need to be sorted. If there are two or more values in the first column of table_array that match the lookup_value, the first value found is used. If an exact match is not found, the error value #N/A is returned.
-------------
Xin lỗi vì câu "Chắc Bác Kế Toán Già Gân chọc quê các bạn. Kỳ ghê!"
Thật sự tôi chỉ nghĩ rằng Bác KTGG đưa bài dùm "Miss Nhu Quynh" lên diễn đàn mà sẵn đó không giải thích luôn.
Tôi xin lỗi vì đã sử dụng câu chữ làm phật lòng người.
Rất hối lỗi. :wallbash:
 
Cám ơn huynh Ba Tê nhiều nhe. Phần hướng dẫn của huynh lại điếc thêm. Đã mù tin học lại mù ngọai ngữ nữa.

Huynh BNTT và Hoàng Danh đã dịch ra rồi mà đọc hoài cũng chả hiểu.

=VLOOKUP(3,$A$1:$E$3,3) lại sao cho kết quả là 6 -
=VLOOKUP(1,$A$1:$E$3,3) lại sao kết quả là 5

Xin được chú giải ý nghĩa công thức trên
 
|
A​
|
B​
|
C​
|
D​
|
E​
|
1​
|
1​
|
3​
|
5​
|
7​
|
9​
|
2​
|
2​
|
4​
|
6​
|
8​
|
10​
|
3​
|
A1​
|
A2​
|
A3​
|
A4​
|
A5​
|
4​
| | | | | |
5​
|Công thức| | | |Kết quả|
6​
|=VLOOKUP(3,$A$1:$E$3,3)| | | |
6​
|
7​
|=VLOOKUP(3,$A$1:$E$3,3)| | | | |

Cũng là câu hỏi của Miss Nhu Quynh đã gởi cho mình đây. Khổ nỗi dốt Excel nên không biết trả lời cho bạn ấy như thế nào.
Câu hỏi :
Không hiểu
=VLOOKUP(3,$A$1:$E$3,3) lại sao cho kết quả là 6
=VLOOKUP(1,$A$1:$E$3,3) lại sao kết quả là 5

Có thể giải thích hộ công thức này ý nghĩa nó ra sao không ?
Em xin cám ơn (các) bác

He he
Bạn thử cho đối số thứ 4 vào mà xem biết ngay
=VLOOKUP(3,$A$1:$E$3,3,0) --> vì 3 không có trong bảng dữ liệu --> KQ trả về #N/A

còn công thức trên không có đối số thứ 4 nên mặc định là 1; khi đó 3 không có trong bảng dữ liệu nó sẽ tìm giá trị liền kề với nó ( = 2) do vậy kết quả = 6

Bạn thử thay giá trị A1 = 2.2 xem --> xem kết quả biết liền
 
Lần chỉnh sửa cuối:
Cám ơn huynh Ba Tê nhiều nhe. Phần hướng dẫn của huynh lại điếc thêm. Đã mù tin học lại mù ngọai ngữ nữa.

Huynh BNTT và Hoàng Danh đã dịch ra rồi mà đọc hoài cũng chả hiểu.

=VLOOKUP(3,$A$1:$E$3,3) lại sao cho kết quả là 6 -
=VLOOKUP(1,$A$1:$E$3,3) lại sao kết quả là 5

Xin được chú giải ý nghĩa công thức trên
------------
Xin giải thích trong tập tim kèm theo.
Thân mến.
 
Bác Ba Tê thân yêu của già gân,
Cụ thể vấn đề của tác giả đặt ra thì bác không giải thích - bác cứ lòng vòng miết, em chóng mặt với bác rồi đấy.
 
Bác Ba Tê thân yêu của già gân,
Cụ thể vấn đề của tác giả đặt ra thì bác không giải thích - bác cứ lòng vòng miết, em chóng mặt với bác rồi đấy.

Xin lỗi vì đã làm Bác KTGG chóng mặt, có lẽ tôi không biết diễn đạt rõ ý của mình cho người khác hiểu, hoặc do hiểu sai nội dung nên giải thích lòng vòng.
Nhưng đã lỡ tham gia thì phải theo đến cùng, xin giải thích bằng tập tin kèm theo.
Thân mến.
 
xin cho mình hỏi:
mình dùng vlookup dò tìm trong bảng fụ có cột hệ số 0.70, 0.60,..., nhưng bảng chính chỉ trả về số 0??? ai bít chỉ mình với
cột (4)
làm dc rồi!!!! dù sao cũng thanks
 
Lần chỉnh sửa cuối:
VLOOKup, làm ơn chỉ cho tôi vài chiêu

Tôi đang muốn làm một thẻ bể để kiểm soát lượng hàng trong bể, nhưng tôi lại mù tịt về vlookup nên mong các cao thủ chỉ giúp
Tôi có file là thebe trong đó có 2 Sheet tên là bazem và T7, Sheet 'bazem' tôi sử dụng để tham chiếu. Tôi muón khi tôi oánh số vào cột ' chiều cao ' bên Sheet 'T7' thì sẽ tự động nhẩy số liệu từ Sheet ' bzem' sang, liệu như vậy có được không...
Giúp tôi với, tôi đang cần gấp
 

File đính kèm

Tôi có 2 Sheet tên là bazem và T7, Sheet 'bazem' tôi sử dụng để tham chiếu. Tôi muón khi tôi oánh số vào cột ' chiều cao ' bên Sheet 'T7' thì sẽ tự động nhẩy số liệu từ Sheet ' bzem' sang, liệu như vậy có được không...
Giúp tôi với, tôi đang cần gấp

Bạn thực hiện quy trình này nha:

(*)Đặt tên vùng tra:
Dùng chuột tô chọn vùng từ A1:B275 của trang tính 'BaRem' (dư 1 tý cho vui!)
Đưa trỏ chuột vô ngăn trái nhứt của thanh công thức & nhập vô đó chuỗi 'BangTra'
(Chúng ta gán vùng này cái tên là: BangTra )

(*) Xác lập công thức:
Bạn nhấn chuột vô ô 'E4' của trang tính thứ hai & nhập cú pháp sau đây lên thanh công thức: =VLOOKUP(D4,BangTra,2,0)
Sau khi {ENTER} sẽ có kết quả mỹ mãn(?)

Chúc cuối tuần vui vẽ!
 
Bạn thực hiện quy trình này nha:

(*)Đặt tên vùng tra:
Dùng chuột tô chọn vùng từ A1:B275 của trang tính 'BaRem' (dư 1 tý cho vui!)
Đưa trỏ chuột vô ngăn trái nhứt của thanh công thức & nhập vô đó chuỗi 'BangTra'
(Chúng ta gán vùng này cái tên là: BangTra )

(*) Xác lập công thức:
Bạn nhấn chuột vô ô 'E4' của trang tính thứ hai & nhập cú pháp sau đây lên thanh công thức: =VLOOKUP(D4,BangTra,2,0)
Sau khi {ENTER} sẽ có kết quả mỹ mãn(?)

Chúc cuối tuần vui vẽ!

Hay quá, cảm ơn nhiều nhiều nha//**/
 
Lưu ý iới bạn, Hàm Vlookup là hàm dò tìm , Nó sẽ dò và lấy từ trên xuống, cho nên ở sheet Bazem cột Chiều cao mm không được trùng mã, VD : nếu có 2 dòng là 10 thì nó sẽ cho giá trị ở dòng đầu tiên,
 
Lần chỉnh sửa cuối:
hỏi về hướng dò tìm của hàm vlookup

Bình thường khi sử dụng hàm vlookup thì ta thường dò tìm từ trái sang phải(theo như em hiểu). Giờ em muốn dò tìm giá trị từ phải sang trái thì phải làm như thế nào. Em làm hoài mà không ra.
 

File đính kèm

Mình nghỉ chắc chắn là không
 
Mình muốn dùng vlookup thì có được không?
Được chứ, dễ lắm. Bạn copy cái cột đang nằm sát rìa bên phải đó, dán nó vào rìa bên trái, và sau đó cứ dùng VLOOKUP bình thường. Tôi vẫn hay làm kiểu này, nhanh gọn lẹ, khỏi suy nghĩ...

Chứ còn nếu hỏi tại sao VLOOKUP không thể dò từ phải sang trái, giống y như hỏi tại sao xe 2 bánh không có số de như xe 4 bánh...
 
Vậy tiện thể mình xin hỏi các bạn làm thế nào để dò từ dưới lên trên thay vì từ trên xuông dưới nhỉ?
Tks
 
Vậy tiện thể mình xin hỏi các bạn làm thế nào để dò từ dưới lên trên thay vì từ trên xuông dưới nhỉ?
Tks
Bạn muốn dò như thế nào thì đưa dữ liệu cụ thể lên. Sẽ có hướng giải quyết. Mỗi bài toán có một cách giải quyết khác nhau, tùy thuộc vào yêu cầu và cấu trúc cơ sở dữ liệu.
Hơn nữa, bạn hỏi chung chung tôi nói chung chung bạn sẽ khó hiểu hơn là đưa vào một trường hợp cụ thể.
 
Khi dùng hàm index thì dò phải qua trái hay dưới lên trên đều không là vấn đề, vì vùng dữ liệu bạn chọn đã được mặc định. Do đó nó sẽ tìm theo địa chỉ trong vùng này chứ không theo vị trí cells mà bạn quan tâm. (Đây giống như tọa độ tuyệt đối và tọa độ tương đối ấy mà).
 
Mình muốn dùng vlookup thì có được không?

Theo mình thì không cần phải chung thuỷ với Vlookup như vậy đâu bạn à. Vì công thức INDEX($A$2:$A$65536;MATCH(F4;$B$2:$B$65536;0)) nhìn thì hơi dài nhưng thực chất cũng đơn giản thôi mà.
Tạm hiểu thế này nhé: hàm MATCH(F4;$B$2:$B$65536;0) thì y hệt hàm Vlookup còn hàm INDEX($A$2:$A$65536;MATCH(...)) dùng để chỉ định cột bạn lấy kết quả (ý nghĩa của nó tương tự như "chỉ hướng dò tìm cho hàm Vlookup". Bạn muốn lấy kết quả ở cột nào thì chỉ việc thay tên cột trong hàm INDEX là OK.
 
Lần chỉnh sửa cuối:
Có 1 bảng số liệu :

Đen Đỏ Xanh

Ghế 100 100 50

Bàn 200 150 70

Tủ 250 80 300


Làm cách nào có thể dò tìm được kết quả từ bảng trên, ví dụ như Ghế+Đỏ sẽ cho kết quả là 100, xem kỹ trên file. Rất mong các anh chị chỉ giúp em.

Thanks
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn muốn dò như thế nào thì đưa dữ liệu cụ thể lên. Sẽ có hướng giải quyết. Mỗi bài toán có một cách giải quyết khác nhau, tùy thuộc vào yêu cầu và cấu trúc cơ sở dữ liệu.
Hơn nữa, bạn hỏi chung chung tôi nói chung chung bạn sẽ khó hiểu hơn là đưa vào một trường hợp cụ thể.

Tks bạn. Mình muốn hỏi khi chẳng hạn trong trường hợp cơ sở dữ liệu có khóa trùng nhau (1 bảng tên người và ngày sinh có 2 ông tên là Hà nhưng khác ngày sinh chẳng hạn). Làm thế nào để tìm theo hướng từ dưới lên ấy. Vì thường là mặc định lấy kết quả ở trên.
 
Có 1 bảng số liệu :

Đen Đỏ Xanh

Ghế 100 100 50

Bàn 200 150 70

Tủ 250 80 300


Làm cách nào có thể dò tìm được kết quả từ bảng trên, ví dụ như Ghế+Đỏ sẽ cho kết quả là 100, xem kỹ trên file. Rất mong các anh chị chỉ giúp em.

Thanks
Giả sử mình gõ cái chữ: "Ghế + Đỏ" vào trong ô A12, bên ô B12 xài cái này nè:
PHP:
=INDEX($B$4:$D$6, MATCH(LEFT(A12, FIND("+",A12)-2),$A$4:$A$6,0), MATCH(RIGHT(A12, LEN(A12)-FIND("+",A12)-1),$B$3:$D$3))
Là ra con số 100 liền.

Bạn thử gõ thêm vài thứ nữa vào A13, A14 (Vd: "Bàn + Xanh", "Tủ + Đen", "Ghế + Xanh",...) rồi copy công thức ở B12 xuống thử xem có đúng không nghe. Nhưng công thức của mình chỉ đúng khi bạn gõ những cái chữ đó đúng chính tả với cái chữ ở trong dữ liệu bên trên, có một khoảng trắng trước dấu + và có một khoảng trắng sau dấu + (một thôi, hai khoảng trắng hay không có khoảng trắng thì cũng sai).
 
Bạn có thể tham khảo hàm người dùng sau đây

Mình muốn hỏi khi trường hợp CSDL có khóa trùng nhau (1 bảng tên người và ngày sinh có 2 ông tên là Hà nhưng khác ngày sinh chẳng hạn). Làm thế nào để tìm theo hướng từ dưới lên ấy. Vì thường là mặc định lấy kết quả ở trên.

PHP:
Option Explicit
Function lVLOOKUP(LookupValue, LookUpRange As Range, Col As Byte, _
       Optional Duoilen As Boolean = True)
 Dim jJ As Long, Rws As Long
   
 Rws = LookUpRange.Rows.Count
 For jJ = Rws To 1 Step -1
   If Cells(jJ, 1).Value = LookupValue And Duoilen Then
      lVLOOKUP = Cells(jJ, 1).Offset(, Col).Value
      Exit Function
   End If
 Next jJ
End Function

Để rõ thêm, bạn có thể xem qua bảng sau:

|A|B|C|D|E
| Ma | Ten | Ngay ||
|A01|An|12||
|A02|Anh|15||
|A21|Hồng|17| 21 |<=Cú pháp hàm tại [D4]: =lVLOOKUP(A3,A1:B6,2)
|A02|Anh|21||
|A35|Thơm|31| Anh |<=Cú pháp hàm tại [D6]: =lVLOOKUP(A3,A1:B6,1)
|.||||
|--=0|:-=|.|.|)(&&@@
 
Lần chỉnh sửa cuối:
Trong bảng thống kê, bạn dùng công thức sau rồi fill xuống dưới.
Mã:
[B][COLOR=blue]=SUMIF($B$3:$B$14,D18&"*",$E$3:$E$14)[/COLOR][/B]
[/QUOTE]
 
Lần chỉnh sửa cuối:
Hỏi về hàm Vlookup ..

Tình hình là mình có 1 file vật tư gồm tên, giá, .... mà hằng ngày mình phải cập nhật vô file đó, thông tin mới luôn luôn nằm dòng dưới. Khi mình dùng hàm tìm kiếm để lấy thông tin từ file này thì nó chỉ dò từ dòng đầu đến cuối, do đó dữ liệu lấy ra thường là dữ liệu cũ rồi, ko còn đúng và chính xác nữa. Do đó, cho mình hỏi là có cách nào cho hàm đó dò từ dưới lên ko? Chứ dùng cách sort lại thì tùm lum hết

Thanks all
 
Theo tôi đoán thì nguyên nhân là do khi bạn đặt công thức tìm kiếm thì vùng dữ liệu của bạn là vùng chưa có những tên vật tư và giá cũ nên khi bạn tìm kiếm thì chỉ cho kết quả là những vật tư cũ. Bạn thử tìm hiểu thêm bài về mảng động của bác anhtuan1066 xem http://www.giaiphapexcel.com/forum/search.php?searchid=2085741&pp=25 -+*/
 
Lần chỉnh sửa cuối:
Theo tôi đoán thì nguyên nhân là do khi bạn đặt công thức tìm kiếm thì vùng dữ liệu của bạn là vùng chưa có những tên vật tư và giá cũ nên khi bạn tìm kiếm thì chỉ cho kết quả là những vật tư cũ. Bạn thử tìm hiểu thêm bài về mảng động của bác anhtuan1066 xem http://www.giaiphapexcel.com/forum/search.php?searchid=2085741&pp=25 -+*/
Bạn ko hiểu ý mình rồi. Mình đặt công thức đến 15000 dòng lận mà file mình chỉ có chừng 8000 dòng là cùng, ý mình giả sử là "co nhựa 34" giá ngày 1/1 là 15K nhưng ngày 15/7 nó tăng lên 20K chẳng hạn. Hàm Vlookup khi dò thì nó chọn ra là 15K chứ ko chọn ra 20K, do 15K nằm ở dòng 225 chẳng hạn còn 20K thì nằm ở 2000 nên nó ko tìm ra. Số liệu vì thế ko chính xác. Ý mình là có cách nào cho nó dò từ dưới lên ko? vậy thôi. Dù sao cũng thanks bạn đã trả lời. À!!! đường links bạn cho sai rồi, vô ko dc
 
Re:

M hiểu ý bạn!Bạn muốn tìm dữ liệu cập nhật mới!!!!Bạn nên dùng Macro cho đơn giản.
Nếu bạn muốn sử dụng hàm thì bạn vào trong hòm thư trong diễn đàn của bạn. M gửi cho file mẫu m lập thử. Bạn nhập dữ liệu đến đâu thì cũng có thể tìm được giá trị cập nhật đến đó.
Bonne chance!





----------------------------------------------------------------------------------------------------------
Học làm chi cho đầu to, mắt trố???
http://www.youtube.com/watch?v=VfSYeXPQaQI&feature=related
Alizée, chanteuse connue à l'étranger!!!!
 
Lần chỉnh sửa cuối:
Bạn đến đây tham khảo

Mình đặt công thức đến 15000 dòng lận mà file mình chỉ có chừng 8000 dòng là cùng, ý mình giả sử là "co nhựa 34" giá ngày 1/1 là 15K nhưng ngày 15/7 nó tăng lên 20K chẳng hạn. Hàm Vlookup khi dò thì nó chọn ra là 15K chứ ko chọn ra 20K, do 15K nằm ở dòng 22 chẳng hạn còn 20K thì nằm ở 200 nên nó ko tìm ra. Số liệu vì thế ko chính xác. Ý mình là có cách nào cho nó dò từ dưới lên ko?

http://www.giaiphapexcel.com/forum/showthread.php?p=174716#11

Nếu chưa làm được mình sẽ giúp cụ thể hơn.

(Gợi ý cho rõ hơn: tương lai hàm lVLOOKUP() của bạn không cần đến tham số Col)
 
Lần chỉnh sửa cuối:
Nếu bạn muốn lấy giá cao nhất thì mình lồng thêm hàm Max. Nếu bạn muốn lấy giá cho từng thời gian nhập, thì bạn sang sheet khác để làm và vùng dữ liệu là sheet mà bạn cập nhật.
 
Vậy có cách ko cần dùng hàm. Khi thêm thông tin về giá thay đổi gì đó thì ta thay đổi từ dưới lên. Các thông tin mới bao giờ cũng ở bên trên.
 
Mình ko rành về VB, bạn có thể hướng cách nào dể dc ko? Mình chỉ cần yêu cầu hàm Vlookup đó, dò từ dưới lên thôi. Vậy thôi. Dù sao cùng thanks bạn
Cái này công thức có thể làm được.. Tuy nhiên bạn nên đưa file lên cho đở lòng vòng
(file lớn quá hãy cắt bỏ bớt dử liệu, chừa lại chừng vài chục dòng là được rồi)
 
Thắc Mắc về Hàm Vlookup

tại sao công thức hàm vlookup đúng với các kí tự bằng chữ được trích trong chuỗi mà ko chấp nhận các kí tự số trong chuỗi tìm kiếm, các pro chỉ em cách sửa luôn nhá
thanks
 

File đính kèm

thắc mắc hàm vlookup

các bạn xem file của mình rồi chỉ cách sửa sai trong hàm vlookup nhé.
 

File đính kèm

tại sao công thức hàm vlookup đúng với các kí tự bằng chữ được trích trong chuỗi mà ko chấp nhận các kí tự số trong chuỗi tìm kiếm, các pro chỉ em cách sửa luôn nhá
thanks
Đơn giản bạn chỉ cần định dạng lại mã hàng (số 33) thành kiểu tex là ok !
bạn thử xem nhá
LQH
 
Khi ban dùng hàm vlookup thi diều kien do và vùng dò phải giống nhau,neu diều kiện do là dạng text thì vùng dò cũng phải dạng text, còn diều kiện dò là số thì vùng dò cũng phải là số.
Bạn chì cần thêm : value(left(A2,2)) LÀ ra ah.
Chúc bạn thành công .
 
Hàm Vlookup trong bài của bạn sai là do số 33 trong hàm left của bạn nó hiểu là kiểu text

B6=VLOOKUP(VALUE(LEFT(A6;2));B12:C14;2;)
 
Nhưng tại B3 dùng công thức trên bị báo lỗi # value. bạn thử xem sao?
B3=VLOOKUP(VALUE(LEFT(A3;2));B12:C14;2;) -> # value
Thì Mình chỉ sửa lỗi công thức do bạn ấy hỏi thôi chứ áp dụng cho hết bảng thì chỉ cần sửa lại số 33 thành text '33 như bạn là được rồi. (Do Bạn ấy hỏi lỗi hàm vlookup là sai ở chổ nào kia mà)
 
Hic! Mình cũng thử value nhưng mà thế thì chỉ được những nơi nào có 33 là đúng. Nếu kéo auto find thì các cái kia lại là sai. Có cách nào mà viết câu lệnh xong mà kéo find đúng cho toàn bộ không? Các pro?
 
Hic! Mình cũng thử value nhưng mà thế thì chỉ được những nơi nào có 33 là đúng. Nếu kéo auto find thì các cái kia lại là sai. Có cách nào mà viết câu lệnh xong mà kéo find đúng cho toàn bộ không? Các pro?
Đương nhiên cách này không xài được rồi
Làm như Laohiep là nhanh nhất ---> Chuyển cell B13 thành dạng TEXT... Nếu không thế thì e rằng công thức của bạn phải dài ra thêm
 
Hic! Mình cũng thử value nhưng mà thế thì chỉ được những nơi nào có 33 là đúng. Nếu kéo auto find thì các cái kia lại là sai. Có cách nào mà viết câu lệnh xong mà kéo find đúng cho toàn bộ không? Các pro?
Không muốn thay 33 thành dạng text thì ct hơi dài đó.
Mã:
=VLOOKUP(IF(ISERROR(LEFT(A3;2)*1);LEFT(A3;2);LEFT(A3;2)*1);$B$11:$C$14;2;0)
 
Hàm VLookup tìm kiếm lâu và lưu dữ liệu cũng lâu

Mình đang gặp phải 2 vấn đề trên,các bạn có ai có cách nào để làm tăng tốc độ tìm kiếm của hàm vlookup lên và việc lưu dữ liệu cũng nhanh hơn ko?
Chỉ riêng excel mình mới bị vậy thôi,còn các chương trình khác thì chạy bình thường.
Giúp mình với nha các bạn !
Thk mọi người nhìu lắm !
 
Mình đang gặp phải 2 vấn đề trên,các bạn có ai có cách nào để làm tăng tốc độ tìm kiếm của hàm vlookup lên và việc lưu dữ liệu cũng nhanh hơn ko?
Chỉ riêng excel mình mới bị vậy thôi,còn các chương trình khác thì chạy bình thường.
Giúp mình với nha các bạn !
Thk mọi người nhìu lắm !
Như vậy bạn phải xem lại dữ liệu của bạn có lớn quá không, vùng dò tìm có giá trị cực đại không.
 
Mình đang gặp phải 2 vấn đề trên,các bạn có ai có cách nào để làm tăng tốc độ tìm kiếm của hàm vlookup lên và việc lưu dữ liệu cũng nhanh hơn ko?
Chỉ riêng excel mình mới bị vậy thôi,còn các chương trình khác thì chạy bình thường.
Giúp mình với nha các bạn !
Thk mọi người nhìu lắm !
VLOOKUP là nhanh rồi đấy bạn à! Tôi nghĩ có thể trên file của bạn còn những công thức khác nữa (như SUMPRODUCT hoặc công thức mãng) làm ảnh hưởng đến tốc độ tính toán
Tốt nhất bạn đưa file lên đây cho mọi người test thử xem
 
Cái file này của con bé bán hàng trong c.ty,mình mới copy file này về máy mình thì thằng kaspersky bắt được con virut Virus.MSExcel.Sic.e,không biết có phải vì dính con Virut này mà file và các hàm trong excel đó chạy chậm ko nhỉ? Nếu đúng thì chắc phải quét nó gấp thôi. ^_^.
 
Xin bài tập về hàm Vlookup,Hlookup và hướng dẫn sử dụng

Chào các bạn tớ kém về mảng hàm này quá, bạn nào có tài liệu hoặc bài tập cho tớ xin một ít để tớ học với. Nếu có hướng dẫn giải thì tốt quá. Xin cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Chào các bạn tớ kém về mảng hàm này quá, bạn nào có tài liệu hoặc bài tập cho tớ xin một ít để tớ học với. Nếu có hướng dẫn giải thì tốt quá. Xin cảm ơn nhiều.
Bạn vào đây để down Ebook các hàm và công thức trong excel do GPE phát hành về xem nha.
Vừa xem vừa thực hành, có gì không hiểu thì bạn nhờ hỗ trợ tiếp nha.
http://www.giaiphapexcel.com/forum/showthread.php?t=11627
 
Lần chỉnh sửa cuối:
cách dùng hàm vlookup

kiểm tra dùm em hàm vlookup nay ,sao em dùng không được
 

File đính kèm

Không được bởi vì công thức của bạn là
=VLOOKUP(B4,THOP!$A$3:$D$9,1,0)​
Mà cái ô B4 (bên Sheet CHITIET) lại chẳng có cái gì ở trong đó hết! Không có gì thì làm sao mà mang đi dò với một bảng dữ liệu?

Thêm nữa, nếu bạn dùng VLOOKUP với cái tham số thứ 3 (cột dò) là 1, thì bạn sẽ thu được kết quả chính là cái mà bạn mang đi dò (tham số thứ 1 trong hàm VLOOKUP), vậy thì có trích ra được cái gì đâu?

Bạn nói cụ thể hơn dùm, bạn muốn dò cái gì, và muốn ra cái gì?
Gõ tên hàng cho ra mã hàng, hay là gõ mã hàng cho ra tên hàng?
 
Xin cảm ơn các bạn rất nhiều
 
Sử dụng hàm vlookup

em muốn lấy dữ liệu dựa trên đơn hàng để biết số container đó là(40hc,4odc,hay 2odc)
em gưi file kèm theo.
chan thanh cám ơn!


"càng học càng thấy mình ngu,không học thì không biết mình ngu chỗ nào"


 

File đính kèm

em muốn lấy dữ liệu dựa trên đơn hàng để biết số container đó là(40hc,4odc,hay 2odc)
em gưi file kèm theo.
chan thanh cám ơn!


"càng học càng thấy mình ngu,không học thì không biết mình ngu chỗ nào"
Cái này không dùng Vlookup() được. Bạn dùng Index():
Mã:
=IF(INDEX(A6:A15,MATCH(F9,D6:D15,))<>"",A5,B5)&INDEX(C6:C15,MATCH(F9,D6:D15,))
 
cho mình hỏi về công thức vlookup kèm if

mình có 1 file excel trong đó có 4 cột là: quá hạn ít hơn 30 ngày và 1 cột là quá hạn hơn 30 ngày và 1 cột ngày quá hạn và 1 cột là số tiền.Mình muốn sao cho khi ngày quá hạn lớn hơn 0 và nhỏ hơn 30 thì số tiền sẽ nhảy qua cột ít hơn 30 ngày.Còn nếu lớn hơn 30 ngày thì số tiền sẽ nhảy qua cột lớn hơn 30 ngày.Mình thử vlookup và hàm if nhưng vẫn k duoc.Mong các bạn giúp mình.
 

File đính kèm

1/Quá hạn ít hơn 30ngày
=IF(AND(K2>=0;K2<30);H2;"")

2/Quá hạn nhiều hơn 30 ngày
IF(K2>=30;H2;"")
 
Cám ơn bạn, mình đã làm như công thức của bạn và thành công.
 
Dùng Vlookup để tìm 1 thuộc tính khi biết nhiều thuộc tính khác

Chào các bạn,
Mình tham gia diễn đàn và học hỏi được rất nhiều điều từ các bạn. Có một việc nhờ các bạn giúp. Việc sử dụng Vlookup để tìm và điền các thông tin khác (của khách hàng chẳng hạn) sang 1 sheet khác khi đã có ID của khách hàng (duy nhất) thì mình làm được, tuy nhiên khi làm ngược lại thì mình không biết VD: có đầy đủ thông tin của khách hàng như tên tuổi, địa chỉ, số dt, ngày sinh nhưng mình muốn tìm ID của khách hàng đó thì phải làm thế nào.
Làm ơn chỉ giúp mình.
Thanks
 
Lần chỉnh sửa cuối:
Bạn thử dùng AdvcedFilter;
Mình sẵn lòng viết cho bạn hàm người dùng, một khi bạn cần xài nhiều lần trong tuần; Sẽ tiện hơn chút đỉnh!

Chúc thành công & chờ tin bạn!
 
....tuy nhiên khi làm ngược lại thì mình không biết VD: có đầy đủ thông tin của khách hàng như tên tuổi, địa chỉ, số dt, ngày sinh nhưng mình muốn tìm ID của khách hàng đó thì phải làm thế nào.

Bạn có thể dùng hàm Index và Match. Bạn hãy đưa dữ liệu của bạn lên sẽ có cách giải quyết cụ thể.
 
Status
Không mở trả lời sau này.

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

Back
Top Bottom