Tìm kiếm nhóm dòng dữ liệu với điều kiện khó!

  • Thread starter Thread starter pt_hcl
  • Ngày gửi Ngày gửi
Liên hệ QC

pt_hcl

Thành viên hoạt động
Tham gia
15/2/11
Bài viết
138
Được thích
2
Mình có một bài tập sau rất khó mong các bạn GPE giúp đỡ! Xin cảm ơn các bạn rất nhiều!
Cho 5000 dòng dữ liệu dữ liệu ở sheet1: Hãy Tìm 50 dòng ghép lại sao cho khi phân 50 dòng đó thành 5 nhóm lần lượt từ trên xuống dưới (mỗi nhóm có 10 dòng) chép sang sheet2. Kết quả ở sheet2 thỏa mãn điều kiện sau:
* Điều kiện 1:
- Xét các cột:
+ Xét cột thứ 1 (cột B): Trong 5 nhóm dòng phải có ít nhất 1 nhóm có cột dữ liệu rỗng.
+ Xét cột thứ 2 (cột C): Trong 5 nhóm dòng phải có ít nhất 1 nhóm có cột dữ liệu rỗng.
+ Xét cột thứ 3 (cột D): Trong 5 nhóm dòng phải có ít nhất 1 nhóm có cột dữ liệu rỗng.
+ ..v.v.v…Cho đến cột thứ n: Trong 5 nhóm dòng phải có ít nhất 1 nhóm có cột dữ liệu rỗng.
* Điều kiện 2:
- Kết quả lấy với cột thứ n là lớn nhất

Mình xin lấy thêm ví dụ minh họa cho kết quả ở sheet2! Mong các bạn quan tâm giúp đỡ! Thân ái! Cảm ơn nhiều!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Vậy mà trong ví dụ bạn lại lấy 50 dòng liên tục?

Chỉ cần thay vì dòng 50 bạn ghi là dòng 51 thì bạn & chúng ta khỏi mất 2 ngày qua rồi!

--=-- --=-- --=--
 
Chỉ cần thay vì dòng 50 bạn ghi là dòng 51 thì bạn & chúng ta khỏi mất 2 ngày qua rồi!

--=-- --=-- --=--
Híc! Đúng là lỗi mình nặng quá không biết tạ lỗi với các bạn như thế nào đây?
- Nếu lấy 50 dòng ở vị trí bất kỳ thì sẽ là trường hợp tổng quát nhất ạ! Thân ái!
 
Lần chỉnh sửa cuối:
Theo như ví dụ bạn đưa, mình có fương án sau, được không?

Mình tìm khoảng hơn 10 hàng có các ô trống ban đầu là liên tục & lớn nhứt. Nhờ macro mình có bảng thống kê sau:
Dòng Số | Sô Ô Trắng Đầu dòng |
4339|39
290|35
462|35
315|33
4611|32
4783|29
177|28
3299|27
1539|25
3808|25
4327|25
1632 | 24
. . . |. .

Như vậy ta tráo đổi chọn 10 trong 11 dòng này làm nhóm đầu tiên là OK chứ gì?

Nếu bạn chấp nhận fương thức này, ta sẽ theo fương fáp tương tự để tìm ra nhóm 10 hàng kế tiếp có các ô trống cực đại kể từ cột 26 trở đi (Tất nhiên không kể các hàng đã liệt kê).

(hờ tin từ bạn! --=0
 
Mình tìm khoảng hơn 10 hàng có các ô trống ban đầu là liên tục & lớn nhứt. Nhờ macro mình có bảng thống kê sau:
Dòng Số | Sô Ô Trắng Đầu dòng |
4339|39
290|35
462|35
315|33
4611|32
4783|29
177|28
3299|27
1539|25
3808|25
4327|25
1632 | 24
. . . |. .

Như vậy ta tráo đổi chọn 10 trong 11 dòng này làm nhóm đầu tiên là OK chứ gì?

Nếu bạn chấp nhận fương thức này, ta sẽ theo fương fáp tương tự để tìm ra nhóm 10 hàng kế tiếp có các ô trống cực đại kể từ cột 26 trở đi (Tất nhiên không kể các hàng đã liệt kê).

(hờ tin từ bạn! --=0

Vâng! Cảm ơn bạn SA_DQ rất nhiều! Nhưng theo mình nghĩ cách đó có gì đó không ổn ạ? Mình thử lấy ví dụ như thế này nhé:
- Giả sử theo cách của bạn mình có:
+ Nhóm 1: là 10 hàng có ô trống ban đầu liên tục max trong bảng dữ liệu là 10 đi ạ (giả sử như vậy)! Và các cột tiếp theo đều có dữ liệu
+ Nhóm 2: là 10 hàng tiếp theo có ô trống max liên tục từ cột thứ 11 trở đi cũng là 10 ạ! Và các cột tiếp theo đều có dữ liệu
+ Nhóm 3: là 10 hàng tiếp theo có ô trống max liên tục từ cột thứ 21 trở đi cũng là 10! Và các cột tiếp theo đều có dữ liệu
+ Nhóm 4: là 10 hàng tiếp theo có ô trống max liên tục từ cột thứ 31 trở đi cũng là 10! Và các cột tiếp theo đều có dữ liệu
+ Nhóm 5: là 10 hàng tiếp theo có ô trống max liên tục từ cột thứ 41 trở đi cũng là 10! Và các cột tiếp theo đều có dữ liệu
=> 5 nhóm sẽ có số cột ban đầu liên tục mà có cột trống trong 1 nhóm sẽ là 50 cột! ( n=50)
- giả sử trong bảng dữ liệu còn có trường hợp sau mà theo cách của bạn sẽ bỏ qua:
+ Nhóm 1: là 10 hàng có ô trống ban đầu liên tục là 5 đi ạ (giả sử như vậy)! Và lại có 9 ô trống liên tục từ cột thứ 22 trở đi.
+ Nhóm 2: là 10 hàng tiếp theo có ô trống liên tục từ cột thứ 6 cũng là 5 ạ! Và lại có 9 ô trống liên tục từ cột thứ 31 trở đi.
+ Nhóm 3: là 10 hàng tiếp theo có ô trống liên tục từ cột thứ 11 cũng là 5! Và lại có 9 ô trống liên tục từ cột thứ 40 trở đi.
+ Nhóm 4: là 10 hàng tiếp theo có ô trống liên tục từ cột thứ 16 cũng là 5! Và lại có 9 ô trống liên tục từ cột thứ 49 trở đi.
+ Nhóm 5: là 10 hàng tiếp theo có ô trống liên tục từ cột thứ 21 cũng là 5! Và lại có 9 ô trống liên tục từ cột thứ 58 trở đi
=> 5 nhóm này có số cột ban đầu liên tục mà có cột trống trong 1 nhóm sẽ là 58 cột trở lên! (n>58 nhiều hơn trường hợp trên)
- híc, không biết mình nghĩ như vậy có đúng không? Mong các bạn xem xét? Thân ái! Xin cảm ơn các bạn nhiều?
 
Lần chỉnh sửa cuối:
Mình đề xuất bơi từ Nga sang Mĩ, bạn lại bảo fải bơi từ VN sang Mĩ. Vô fương!

Và đây là đề nghị bơi từ Pháp sang Anh:

Dùng macro MaxBlanksInRows mà chúng ta đã có, ta chọn lọc lấy cỡ 100 dòng có chỉ số này >= 25

Chỉ từ các dòng này ta sẽ thực hiện nhiệm vụ của topic này:OK ?!?
 
Và đây là đề nghị bơi từ Pháp sang Anh:

Dùng macro MaxBlanksInRows mà chúng ta đã có, ta chọn lọc lấy cỡ 100 dòng có chỉ số này >= 25

Chỉ từ các dòng này ta sẽ thực hiện nhiệm vụ của topic này:OK ?!?

- Vâng! Thật sự rất thích cách diễn giải của bạn SA_DQ! Cảm ơn bạn nhiều!
Hì! Đúng là bơi từ Việt Nam sang Mĩ là khó hơn là từ Nga sang Mĩ! Híc, nhưng phương án bạn SA_DQ đưa ra là bơi từ Pháp sang Anh hình như lại hơi có trở ngại thì phải:
- Giả dụ: trong 100 dòng có chỉ số >=25 chẳng hạn (dùng macro MaxBlanksInRows đã có: tìm số ô trống lớn nhất có trong dòng) vẫn có trường hợp cả 100 dòng đó đều có ô trống max trong dòng >=25 nhưng vẫn có dữ liệu ở đầu dòng?
- Không biết mình phải làm sao đây?
 
bơi từ Pháp sang Anh hình như lại hơi có trở ngại thì phải:
- Giả dụ: trong 100 dòng có chỉ số >=25 chẳng hạn (. . . ) vẫn có trường hợp cả 100 dòng đó đều có ô trống max trong dòng >=25 nhưng vẫn có dữ liệu ở đầu dòng? Không biết mình phải làm sao đây?
Trong (99-3) dòng có ô trống MAX trong dòng >24 có 11 dòng có các ô trống MAX ngay từ đầu dòng, như bảng liệt kê sau:
| Chỉ số dòng | Ô trống MAX từ đầu dòng 1 |4339|39
|290|35
3 |462|35
|315|33
5 |4611|32
|4783|29
7 |177|28
|3299|27
9 |1539|25
|3808|25
11 |4327|25
Bạn có í tưởng gì với thống kê này không?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Trong (99-3) dòng có ô trống MAX trong dòng >24 có 11 dòng có các ô trống MAX ngay từ đầu dòng, như bảng liệt kê sau:
Bạn có í tưởng gì với thống kê này không?
Cám ơn Bác Sa nhiều, em rất khâm phục sự kiên nhẫn của Bác về mấy loạt bài này.
Nếu biết mục đích sử dụng thì may ra => đoán được ý đồ mà triển khai. Chớ hôm nay hỏi cái này mai cái khác và số liệu quá lớn.
Em chào thua đó.
 
Trong (99-3) dòng có ô trống MAX trong dòng >24 có 11 dòng có các ô trống MAX ngay từ đầu dòng, như bảng liệt kê sau:
| Chỉ số dòng | Ô trống MAX từ đầu dòng 1 |4339|39
|290|35
3 |462|35
|315|33
5 |4611|32
|4783|29
7 |177|28
|3299|27
9 |1539|25
|3808|25
11 |4327|25
Bạn có í tưởng gì với thống kê này không?

Vâng! Đây là vấn đề khó mình cũng không có í tưởng gì có thể đưa ra! Có lẽ chỉ biết trông chờ vào các bạn!
- Cảm ơn các bạn nhiều! có lẽ vấn đề này mình đành suy nghĩ thêm xem có phương án nào khả thi không? Một lần nữa xin cảm ơn các bạn! Chúc các bạn cuối tuần vui vẻ! Thân ái!
 
Chào GPE, ngày cuối tuần thắng lợi!
- Mình đã nghĩ ra một phương thức khác để giải quyết được bài toán trên và có thể giải được cả trường hợp tổng quát nữa.
Mong các bạn giúp đỡ trường sau, nếu vấn đề này thực hiện được thì trường hợp trên có thể coi như đã giải quyết xong ạ:
Đếm số lần các bước nhảy từ một vị trí ô ban đầu đến các ô trong dòng thỏa mãn điều kiện sau:
* Các ô trong bước nhảy phải cùng tính chất với ô ban đầu của bước nhảy:
- Nếu ô ban đầu có dữ liệu thì các ô trong cùng bước nhảy phải có dữ liệu mới thỏa mãn.
- Nếu ô ban đầu không có dữ liệu thì các ô trong cùng bước nhảy phải không có dữ liệu mới thỏa mãn.
- Nếu bước nhảy cuối cùng ra khỏi phạm vi của dòng dữ liệu vẫn tính là thỏa mãn.
- Nếu ô đầu tiên của bước nhảy ở giữa dòng thì tính cả nhảy tiến và nhảy lùi
* Đếm số lần nhảy lớn nhất.
- Ví dụ: Theo file mình gửi kèm: Số lần nhảy lớn nhất của bước nhảy 5 của 3 dòng dữ liệu đầu tiên là 19; 0 và 3 (với cột B là địa chỉ cột vị trí để xét vị trí ô ban đầu của bước nhảy)
– kết quả dán vào cuối dòng (cách ô cuối cùng của dữ liệu một cột: cột KQ)
p/s:- Nếu có 2 bảng InputBox:
+ Bảng InputBox 1: Nhập địa chỉ cột để xét vị trí ô ban đầu của bước nhảy
+ Bảng InputBox 2: Nhập giá trị của bước nhảy => sau đó tìm số lần nhảy max của bước nhảy.
* Khi bài này thực hiện được thì vấn đề 5 nhóm dòng có ít nhất một cột rỗng mình sẽ làm như sau ạ:
+ Nhóm 1: Chọn ra 10 dòng có ô đầu tiên là ô trống có bước nhảy 5 với số lần nhảy lớn nhất.
+ Nhóm 2: Chọn ra 10 dòng có ô thứ 2 là ô trống có bước nhảy 5 với số lần nhảy lớn nhất.
+ Nhóm 3: Chọn ra 10 dòng có ô thứ 3 là ô trống có bước nhảy 5 với số lần nhảy lớn nhất.
+ Nhóm 4: Chọn ra 10 dòng có ô thứ 4 là ô trống có bước nhảy 5 với số lần nhảy lớn nhất.
+ Nhóm 5: Chọn ra 10 dòng có ô thứ 5 là ô trống có bước nhảy 5 với số lần nhảy lớn nhất.
- Sau đó ghép 5 nhóm vào với nhau!
- Hì, không biết phương thức mình đưa ra có được không?
- Rất mong các bạn xem giúp! Cảm ơn các bạn nhiều! Thân ái!
 

File đính kèm

Sau hơn 3 ngày & 2 lần nhậu sương sương đê:. . . .

Xem ở trang KQ đó nha, sau khoảng 3 '' chạy macro
 

File đính kèm

Xem ở trang KQ đó nha, sau khoảng 3 '' chạy macro
Ái chà chà, cái bác Sa này, nhậu cũng không "zủ" mà làm cũng hông "zủ", nghỉ chơi bác Sa ra
Góp với bạn một code
Mã:
Public Sub HuHoaThoi()
Dim Vung, I, J, Mg(1 To 5000, 1 To 2), MgB(1 To 10, 1 To 1), MgA(1 To 10, 1 To 101), VungDo, Ws, VungDem, Cu, DemTrong, Dem, Vong, M, d, sCot, K, kK, Kqua
Set Ws = Sheets("sheet1"):   Set d = CreateObject("scripting.dictionary")
Vung = Ws.[a4:cw5003].Value: Vong = 1
    For M = 0 To 4
        For I = 1 To 5000
            For J = Vong + 1 To 101
                If Vung(I, J) = vbNullString Then
                    Dem = Dem + 1
                Else
                    Mg(I, 1) = I: Mg(I, 2) = Dem
                    Exit For
                End If
            Next J
                Dem = 0
        Next I
                Ws.[cy4].Resize(5000, 2) = Mg
                    With Ws.Range("CY4:CZ5003")
                        .Sort Ws.[cz4], 2
                    End With
                Set VungDo = Ws.[cy4:cy5003]
                Cu = 1: sCot = 101
                    While Cu < 11
                        If Not d.exists(VungDo(Cu, 1)) Then
                            d.Add VungDo(Cu, 1), Nothing
                            MgB(Cu, 1) = VungDo(Cu)
                            sCot = Application.WorksheetFunction.Min(sCot, VungDo(Cu).Offset(, 1))
                            Cu = Cu + 1
                        End If
                    Wend
                            Ws.[db4].Resize(Cu - 1, 1) = MgB: Vong = Vong + sCot
                            For K = 1 To 10
                                For kK = 1 To 101
                                    MgA(K, kK) = Vung(VungDo(K), kK)
                                Next kK
                            Next K
                    Sheets("sheet3").Range("A" & M * 10 + 4).Resize(10, 101) = MgA
    Next M
    Set VungDem = Sheets("sheet3").Range("b4:cw53")
        For I = 1 To 100
            For J = 1 To 41 Step 10
                If Application.WorksheetFunction.CountA(VungDem(J, I).Resize(10)) = 0 Then
                    Kqua = Kqua + 1
                    Exit For
                End If
            Next J
        Next I
        MsgBox " Tui kiem duoc: " & Kqua & "  dòng thoa dieu kien; dau cái dau wa"
End Sub
Mình làm trong file đầu tiên (Nhom50dong) của bạn nhé, đứng ở sheet3 chạy code này, kết quả từ [A4] (bạn chép 3 dòng tiêu đề sang sheet3)
Bài này làm hú họa thôi chứ chẳng có cách thức hay phương án gì ra hồn cả
Không gởi file vì hao tài nguyên quá, cứ thấy bài của bạn là lại đau đầu. Híc
Thân
 
Vâng! Cảm ơn các bạn SA_DQ và bạn Concogia rất nhiều ạ! Tối nay mình sẽ test thử các trường hợp, hi vọng các phương án đưa ra thỏa mãn các trường hợp! Một lần nữa xin cảm ơn các bạn và cảm ơn GPE.
p/s: Mong các bạn xem giúp đỡ trường hợp phương thức ở bài (#13) mình đưa ra với ạ! Mong chờ tin các bạn! Thân ái!
 
Vâng! Cảm ơn các bạn SA_DQ và bạn Concogia rất nhiều ạ! Tối nay mình sẽ test thử các trường hợp, hi vọng các phương án đưa ra thỏa mãn các trường hợp! Một lần nữa xin cảm ơn các bạn và cảm ơn GPE.
p/s: Mong các bạn xem giúp đỡ trường hợp phương thức ở bài (#13) mình đưa ra với ạ! Mong chờ tin các bạn! Thân ái!
Ngoài lề 1 chút: File của bạn tôi thấy cả "rừng" số, hổng biết nó dùng để làm cái gì vậy?
(Đôi khi biết được công việc cụ thể sẽ dễ làm hơn)
 
Về bài #13 & #14

(|) Bài 13: Bạn hãy lấy dòng mang số 1 & dòng mang số 4 nêu kết quả cụ thể từng bước nhảy thì dễ hiểu hơn.
Có thể mọi người chưa quán triệt được í tưởng của bạn. . .

(|) Macro ở #14 ta có thể tinh chỉnh gọn gàng lại như sau:
PHP:
Sub Tim11DongCoOTrongDauCucDai()
 Dim KQ As Worksheet, nRg As Range, Cls As Range, Rng As Range, bRng As Range
 Dim eCol As Byte, eRw As Long, Max_ As Byte, jJ As Long, L5 As Byte, ORg As Byte
 Dim MyAdd As String:                           Dim Timer_ As Double
 
 Set KQ = ThisWorkbook.Worksheets("KQ"):        Timer_ = Timer
 Sheets("S0").Select:                           KQ.Cells.ClearContents
 Sheets("Luu").Cells.Copy [A1]
 Application.ScreenUpdating = False
 
 For L5 = 1 To 5
    KQ.[A65500].End(xlUp).Offset(IIf(L5 = 1, 1, 2)).Value = "Nhom " & L5
    Set Rng = [B1].CurrentRegion:               eCol = Rng.Columns.Count
    Cells(3, eCol + 1).Value = "GPE":           eRw = Rng.Rows.Count
    For Each Cls In Range([a4], [A65500].End(xlUp))
        If Cls.Offset(, 1).Value = "" Then
            Set bRng = Range(Cls.Offset(, 1), Cls.End(xlToRight))
            ORg = bRng.Cells.Count:             If ORg > 200 Then ORg = 99 '*'
            Cells(Cls.Row, eCol + 1).Value = ORg
        End If
    Next Cls
    [A3].Resize(eRw, eCol + 1).Sort Key1:=Cells(4, eCol + 1), Order1:=xlDescending, Key2:=[a4], _
        Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
    Max_ = Application.WorksheetFunction.Large(Cells(3, eCol + 1).Resize(eRw), IIf(L5 < 5, 11, 97))
    Set Rng = Nothing:                          Set bRng = Nothing
    For jJ = 4 To 359       '*'
        If Cells(jJ, eCol + 1).Value < Max_ Then
            KQ.[A65500].End(xlUp).Offset(, 1).Value = Timer - Timer_
            If L5 = 1 Then
                Range([a4], Cells(jJ - 1, eCol)).Copy Destination:=KQ.[A65500].End(xlUp).Offset(1)
            Else
                Range([a4], Cells(jJ - 1, 1)).Copy Destination:=KQ.[A65500].End(xlUp).Offset(1)
            End If
            If L5 < 5 Then Columns(eCol + 1).Delete
            [B1].Resize(, Max_ - 1).EntireColumn.Delete
            Range([a4], Cells(jJ - 1, 1)).EntireRow.Delete
            Exit For
        End If
    Next jJ
 Next L5
 KQ.[A65500].End(xlUp).Offset(, 1).Value = Timer - Timer_
 KQ.Select:                                     Set KQ = Sheets("Luu")
 Set Rng = KQ.Range(KQ.[A3], KQ.[A65500].End(xlUp))
 Set nRg = Range([A2].Resize(60).Find("Nhom 2").Offset(1), [A65500].End(xlUp))
 For Each Cls In nRg
    Set bRng = Rng.Find(Cls.Value)
    If Not bRng Is Nothing Then bRng.EntireRow.Copy Destination:=Cls
 Next Cls
 [A65500].End(xlUp).Offset(1, 1).Value = Timer - Timer_
End Sub

Thân ái!
 
(|) Bài 13: Bạn hãy lấy dòng mang số 1 & dòng mang số 4 nêu kết quả cụ thể từng bước nhảy thì dễ hiểu hơn.
Có thể mọi người chưa quán triệt được í tưởng của bạn. . .

(|) Macro ở #14 ta có thể tinh chỉnh gọn gàng lại như sau:
PHP:
Sub Tim11DongCoOTrongDauCucDai()
Dim KQ As Worksheet, nRg As Range, Cls As Range, Rng As Range, bRng As Range
Dim eCol As Byte, eRw As Long, Max_ As Byte, jJ As Long, L5 As Byte, ORg As Byte
Dim MyAdd As String: Dim Timer_ As Double
 
Set KQ = ThisWorkbook.Worksheets("KQ"): Timer_ = Timer
Sheets("S0").Select: KQ.Cells.ClearContents
Sheets("Luu").Cells.Copy [A1]
Application.ScreenUpdating = False
 
For L5 = 1 To 5
KQ.[A65500].End(xlUp).Offset(IIf(L5 = 1, 1, 2)).Value = "Nhom " & L5
Set Rng = [B1].CurrentRegion: eCol = Rng.Columns.Count
Cells(3, eCol + 1).Value = "GPE": eRw = Rng.Rows.Count
For Each Cls In Range([a4], [A65500].End(xlUp))
If Cls.Offset(, 1).Value = "" Then
Set bRng = Range(Cls.Offset(, 1), Cls.End(xlToRight))
ORg = bRng.Cells.Count: If ORg > 200 Then ORg = 99 '*'
Cells(Cls.Row, eCol + 1).Value = ORg
End If
Next Cls
[A3].Resize(eRw, eCol + 1).Sort Key1:=Cells(4, eCol + 1), Order1:=xlDescending, Key2:=[a4], _
Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
Max_ = Application.WorksheetFunction.Large(Cells(3, eCol + 1).Resize(eRw), IIf(L5 < 5, 11, 97))
Set Rng = Nothing: Set bRng = Nothing
For jJ = 4 To 359 '*'
If Cells(jJ, eCol + 1).Value < Max_ Then
KQ.[A65500].End(xlUp).Offset(, 1).Value = Timer - Timer_
If L5 = 1 Then
Range([a4], Cells(jJ - 1, eCol)).Copy Destination:=KQ.[A65500].End(xlUp).Offset(1)
Else
Range([a4], Cells(jJ - 1, 1)).Copy Destination:=KQ.[A65500].End(xlUp).Offset(1)
End If
If L5 < 5 Then Columns(eCol + 1).Delete
[B1].Resize(, Max_ - 1).EntireColumn.Delete
Range([a4], Cells(jJ - 1, 1)).EntireRow.Delete
Exit For
End If
Next jJ
Next L5
KQ.[A65500].End(xlUp).Offset(, 1).Value = Timer - Timer_
KQ.Select: Set KQ = Sheets("Luu")
Set Rng = KQ.Range(KQ.[A3], KQ.[A65500].End(xlUp))
Set nRg = Range([A2].Resize(60).Find("Nhom 2").Offset(1), [A65500].End(xlUp))
For Each Cls In nRg
Set bRng = Rng.Find(Cls.Value)
If Not bRng Is Nothing Then bRng.EntireRow.Copy Destination:=Cls
Next Cls
[A65500].End(xlUp).Offset(1, 1).Value = Timer - Timer_
End Sub

Thân ái!
Vâng ạ! Cảm ơn bạn rất nhiều!
- Về bài #13: Mình xin lấy thêm ví dụ của 1 trường hợp bước nhảy ở dòng mang số 1; 2; 3 và số 4; 5 như sau: Điều kiện là các ô trong cùng bước nhảy của dòng phải cùng tính chất (cùng có dữ liệu hoặc không cùng có dữ liệu với ô ban đầu của bước nhảy) là thỏa mãn.
VD1: Xét địa chỉ ô đầu tiên của bước nhảy là ở cột B với bước nhảy là 5:
- Dòng mang số 1: Ô đầu tiên của bước nhảy là [B4] có dữ liệu: lần nhảy 1 đến ô [G4] có dữ liệu (thỏa mãn); lần nhảy 2 đến ô [L4] có dữ liệu (thỏa mãn); lần nhảy 3 đến ô [Q4] có dữ liệu (thỏa mãn);..v.v.; lần nhảy 19 đến ô [CS4] có dữ liệu (thỏa mãn): vậy số lần nhảy max của bước nhảy này là 19: kết quả đếm được dán vào cột KQ ở cuối dòng.
- Dòng mang số 2: Ô đầu tiên của bước nhảy là [B5] không có dữ liệu: lần nhảy 1 đến ô [G5] có dữ liệu (không thỏa mãn): vậy số lần nhảy max của bước nhảy này là 0: kết quả đếm được dán vào cột KQ ở cuối dòng.
- Dòng mang số 3: Ô đầu tiên của bước nhảy là [B6] có dữ liệu: lần nhảy 1 đến ô [G6] có dữ liệu (thỏa mãn); lần nhảy 2 đến ô [L6] có dữ liệu (thỏa mãn); lần nhảy 3 đến ô [Q6] có dữ liệu (thỏa mãn); lần nhảy 4 đến ô [V6] không có dữ liệu (không thỏa mãn): vậy số lần nhảy max của bước nhảy là 3: kết quả đếm được dán vào cột KQ ở cuối dòng.
- Dòng mang số 4: Ô đầu tiên của bước nhảy là [B7] có dữ liệu: lần nhảy 1 đến ô [G7] không có dữ liệu (không thỏa mãn): vậy số lần nhảy max của bước nhảy là 0: kết quả đếm được dán vào cột KQ ở cuối dòng.
- Dòng mang số 5: Ô đầu tiên của bước nhảy là [B8] không có dữ liệu: lần nhảy 1 đến ô [G8] không dó dữ liệu (thỏa mãn); lần nhảy 2 đến ô [L8] không có dữ liệu (thỏa mãn);..v.v.; lần nhảy 5 đến ô [AA8] không có dữ liệu (thỏa mãn); lần nhảy 6 đến ô [AF8] có dữ liệu (không thỏa mãn): vậy số lần nhảy max của bước nhảy là 5: Kết quả dán đếm được dán vào cột KQ ở cuối dòng.
-..v.v.. với các dòng khác đếm tương tự như vậy ạ.
- Bảng InputBox1: nhập địa chỉ ô đầu tiên của bước nhảy là: cột B
- Bảng InputBox2: nhập giá trị của bước nhảy là 5: sau đó thực hiện đếm số lần nhảy max của bước nhảy.
* trường hợp tổng quát:
- Bảng InputBox1: có thể nhập địa chỉ ô đầu tiên của bước nhảy là cột bất kì
- Bảng InputBox2: có thể nhập giá trị của bước nhảy bất kì: sau đó đếm số lần nhảy max của bước nhảy
+ ví dụ: . có thể nhập địa chỉ ô đầu tiên của bước nhảy là cột G chẳng hạn vào bảng InputBox1. Nhập giá trị của bước nhảy là 5 vào bảng InputBox2: sau đó thực hiện đếm số lần nhảy max của bước nhảy. Trường hợp này kết quả ở dòng mang số 1; 2; 3; 4; và 5 vấn giống với kết quả ở ví dụ cụ thể như trên. Số lần nhảy max = số lần nhảy max tiến + số lần nhảy max lùi ( Đếm cả nhảy tiến và nhảy lùi)
....
- Trên đây là một vài ý nhỏ của mình mong các bạn xem xét! Cảm ơn các bạn! Chúc ngày mới tốt lành! Thân ái!
 
Nhiệm vụ mà bạn đề ra ở #13 là không khó; Nhưng sử dụng nó tiếp theo thì mình vẫn nghi ngờ & lấn cấn;

Vậy chờ thời gian nữa vậy, chịu khó nha!
 
Web KT

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

Back
Top Bottom