Cách tìm chuỗi giống nhau nhiều nhất trong một cột (2 người xem)

Liên hệ QC

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

manhtidus

Thành viên mới
Tham gia
14/12/17
Bài viết
4
Được thích
0
Em có bài tập phải tìm chuỗi giống nhau nhiều nhất trong một cột.
Ví dụ như trong hình là e cần tìm được chuỗi CAR liên tục nhiều nhất bằng 5, và BIKE nhiều nhất bằng 2 trong cột B.
Nhờ mọi người giúp em với ạ. Em cảm ơn nhiều :.,
Capture.PNG
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem thử xem đúng không nhé !
Mã:
Sub Help()
Dim i, LastRow As Long
Dim a, b As Long
a = 1
b = 1
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Row
For i = 2 To LastRow
    If Range("B" & i) = Range("E2") And Range("B" & i) = Range("B" & i - 1) Then
        a = a + 1
    End If
    If Range("B" & i) <> Range("E2") Then
        If a > b Then b = a
        a = 1
    End If
Next i
If a > b Then b = a
[G2] = b
End Sub
 

File đính kèm

Dim i, LastRow As Long
Dim a, b As Long
Khai báo vậy thì biến i, a là variant.
Range("B" & i) = Range("E2")
Nên viết tường minh lấy thuộc tính nào của đối tượng Range.
Nên thống nhất một kiểu gọi Range. Lúc thì dùng Range(), lúc thì dùng [ ].
 
Bạn xem thử xem đúng không nhé !
Mã:
Sub Help()
Dim i, LastRow As Long
Dim a, b As Long
a = 1
b = 1
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Row
For i = 2 To LastRow
    If Range("B" & i) = Range("E2") And Range("B" & i) = Range("B" & i - 1) Then
        a = a + 1
    End If
    If Range("B" & i) <> Range("E2") Then
        If a > b Then b = a
        a = 1
    End If
Next i
If a > b Then b = a
[G2] = b
End Sub
Làm biếng gõ thì cứ (không khuyến khích hihih)
Dim a&, b&, i&, LastRow&
tương đương với Dim a As Long, b As Long, i As Long, LastRow As Long
Dim Tem$ tương đương với Dim Tem as String
 
Hình như bài này có thể giải quyết được bằng công thức thường thì phải (lâu quá quên rồi)
 
Nếu tôi không nhầm lẫn thì thế này ...

B2
Mã:
=MAX(FREQUENCY(IF(B$4:B$500<>"CAR","",ROW(B$4:B$500)),IF(B$4:B$500="CAR","",ROW(B$4:B$500))))

B3
Mã:
=MAX(FREQUENCY(IF(B$4:B$500<>"BIKE","",ROW(B$4:B$500)),IF(B$4:B$500="BIKE","",ROW(B$4:B$500))))

Cả 2 công thức kết thúc bằng Ctrl + Shift + Enter
 
Làm biếng gõ thì cứ (không khuyến khích hihih)
Dim a&, b&, i&, LastRow&
tương đương với Dim a As Long, b As Long, i As Long, LastRow As Long
Dim Tem$ tương đương với Dim Tem as String
Tôi không bao giờ dùng đầu để nhớ những cái vụn vặt như thế này. Mà As Long thì mình chả phải lục lọi trong ̣đầu, còn những người không biết thì vẫn hiểu.
Mấy trò kiểu này không chơi. Chúng chỉ làm "tối" code thôi. Cũng như kiểu End(3), mang = Range("A3:C9"). Cứ End(xlUp) và mang = Range("A3:C9").Value, cứ tường minh thôi.

Code mà toàn 3, 5, 2000 thì rất khó đọc.
 
Tôi không bao giờ dùng đầu để nhớ những cái vụn vặt như thế này. Mà As Long thì mình chả phải lục lọi trong ̣đầu, còn những người không biết thì vẫn hiểu.
Mấy trò kiểu này không chơi. Chúng chỉ làm "tối" code thôi. Cũng như kiểu End(3), mang = Range("A3:C9"). Cứ End(xlUp) và mang = Range("A3:C9").Value, cứ tường minh thôi.

Code mà toàn 3, 5, 2000 thì rất khó đọc.
hiihihi thì em nói rồi "không khuyến khích hihih"
 
Lập trình mà còn nói chuyện làm biếng gõ. Bó tay.
Chuyện tiết kiệm "gõ" chỉ xảy ra 40 năm về trước (trước thập niên 1980). Lúc đó hầu hết các máy, dòng còn bị giới hạn ở 80 ký tự (kể cả các bấm lỗ).

....
Code mà toàn 3, 5, 2000 thì rất khó đọc.
Những con số đó trong nghề lập trình được liệt vào "magic numbers".
Bất cứ tay lập trình chuyên nghiệp nào cũng nhìn nhận dùng nhiều "magic numbers" là "bad practices" (thói quen xấu)
 
Web KT

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

Back
Top Bottom