toandiennuoc123
Thành viên thường trực




- Tham gia
- 7/3/12
- Bài viết
- 239
- Được thích
- 9
Dùng công thức không cần lập trình được không bạn?
Mã:=MATCH(F1,B5:B23,0)
=LOOKUP(2,1/($B$5:$B$23=F1),$A$5:$A$23)
=INDEX($A$5:$A$23,MATCH(F1,$B$5:$B$23,0))
Người ta chỉ ví dụ thế thôi chứ SHD làm gì mà 1, 2, 3... như số thứ tự thế kia ---> Không thể dùng hàm MATCH được rồi
1> Dùng LOOKUP
Chậc.....Chuẩn luôn !Mã:=LOOKUP(2,1/($B$5:$B$23=F1),$A$5:$A$23)
làm bằng VBA thì tốt quá (Sợ bị xóa công thức). Cám ơn rất nhiều ..
=LOOKUP(2,1/($B$5:$B$23=F1),$A$5:$A$23). Số 2,1 nó là cái gì thế nhỉ...chưa hiểu?????
Chậc.....Chuẩn luôn !
làm bằng VBA thì tốt quá (Sợ bị xóa công thức). Cám ơn rất nhiều ..
=LOOKUP(2,1/($B$5:$B$23=F1),$A$5:$A$23). Số 2,1 nó là cái gì thế nhỉ...chưa hiểu?????
Muốn VBA thì xài thử cái này cho sheet1:Người ta chỉ ví dụ thế thôi chứ SHD làm gì mà 1, 2, 3... như số thứ tự thế kia ---> Không thể dùng hàm MATCH được rồi
1> Dùng LOOKUP
Chậc.....Chuẩn luôn !Mã:=LOOKUP(2,1/($B$5:$B$23=F1),$A$5:$A$23)
làm bằng VBA thì tốt quá (Sợ bị xóa công thức). Cám ơn rất nhiều ..
=LOOKUP(2,1/($B$5:$B$23=F1),$A$5:$A$23). Số 2,1 nó là cái gì thế nhỉ...chưa hiểu?????
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Arr(), I As Long, DK As String, Num As Long
If Target.Address = "$F$1" Then
DK = UCase(Target)
Arr = Range([A5], [B65536].End(xlUp)).Value
For I = 1 To UBound(Arr, 1)
If UCase(Arr(I, 2)) = DK Then
Num = Num + 1
[F2].Value = Arr(I, 1)
Exit Sub
End If
Next I
If Num = 0 Then
[F2] = Empty
MsgBox "Khong tim thay!", , "GPE"
End If
End If
End Sub[/GPECODE]
Dùng mảng thì hay rồi, nhưng với bài toán tìm kiếm 1 trả về 1 thì em nghĩ dùng Find Method hay hơn (và ngắn gọn hơn rất nhiều)Muốn VBA thì xài thử cái này cho sheet1:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Arr(), I As Long, DK As String, Num As Long
If Target.Address = "$F$1" Then
DK = UCase(Target)
Arr = Range([A5], [B65536].End(xlUp)).Value
For I = 1 To UBound(Arr, 1)
If UCase(Arr(I, 2)) = DK Then
Num = Num + 1
[F2].Value = Arr(I, 1)
Exit Sub
End If
Next I
If Num = 0 Then
[F2] = Empty
MsgBox "Khong tim thay!", , "GPE"
End If
End If
End Sub[/GPECODE]
Muốn VBA thì xài thử cái này cho sheet1:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Arr(), I As Long, DK As String, Num As Long
If Target.Address = "$F$1" Then
DK = UCase(Target)
Arr = Range([A5], [B65536].End(xlUp)).Value
For I = 1 To UBound(Arr, 1)
If UCase(Arr(I, 2)) = DK Then
Num = Num + 1
[F2].Value = Arr(I, 1)
Exit Sub
End If
Next I
If Num = 0 Then
[F2] = Empty
MsgBox "Khong tim thay!", , "GPE"
End If
End If
End Sub[/GPECODE]
CODE này lúc chạy lúc không.....thử lúc đầu thì ngon----> thật thì lại "không tìm thấy"...ẹc ẹc
cho dữ liệu thật khoảng 10 dòng thì OK -----> hơn 100 dòng thì "không tìm thấy", bạn xem lại giúp nhé.
cho dữ liệu thật khoảng 10 dòng thì OK -----> hơn 100 dòng thì "không tìm thấy", bạn xem lại giúp nhé.
Bây giờ thì được rồi.....copy 10 dòng đầu --> OK, 10 dòng tiếp theo --> OK, 20 dòng tiếp theo --> "không tìm thấy", xóa 20 dòng vừa copy --> OK, copy 10 dòng tiếp theo -->...... cứ thế... cứ thế... thế mà lại được... chậc. (dữ liệu hơi nhạy cảm, mong các bạn thông cảm). cám ơn nhiều nhéVậy thì bạn cho dữ liệu thật lên xem nào
CODE này lúc chạy lúc không.....thử lúc đầu thì ngon----> thật thì lại "không tìm thấy"...ẹc ẹc
cho dữ liệu thật khoảng 10 dòng thì OK -----> hơn 100 dòng thì "không tìm thấy", bạn xem lại giúp nhé.
mình nghĩ code của bác bate còn thiếu 1 phần là nhả lọc hoặc unhide rows thì mới bảo toàn 100% kết quả đúng.![]()
mình nghĩ code của bác bate còn thiếu 1 phần là nhả lọc hoặc unhide rows thì mới bảo toàn 100% kết quả đúng.![]()
Bạn "đoán mò" thì cũng như không thôi, chỉ khi nào thấy file, thấy lỗi mới biết được là lỗi gì.
Bạn "đoán mò" thì cũng như không thôi, chỉ khi nào thấy file, thấy lỗi mới biết được là lỗi gì.