Tìm dòng đầu, cuối của dãy giá trị giống nhau

Liên hệ QC

diemvuongvathuongde

Thành viên chính thức
Tham gia
5/11/07
Bài viết
75
Được thích
2
Các anh/chị giúp em xác định dòng đầu và cuối trong 1 dãy ô chứa cùng một giá trị nha. Cụ thể em ghi trong file đính kèm.
Cảm ơn các anh/chị.
 

File đính kèm

Macro của bạn đây, xin mời

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect([C5], Target) Is Nothing Then
   Dim Rng As Range, sRng As Range, MyAdd As String, fRw As Long, lRw As Long
 
   Set Rng = Range([A1], [A65500].End(xlUp))
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If sRng Is Nothing Then
      Target.Value = "Khong Có Giá Tri Này: " & Target.Value
   Else
      fRw = sRng.Row:               [d5].Value = fRw
      Do
         Set sRng = Rng.FindNext(sRng)
         If [d5].Value <> sRng.Row Then [d6].Value = sRng.Row
      Loop While Not sRng Is Nothing And sRng.Row <> fRw
   End If
 End If
End Sub
Hướng dẫn sử dụng:
Bạn nhập trị cần tìm vô [C5]; Kết quả sẽ hiện lên các dòng cũa cột bên phải liền kề.

Chúc nhiều thắng lợi!
 
Upvote 0
Và đây là một bài tham gia nữa
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
 If Not Intersect([C5], Target) Is Nothing Then
    Dim Rng As Range
    Set Rng = Range([A2], [A65500].End(xlUp))
    [d5] = Rng.Find(Target.Value).Row
    [d6] = [d5] + Application.WorksheetFunction.CountIf(Rng, Target.Value) - 1
 End If
End Sub
 
Upvote 0
trong trường hợp khi nhập vào ô C5 1 giá trị không có trong A:A thì
- Kết quả của chibi không đúng
- Code của haiyen17 báo lỗi.
Nhờ 2 bạn hoàn chỉnh code nghen.

Còn minh thì dùng công thức:
d5=IF(ISNA(MATCH(C5;A:A;));"Không có";MATCH(C5;A:A;))
d6=IF(ISNA(MATCH(C5;A:A;));"Không có";MATCH(C5;A:A;1))
 
Upvote 0
trong trường hợp khi nhập vào ô C5 1 giá trị không có trong A:A thì
- Kết quả của chibi không đúng
- Code của haiyen17 báo lỗi.
Nhờ 2 bạn hoàn chỉnh code nghen.

Còn minh thì dùng công thức:
d5=IF(ISNA(MATCH(C5;A:A;));"Không có";MATCH(C5;A:A;))
d6=IF(ISNA(MATCH(C5;A:A;));"Không có";MATCH(C5;A:A;1))
Do bạn sử dụng Match() với tham số Match_Type là 1 nên khi dữ liệu không được sắp sếp tăng dần thì kết quả sẽ không đúng. Nếu công thức thì tôi làm thế này:
Mã:
=IF(COUNTIF(A:A,C5),MATCH(C5,A:A,),"Not Found")
Mã:
=IF(E5="Not Found",E5,E5+COUNTIF(A:A,C5)-1)
Với C5 là ô chứa giá trị tìm kiếm.
 
Upvote 0
Góp vui!!! hehe
Tìm vị trí của ô đầu tiên, ô cuối cùng có chứa dữ liệu tìm kiếm :

Row of Lastcell with lookup_value :
{=MAX(((A1:A100=lookup_value)*ROW(A1:A100)))} press Ctrl+Shif+Enter

Row of Firstcell with lookup_value :
{=SMALL(((A1:A100=lookup_value)*ROW(A1:A100));SUMPRODUCT(--NOT((A1:A100=lookup_value)))+1)} press Ctrl+Shif+Enter
 
Upvote 0
Góp vui!!! hehe
Tìm vị trí của ô đầu tiên, ô cuối cùng có chứa dữ liệu tìm kiếm :

Row of Lastcell with lookup_value :
{=MAX(((A1:A100=lookup_value)*ROW(A1:A100)))} press Ctrl+Shif+Enter

Row of Firstcell with lookup_value :
{=SMALL(((A1:A100=lookup_value)*ROW(A1:A100));SUMPRODUCT(--NOT((A1:A100=lookup_value)))+1)} press Ctrl+Shif+Enter
Nếu dữ liệu không theo một quy luật nào hết thì tôi làm như thế này:
Mã:
FirstRow=MATCH(C4,A1:A100,)
Mã:
LastRow=LOOKUP(2,1/(A1:A100=C4),ROW(A1:A100))
Hạn chế sử dụng công thức mảng và hàm mảng sẽ làm tăng tốc độ tính toán.
 
Upvote 0
Web KT

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

Back
Top Bottom