Xin trợ giúp code tìm kiếm trong VBA (1 người xem)

Liên hệ QC

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

ThangAcc

Thành viên hoạt động
Tham gia
27/11/06
Bài viết
137
Được thích
53
Xin các cao thủ trợ giúp em code tìm kiếm giá trị trong VBA.
Bây giờ code tìm kiếm em đang viết thế này:

Mã:
Set Rng_Tonghop = sh1.Range(sh1.[B4], sh1.[B65500].End(xlUp))
Set sRng_Tonghop = Rng_Tonghop.Find(t_Masp, , xlFormulas, xlWhole)

If Not sRng_Tonghop Is Nothing Then
 .....................
End If

Nhưng bao giờ sRng_Tonghop cũng là ô đầu tiên tìm được trong Rng_Tonghop. Bây giờ nếu em muốn tìm tiếp (tức là sRng_Tonghop bỏ qua ô thứ 1, chọn ô thứ 2 tìm được trong Rng_Tonghop) thì làm thế nào?

Mong các bác chỉ giáo, thanks các bác
 
Xin các cao thủ trợ giúp em code tìm kiếm giá trị trong VBA.
Bây giờ code tìm kiếm em đang viết thế này:

Mã:
Set Rng_Tonghop = sh1.Range(sh1.[B4], sh1.[B65500].End(xlUp))
Set sRng_Tonghop = Rng_Tonghop.Find(t_Masp, , xlFormulas, xlWhole)

If Not sRng_Tonghop Is Nothing Then
 .....................
End If

Nhưng bao giờ sRng_Tonghop cũng là ô đầu tiên tìm được trong Rng_Tonghop. Bây giờ nếu em muốn tìm tiếp (tức là sRng_Tonghop bỏ qua ô thứ 1, chọn ô thứ 2 tìm được trong Rng_Tonghop) thì làm thế nào?

Mong các bác chỉ giáo, thanks các bác
Vậy thì thêm một câu Set sRng_Tonghop = Rng_Tonghop.FindNext(sRng_Tonghop) vào trước câu lệnh If ở trên xem sao.
(đặt tên biến chi mà dài rứa không biết?!)
 
Upvote 0
Thanks bác, có cách nào để biết được nó tìm được bao nhiêu ô thoả mãn điều kiện không bác?

Và nếu em muốn tìm tiếp, thức là bỏ ô thứ 2 lấy giá trị ở ô thứ 3, thứ 4... thì làm thế nào?
 
Lần chỉnh sửa cuối:
Upvote 0
Thanks bác, có cách nào để biết được nó tìm được bao nhiêu ô thoả mãn điều kiện không bác?

Và nếu em muốn tìm tiếp, thức là bỏ ô thứ 2 lấy giá trị ở ô thứ 3, thứ 4... thì làm thế nào?
Tóm lại bạn muốn tìm để làm cái gì tiếp theo?
- Nếu muôn tìm tất cả các giá trị thỏa mản điều kiện thì phải dùng vòng lập
- Nếu muốn tìm cell cuối cùng thỏa điều kiện thì thêm tham số SearchDirection = xlPrevious vào Find Method
 
Upvote 0
Thanks bác, có cách nào để biết được nó tìm được bao nhiêu ô thoả mãn điều kiện không bác?

Và nếu em muốn tìm tiếp, thức là bỏ ô thứ 2 lấy giá trị ở ô thứ 3, thứ 4... thì làm thế nào?
Muốn biết có bao nhiêu ô thỏa mãn thì chỉ cần sử dụng hàm WorksheetFunction.CountIf(Rng_Tonghop,t_Masp) là được. Còn muốn bỏ qua ô thứ 2 để lấy ô thứ 3, thứ 4,... thì có lẽ phải dùng vòng For hoặc làm siêng thì copy câu lệnh FindNext ở trên dán thêm vài lần nữa +-+-+-+
 
Upvote 0
Muốn biết có bao nhiêu ô thỏa mãn thì chỉ cần sử dụng hàm WorksheetFunction.CountIf(Rng_Tonghop,t_Masp) là được. Còn muốn bỏ qua ô thứ 2 để lấy ô thứ 3, thứ 4,... thì có lẽ phải dùng vòng For hoặc làm siêng thì copy câu lệnh FindNext ở trên dán thêm vài lần nữa +-+-+-+

Cảm ơn bác Nghĩa rất nhiều. Code của em giờ được sửa thành:

Set Rng_Tonghop = sh1.Range(sh1.[B4], sh1.[B65500].End(xlUp))
Set sRng_Tonghop = Rng_Tonghop.Find(t_Masp, , xlFormulas, xlWhole)

If Not sRng_Tonghop Is Nothing Then

For i = 1 To WorksheetFunction.CountIf(Rng_Tonghop, t_Masp)

If sh1.Cells(sRng_Tonghop.Row, "AB").Value > 0 Then
x_DecInfo = sh1.Cells(sRng_Tonghop.Row, "F").Value
x_DecPartNo = sh1.Cells(sRng_Tonghop.Row, "J").Value
Cells(Cll.Row, "J").Value = x_DecInfo

With sh3.[A65500].End(xlUp).Offset(1)
.Value = t_Masp
.Offset(, 4).Value = x_DecInfo
.Offset(, 2).Value = x_DecPartNo
.Offset(, 22).Value = x_SLB
End With
Exit For
Else
Set sRng_Tonghop = Rng_Tonghop.FindNext(sRng_Tonghop)
End If

Next i
Else
Cells(Cll.Row, "K").Value = "Khong sua"
End If

Xin lỗi vì em hỏi hơi dài dòng, nếu em post file em đang làm lên chắc các bác làm tí thì xong thôi, nhưng em cũng muốn mình cũng phải động não suy nghĩ ạ.

Em và Ngọc (NH_DK) đang làm 1 file tính refund cho công ty, chắc sẽ cần nhờ các bác giúp nhiều. Kính mong các bác chỉ giáo.
 
Upvote 0
Tóm lại bạn muốn tìm để làm cái gì tiếp theo?
- Nếu muôn tìm tất cả các giá trị thỏa mản điều kiện thì phải dùng vòng lập
- Nếu muốn tìm cell cuối cùng thỏa điều kiện thì thêm tham số SearchDirection = xlPrevious vào Find Method

Có 1 điều kiện như thế này bác ạ: If sh1.Cells(sRng_Tonghop.Row, "AB").Value > 0 Then

Thực ra điều kiện không phải 100% như vậy, em đang làm test thôi, điều kiện thực sẽ phức tạp hơn 1 chút.

Tức là nó chỉ chọn cái hàng nào mà cột AB có giá trị lớn hơn không thì dừng lại, lấy giá trị của cái hàng đấy.
 
Upvote 0
Trong đoạn code của em có rất nhiều đoạn con lặp đi lặp lại (em phải gõ rất nhiều lần), có cách nào thay thể đoạn ấy bằng 1 câu lệnh đơn giản không ạ? Vì có rất nhiều biến trong đoạn ấy nên em không muốn tạo thủ tục riêng vì sẽ phải khai báo lại biến.

Ví dụ đoạn code sau xuất hiện ít nhất 3 lần trong chương trình:

With sh3.[A65500].End(xlUp).Offset(1)
.Value = t_Masp
.Offset(, 4).Value = x_DecInfo
.Offset(, 2).Value = x_DecPartNo
End With
 
Upvote 0
Web KT

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

Back
Top Bottom