Cần giúp đỡ tìm kiếm 1 ô nằm trên cùng đầu tiên dọc theo cột có ký tự "PN" bên trái (4 người xem)

Liên hệ QC

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
929
Được thích
240
Giới tính
Nam
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tìm kiếm ô đầu tiên
nằm trên cùng đầu tiên của nhóm ký tự "PN" bên trái ngoài cùng trong ô dọc theo cột B (Dữ liệu trong cột B không cố định). Ví dụ: ô B47 là thỏa điều kiện vì ô đó nằm trên cùng đầu tiên của nhóm ký tự "PN" và ô B47 đó có 2 ký tự "PN" nằm bên trái ngoài cùng.
Tôi đã thử dùng code VBA này:
PHP:
Sub Timkiem() 
For t = 7 To [B65536].End(xlUp).Row  
 If Left(Cells(t, 2), 2) = "PN" Then   
    Cells(t, 2).Select  
 End If
Next
Selection.End(xlUp).Select
End Sub
Không biết chư vị có giải pháp nào tốt hơn không ạ?
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có file đính kèm.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tìm kiếm ô đầu tiên
nằm trên cùng đầu tiên của nhóm ký tự "PN" bên trái ngoài cùng trong ô dọc theo cột B (Dữ liệu trong cột B không cố định). Ví dụ: ô B47 là thỏa điều kiện vì ô đó nằm trên cùng đầu tiên của nhóm ký tự "PN" và ô B47 đó có 2 ký tự "PN" nằm bên trái ngoài cùng.
Tôi đã thử dùng code VBA này:
PHP:
Sub Timkiem() 
For t = 7 To [B65536].End(xlUp).Row  
 If Left(Cells(t, 2), 2) = "PN" Then   
    Cells(t, 2).Select  
 End If
Next
Selection.End(xlUp).Select
End Sub
Không biết chư vị có giải pháp nào tốt hơn không ạ?
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có file đính kèm.

tôi nghĩ là Find sẽ nhanh hơn vì không cần vòng lặp
 
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tìm kiếm ô đầu tiên
nằm trên cùng đầu tiên của nhóm ký tự "PN" bên trái ngoài cùng trong ô dọc theo cột B (Dữ liệu trong cột B không cố định). Ví dụ: ô B47 là thỏa điều kiện vì ô đó nằm trên cùng đầu tiên của nhóm ký tự "PN" và ô B47 đó có 2 ký tự "PN" nằm bên trái ngoài cùng.
Tôi đã thử dùng code VBA này:
PHP:
Sub Timkiem() 
For t = 7 To [B65536].End(xlUp).Row  
 If Left(Cells(t, 2), 2) = "PN" Then   
    Cells(t, 2).Select  
 End If
Next
Selection.End(xlUp).Select
End Sub
Không biết chư vị có giải pháp nào tốt hơn không ạ?
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có file đính kèm.
Ý bạn muốn làm gì thì nói luôn đi, chẳng lẽ chọn được 1 ô rồi để đó.
Thấy tình hình "có lẽ" để tính tổng vào các dòng màu vàng?
 
Ý bạn muốn làm gì thì nói luôn đi, chẳng lẽ chọn được 1 ô rồi để đó.
Thấy tình hình "có lẽ" để tính tổng vào các dòng màu vàng?
Dạ, đoạn này nằm trong một phần dự án của em ạ. Em xin nói thật là: Giả sử đã tìm được ô đó (Tức là ô B47 trong trường hợp này) thì em sẽ offset đến ô D46 (Nằm trên dòng màu vàng kế trên) và gõ vào đó là "Phiếu nhập kho" => Tương tự đó với các ký tự khác như là "PCNN" là "Phiếu chi",... ạ
Nhờ Quý vị "gợi ý" thì em xin hỏi thêm là: Nếu mà muốn tính tổng (Subtotal) cho từng dòng màu vàng đó thì Quý vị sẽ làm thế nào ạ?
 
Lần chỉnh sửa cuối:
Nếu mà làm theo như Quý vị nói thì có thể sẽ không tìm được ô như mình mong muốn đâu ạ, bởi vì biết đâu cột D có ký tự "PN" ở bên trái ngoài cùng trong ô thì sao ạ?

Tìm tượng đối thôi, thao tác bằng thì thì bạn làm như vậy nè
nhấn Ctrl F, gõ kí tự cần tìm vào ô tìm, xong nhấn vào cái option, rồi chọn match case
code thì thử vậy
Mã:
Sub timkiem()

Dim rng As Range, mychar As String
mychar = Application.InputBox("Enter a key")
Set rng = [B1:B6000].Find(UCase(mychar), , , , 1)
If Not rng Is Nothing Then
    MsgBox "tim thay " & rng.Address
    rng.Select
Else
    MsgBox "ko tim thya key nay"
End If
Set rng = Nothing

End Sub
 
Tìm tượng đối thôi, thao tác bằng thì thì bạn làm như vậy nè
nhấn Ctrl F, gõ kí tự cần tìm vào ô tìm, xong nhấn vào cái option, rồi chọn match case
code thì thử vậy
Mã:
Sub timkiem()

Dim rng As Range, mychar As String
mychar = Application.InputBox("Enter a key")
Set rng = [B1:B6000].Find(UCase(mychar), , , , 1)
If Not rng Is Nothing Then
    MsgBox "tim thay " & rng.Address
    rng.Select
Else
    MsgBox "ko tim thya key nay"
End If
Set rng = Nothing

End Sub
Em đồng ý với Quý vị là phương án này rất hay. Nhưng mà để em học hỏi thêm thì em dùng code như #1:
PHP:
Sub Timkiem() 
For t = 7 To [B65536].End(xlUp).Row  
 If Left(Cells(t, 2), 2) = "PN" Then   
    Cells(t, 2).Select  
 End If
Next
Selection.End(xlUp).Select
End Sub

=> Có cách nào để vòng lặp này duyệt ô từ trên xuống dưới cột B => "chạm" được vào ô cần tìm kiếm như mong muốn => Dừng vòng lặp này ngay tại ô đó luôn không ạ? (Mục đích là để em học hỏi thêm thôi ạ?)
 
Em đồng ý với Quý vị là phương án này rất hay. Nhưng mà để em học hỏi thêm thì em dùng code như #1:
PHP:
Sub Timkiem() 
For t = 7 To [B65536].End(xlUp).Row  
 If Left(Cells(t, 2), 2) = "PN" Then   
    Cells(t, 2).Select  
 End If
Next
Selection.End(xlUp).Select
End Sub

=> Có cách nào để vòng lặp này duyệt ô từ trên xuống dưới cột B => "chạm" được vào ô cần tìm kiếm như mong muốn => Dừng vòng lặp này ngay tại ô đó luôn không ạ? (Mục đích là để em học hỏi thêm thôi ạ?)
Mã:
[FONT=monospace][COLOR=#000000][COLOR=#0000BB]Sub Timkiem[/COLOR][COLOR=#007700]() 
For [/COLOR][COLOR=#0000BB]t [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]7 To [/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]B65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row  
 [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Left[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]t[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"PN" [/COLOR][COLOR=#0000BB]Then   
    Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]t[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select
    [/COLOR][/COLOR][COLOR=#ff0000]exit sub [/COLOR][COLOR=#000000][COLOR=#0000BB] 
 End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000BB]Next
Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select
End Sub
[/COLOR][/COLOR][/FONT]
 
Mã:
[FONT=monospace][COLOR=#000000][COLOR=#0000BB]Sub Timkiem[/COLOR][COLOR=#007700]() 
For [/COLOR][COLOR=#0000BB]t [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]7 To [/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]B65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row  
 [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Left[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]t[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"PN" [/COLOR][COLOR=#0000BB]Then   
    Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]t[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select
    [/COLOR][/COLOR][COLOR=#ff0000]exit sub [/COLOR][COLOR=#000000][COLOR=#0000BB] 
 End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000BB]Next
Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select
End Sub  [/COLOR][/COLOR][/FONT]

Dạ, nếu mà thêm exit sub kia thì hay đấy, nhưng chỉ dùng trong trường hợp kết thúc luôn thủ tục. Còn nếu mà đoạn code trên nằm trong một dự án lớn thì Quý vị tính sao ạ?
 
Exit Là thoát vậy muốn thoát vòng lặp thì exit for..........
Em đã từng thử đưa Exit For vào mà không ăn thua => Chắc là lúc đó em đưa Exit For dưới End If và trên Next => Chạy không chính xác => Em thử đặt Exit For trên End IF thì chạy chính xác. Vâng, cảm ơn Quý vị đã chỉ giáo.
 
Web KT

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

Back
Top Bottom