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

  • 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 .
Status
Không mở trả lời sau này.
Anh xử lý sự kiện TextBox1_AfterUpdate như sau:
PHP:
Private Sub TextBox1_AfterUpdate()
On Error GoTo ThaiBinh_Excel
Me.TextBox1.Value = UCase(Me.TextBox1.Value)
Me.TextBox2 = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Sheets("sheet1").[B:C], 2, 0)

Exit_Sub:
Exit Sub

ThaiBinh_excel:
    MsgBox "Ma Nhap vao khong dung, vui long nhap lai!", vbInformation, "Thong bao"
    Resume Exit_Sub
End Sub

Ca_dafi cho mình hỏi, mình dùng Format Cell chỉnh đối tượng truy xuất là số thành định dạng theo ý mình, ví dụ số 01 , mình mặc định là "S"&0000000 trong Format Cell ~ S00000001, khi đó code chuyển chữ thường thành chữ hoa không cần thiết nữa, mình đã xóa đi.

Như vậy mình có 02 colum : 1 là số thứ tự, 2 là tên công ty ( ví dụ thế) nhưng lúc đó khi mình đánh số thứ tự thì code của bạn hình như không hiểu được nên cứ báo lỗi. Khắc phục thế nào vậy bạn ơi ?

Mong giúp dùm. Cám ơn các bạn
 
1/ Thêm vào form một Textbox nữa đặt tên là Textbox3 có thuộc tính Visible = True
2/ Câu lệnh xử lý sẽ là :

PHP:
Private Sub TextBox1_AfterUpdate()
On Error GoTo ThaiBinh_Excel
Me.TextBox3 = "S" & Right("0000000" & Me.TextBox1, 8)    '   Tùy vào cách đặt dữ liệu ở cột A mà sửa lại cho phù hợp
Me.TextBox2 = Application.WorksheetFunction.VLookup(Me.TextBox3.Value, Sheets("sheet1").[A:C], 3, 0)
 
Exit_Sub:
Exit Sub
 
ThaiBinh_excel:
    MsgBox "Khong co so hieu nay, vui long nhap lai!", vbInformation, "Thong bao"
    Resume Exit_Sub
End Sub
</SPAN></SPAN>
 
Lần chỉnh sửa cuối:
1/ Thêm vào form một Textbox nữa đặt tên là Textbox3 có thuộc tính Visible = True
2/ Câu lệnh xử lý sẽ là :

PHP:
Private Sub TextBox1_AfterUpdate()
On Error GoTo ThaiBinh_Excel
Me.TextBox3 = "S" & Right("0000000" & Me.TextBox1, 8)    '   Tùy vào cách đặt dữ liệu ở cột A mà sửa lại cho phù hợp
Me.TextBox2 = Application.WorksheetFunction.VLookup(Me.TextBox3.Value, Sheets("sheet1").[A:C], 3, 0)
 
Exit_Sub:
Exit Sub
 
ThaiBinh_excel:
    MsgBox "Khong co so hieu nay, vui long nhap lai!", vbInformation, "Thong bao"
    Resume Exit_Sub
End Sub
</SPAN></SPAN>

Cám ơn bác Xuân Thanh, nhưng hình như bác hiểu nhấm ý của mình rồi. Cụ thể là Form của mình sẽ có 02 TextBox, TextBox 1 là mã code, TextBox 2 là dữ liệu hiên ra. Theo file cũ thì textbox 1 là chữ nên gõ chữ vào thì truy xuất được, nhưng nếu mình chuyển dữ liệu trong file của mình thành 1,2,3 chứ không phải là AA,BB,AC thì khi mình gõ vào TextBox 1 nó báo lỗi " k tìm thấy dữ liệu". Mình sẽ viết code gì hay điều chỉnh thế nào vậy ?

Thanks and Best Regards,
TB
 
Lần chỉnh sửa cuối:
1/ Mục đich phải format trong VBA là để giá trị của Textbox3 giống với giá trị của cột A trong Sheet1 và giá trị này để ta dùng VLOOKUP tìm kiếm
2/ Khi gõ 1,2,3... vào Textbox2 thì Textbox3 tự format theo
Thân

P/S : Việc format ở cột A trong Sh và việc format Textbox trong Form là hai chuyện hoàn toàn khác nhau nhưng mục đích chung là để 2 dữ liệu giống nhau phục vụ cho việc tìm kiếm bằng VLOOKUP
 
Lần chỉnh sửa cuối:
1/ Mục đich phải format trong VBA là để giá trị của Textbox3 giống với giá trị của cột A trong Sheet1 và giá trị này để ta dùng VLOOKUP tìm kiếm
2/ Khi gõ 1,2,3... vào Textbox2 thì Textbox3 tự format theo
Thân

P/S : Việc format ở cột A trong Sh và việc format Textbox trong Form là hai chuyện hoàn toàn khác nhau nhưng mục đích chung là để 2 dữ liệu giống nhau phục vụ cho việc tìm kiếm bằng VLOOKUP

Vậy là phải dùng 01 TextBox trung gian hả bác? Mình không thể VLOOKUP theo number trực tiếp từ TEXTBOX1 luôn sao ? Nếu như vậy sao mình không cài câu lệnh Right ở TextBox1 luôn nhỉ ?
 
Lần chỉnh sửa cuối:
VLOOKUP là hàm dò tìm chính xác. Vì vậy điều kiện dò tìm là phải chính xác nếu không sẽ không dò tìm được. Bình xem lại cú pháp của hàm VLOOKUP sẽ hiểu ngay thôi. Nếu không muốn dùng trung gian thì cột A đừng có format, cứ để theo số TT tự nhiên
Thân

P/S : Khi nãy gọi điện cho chú mà không được. Xóa số rồi hả ?
 
VLOOKUP là hàm dò tìm chính xác. Vì vậy điều kiện dò tìm là phải chính xác nếu không sẽ không dò tìm được. Bình xem lại cú pháp của hàm VLOOKUP sẽ hiểu ngay thôi. Nếu không muốn dùng trung gian thì cột A đừng có format, cứ để theo số TT tự nhiên
Thân

P/S : Khi nãy gọi điện cho chú mà không được. Xóa số rồi hả ?

Em gui lai cho anh File luôn nè, chỉnh theo đúng hướng dẫn của anh a nhưng mà hổng ra hi`hi`
:-)
 

File đính kèm

Do việc Format ở hai vị trí là khác nhau nên VBA nó hổng có hiểu
Vậy làm theo cách vòng vo vậy. Mượn Sheet để dò tìm
Bình xem file kèm theo sẽ rõ
Thân
 

File đính kèm

Không cần vòng vo gì đâu, nếu biết chắc cột A là số thì thêm Val() là được:
PHP:
Private Sub TextBox1_AfterUpdate()
On Error GoTo ThaiBinh_excel
Me.TextBox2 = Application.VLookup(Val(TextBox1), Range("bangdo"), 3, 0)
Range("A1").Select
Exit_Sub:
Exit Sub
 
ThaiBinh_excel:
    MsgBox "Khong co so hieu nay, vui long nhap lai!", vbInformation, "Thong bao"
    TextBox1 = "" : TextBox2 = ""
    TextBox1.SetFocus
    Resume Exit_Sub
End Sub
 
Do việc Format ở hai vị trí là khác nhau nên VBA nó hổng có hiểu
Vậy làm theo cách vòng vo vậy. Mượn Sheet để dò tìm
Bình xem file kèm theo sẽ rõ
Thân

Cám ơn anh, nhưng như thế không ổn ạ vì nếu vậy thì em cho Vlookup trực tiếp ngoài dữ liệu rồi set TEXBOX.VALUE = dữ liệu bên ngoài là được rồi. Em chỉ muốn Vlookup trực tiếp trên Form thôi a.

:-)
Best Regards.
 
Lần chỉnh sửa cuối:
Nhờ chỉ cách dùng công thức:Vlookup(mid(),..,..,..)!

Em thực hành Excel, dùng công thức này không được:"=vlookup(mid(.....),......,...,...)".Công thức em đã soạn ra trong " ĐỀ 4",của file em đính kèm ,dưới mấy dòng chữ đỏ!.Mấy bác giải thích dùm em là em đã sai ở chỗ nào ,và cách khắc phục ạh! Em xin chân thành cảm ơn!

http://hdtdragonking.googlepages.com...2222222222.XLS
 
Em thực hành Excel, dùng công thức này không được:"=vlookup(mid(.....),......,...,...)".Công thức em đã soạn ra trong " ĐỀ 4",của file em đính kèm ,dưới mấy dòng chữ đỏ!.Mấy bác giải thích dùm em là em đã sai ở chỗ nào ,và cách khắc phục ạh! Em xin chân thành cảm ơn!

http://hdtdragonking.googlepages.com...2222222222.XLS

Bạn phải biết rằng hàm MID sẽ trả về giá trị kiểu TEXT, trong khi vùng đích để tìm kiếm của bạn là giá trị số, nên hàm Vlookup không cho ra giá trị là đúng.

Công thức vlookup của bạn nên sửa lại như sau:
=VLOOKUP(--MID(B7,2,1),$G$16:$H$19,2,0)
Hoặc
=VLOOKUP(0+MID(B7,2,1),$G$16:$H$19,2,0)
Hoặc
=VLOOKUP(MID(B7,2,1)*1,$G$16:$H$19,2,0)

Và xem thêm tại đây nhé!
http://www.giaiphapexcel.com/forum/showpost.php?p=108770&postcount=11
 
Cách khác bạn có thể dùng thêm hàm value như sau:

=VLOOKUP(VALUE(MID(B7,2,1)),$G$16:$H$19,2,0)
 
Còn 1 cách nữa là bạn đổi G16:G19 thành kiểu text hết thì OK. Bạn quét chọn vùng G16:G19 rồi bấm phải chuột chọn Format Cells -> chọn tab Number -> Nhấn vào chữ Text -> OK. Rồi nhập lại số trong vùng G16:G19 là được. Thân.
 
Lần chỉnh sửa cuối:
Không cần vòng vo gì đâu, nếu biết chắc cột A là số thì thêm Val() là được:
PHP:
Private Sub TextBox1_AfterUpdate()
On Error GoTo ThaiBinh_excel
Me.TextBox2 = Application.VLookup(Val(TextBox1), Range("bangdo"), 3, 0)
Range("A1").Select
Exit_Sub:
Exit Sub
 
ThaiBinh_excel:
    MsgBox "Khong co so hieu nay, vui long nhap lai!", vbInformation, "Thong bao"
    TextBox1 = "" : TextBox2 = ""
    TextBox1.SetFocus
    Resume Exit_Sub
End Sub

PTM0412 oi, trong trường hợp sheet để dò tìm nằm ở 1 sheet khác thì sao? Câu lệnh của bác khi apply vào file của mình cứ báo lỗi range ( "wrong number of arguement or invalid property assignment"). Mình không rõ tại sao nữa ?

Code của mình :

On Error GoTo ThaiBinh_excel
Me.TextBox7 = Application.VLookup(Val(TextBox1), Range("data", 26, 0))
Sheets("general").Range("B6").Select

Exit_Sub:
Exit Sub

ThaiBinh_excel:
MsgBox "Khong co so hieu nay, vui long nhap lai!", vbInformation, "Thong bao"
Resume Exit_Sub

Nhờ bác xem giúp. Cám ơn bác.
 
Me.TextBox7 = Application.VLookup(Val(TextBox1), Range("data", 26, 0))
Chắc là lỗi dòng này.
1. "data" là name bạn đặt như thế nào? name có giá trị toàn wokbook hay name chỉ có giá trị trong worksheet? nếu như vầy là đúng: = sheet1!$A$1:$Z$200
2. vùng data đó có bao nhiêu cột? (tìm tới cột thứ 26 lận)
3. Có 1 chỗ sai màu đỏ không biết là chỉ sai trong bài viết trên hay trong code?

Sửa lại như vầy: Me.TextBox7 = Application.VLookup(Val(TextBox1), Range("data"), 26, 0)

Bổ sung:
XuanThanh đã viết:
VLOOKUP là hàm dò tìm chính xác. Vì vậy điều kiện dò tìm là phải chính xác nếu không sẽ không dò tìm được. Bình xem lại cú pháp của hàm VLOOKUP sẽ hiểu ngay thôi. Nếu không muốn dùng trung gian thì cột A đừng có format, cứ để theo số TT tự nhiên
Đã là số mà định dạng custom "S"000000 thì vẫn cứ là số, khi dò tìm chỉ cần giá trị dò tìm là số thì sẽ tìm được. Thí dụ thể hiện là S000015 nhưng chỉ cần tìm 15 (số) là ra. Chỉ khi tìm "15" (text) mới không ra, lúc đó phải dùng Val() chuyển về số.
 
Me.TextBox7 = Application.VLookup(Val(TextBox1), Range("data", 26, 0))
Chắc là lỗi dòng này.
1. "data" là name bạn đặt như thế nào? name có giá trị toàn wokbook hay name chỉ có giá trị trong worksheet? nếu như vầy là đúng: = sheet1!$A$1:$Z$200
2. vùng data đó có bao nhiêu cột? (tìm tới cột thứ 26 lận)
3. Có 1 chỗ sai màu đỏ không biết là chỉ sai trong bài viết trên hay trong code?

Sửa lại như vầy: Me.TextBox7 = Application.VLookup(Val(TextBox1), Range("data"), 26, 0)

Bổ sung:

Đã là số mà định dạng custom "S"000000 thì vẫn cứ là số, khi dò tìm chỉ cần giá trị dò tìm là số thì sẽ tìm được. Thí dụ thể hiện là S000015 nhưng chỉ cần tìm 15 (số) là ra. Chỉ khi tìm "15" (text) mới không ra, lúc đó phải dùng Val() chuyển về số.

Cám ơn bác,

Mình đã tìm ra chổ sai rồi, đúng là mình đánh công thức chưa chính xác.
Về định dạng thì mình cũng nghi là như vậy, nhưng không hiểu tại sao vào TextBox lại không hiểu. Sau khi cài thêm Val() thì okie.

Thân.
 
Hỏi về Công Thức Vlookup

em đã ghi hết yêu cầu ở trong sheets đó. Mong GPE giúp đỡ
 

File đính kèm

Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom