Tìm bước nhảy thoả mãn điều kiện

Liên hệ QC
bài nầy theo mình dùng công thức là không khả thi, chỉ có thể dùng code VBA thôi
bấm ngôi sao chạy code, nếu có thông báo gì thì theo đó khai báo cho phép chạy macro
Bài này CT làm được, hinh như anh có hiểu lầm chỗ nào thì phải, BN1 và BN2 không thỏa điều kiện, sao của anh có kế quả, anh xem bài #16,18 !
 
Cảm ơn bạn. Mình xem thì bước nhảy 1 là không thoả mãn: vì lần nhảy thứ 8 đến ô V2, và 4 ô tính từ V2 trở đi là ô trống khác ô dữ liệu ban đầu => không thoả mãn.
Bạn thử lạiCT tại B2,B3:
PHP:
B2=IF(SUMPRODUCT((COUNTIF(OFFSET($M$2,,ROW($1:$47),,4),"<>")>0)*(MOD(ROW($1:$47),COLUMN(A1))=0))=INT(47/COLUMN(A1)),"Yes","No")
B3=IF(SUMPRODUCT((COUNTIF(OFFSET($M$2,,ROW($1:$47),,4),"")>0)*(MOD(ROW($1:$47),COLUMN(A2))=0))=INT(47/COLUMN(A2)),"Yes","No")
Rồi fill sang phải!!!
 

File đính kèm

  • TIMBUOCNHAY (1).xlsx
    13.3 KB · Đọc: 3
mình hiểu như thế nầy trong kết quả của file
Theo em hiểu khi trao đổi với bạn chủ thớt, ví dụ BN1 tức tại vị trí L2, nó sẽ nhảy
lần 1 qua ô M2, từ ô M2 nó sẽ xét bốn ô tiếp theo là M2,N2,O2,P2 xem có ô nào giống ô L2 không, nếu có thì nó sẽ nhảy
lần 2 qua ô N2 từ ô N2 nó sẽ xét bốn ô tiếp theo là N2,O2,P2,Q2 xem có ô nào giống ô L2 không, nếu có thì nó sẽ nhảy
......
Nó sẽ nhảy tới ô cuối cùng nếu thỏa hết thì xem như BN1 thỏa đk

Tương tự tới BN2, từ ô L2 nó sẽ nhảy
lần 1 qua ô N2, từ ô N2 nó sẽ xét bốn ô tiếp theo là N2,O2,P2,Q2 xem có ô nào giống ô L2 không, nếu có thì nó sẽ nhảy
lần 2 qua ô P2, từ ô P2 nó sẽ xét bốn ô tiếp theo là P2,Q2,R2,S2 xem có ô nào giống ô L2 không, nếu có thì nó sẽ nhảy
.....
Nó sẽ nhảy tới ô cuối cùng nếu thỏa hết thì xem như BN2 thỏa đk, trong trường hợp này nó không thỏa đk vì khi nó nhảy lần 4
tức là các ô T2,U2,V2,W2 đều là rỗng <>L2, nên BN2 không thỏa đk
tương tự với các bước nhảy khác!!!
 
mình hiểu như thế nầy trong kết quả của file
Cách trình bày này của bạn hay quá. Mình rất thích, rõ ràng và chi tiết!
Trong code này là tìm bước nhảy thoả mãn điều kiện với 4 ô có ít nhất 1 ô cùng tính chất với ô đầu:
Sub BuocNhay()Dim Darr(), Arr(), Cot As Integer, n As Integer, k As Integer, j As Integer, m As Integer
ReDim Arr(1 To 1, 1 To 10)
Application.ScreenUpdating = False
Darr = Range("M2:BJ2").Value
Cot = UBound(Darr, 2)
For n = 1 To Int(Cot / 2)
If m > 0 Then
For j = 1 To m
If Int(n / Arr(1, j)) = n / Arr(1, j) Then GoTo Tiep
Next j
End If
For k = 1 To Int(Cot / n)
dk = 0
For j = 1 To 4
If n * k + j - 1 > Cot Then GoTo Het
If Darr(1, n * k + j - 1) = "L" Then dk = dk + 1
Next j
If dk = 0 Or dk = 4 Then GoTo Tiep
Next k
Het:
m = m + 1
Arr(1, m) = n
If m = 10 Then Exit For
Tiep:
Next n
Range("L5:BJ24").Clear
For n = 1 To m
Cells(3 + n * 2, 12) = Arr(1, n)
For k = 1 To Int(Cot / Arr(1, n))

For j = 1 To 4
If Arr(1, n) * k + j - 1 > Cot Then Exit For
Cells(4 + n * 2, Arr(1, n) * k + j + 11) = Cells(2, Arr(1, n) * k + j + 11)
Cells(4 + n * 2, Arr(1, n) * k + j + 11).Borders.LineStyle = 1
Next j
For j = 1 To Cot
Cells(3 + n * 2, j + 12) = (j - 1) Mod Arr(1, n) + 1
Next j
Next k
Next n
Range("B2:K2") = Arr
Range("L5:BJ24").HorizontalAlignment = xlCenter
Application.ScreenUpdating = True
End Sub
Nếu mình muốn điều chỉnh tìm bước nhảy thoả mãn điều kiện với 3 ô có ít nhất 1 ô cùng tính chất với ô đầu thì sẽ điều chỉnh thông số nào, bạn có thể chỉ giúp được không?
- Xin cảm ơn bạn và bạn leoheocon rất nhiều. Cảm ơn GPE!
 
Cách trình bày này của bạn hay quá. Mình rất thích, rõ ràng và chi tiết!
Trong code này là tìm bước nhảy thoả mãn điều kiện với 4 ô có ít nhất 1 ô cùng tính chất với ô đầu:

Nếu mình muốn điều chỉnh tìm bước nhảy thoả mãn điều kiện với 3 ô có ít nhất 1 ô cùng tính chất với ô đầu thì sẽ điều chỉnh thông số nào, bạn có thể chỉ giúp được không?
- Xin cảm ơn bạn và bạn leoheocon rất nhiều. Cảm ơn GPE!
code của mình là tìm các bước nhảy như 5, 7... với điều kiện:
ví dụ với bước nhảy 5 chẳng hạn, thì mổi lần nhảy 5 cột, và 4 cột liên tiếp có ít nhất 1 ô thỏa tính chất và có ít nhất 1 ô không thỏa tính chất
nếu chỉ tìm có ít nhất 1 ô thỏa tính chất thì sẽ viết lại code khác
trong code, bạn khai báo số cột xét tính chất theo yêu cầu
 

File đính kèm

  • TIMBUOCNHAY (1).xlsb
    21.6 KB · Đọc: 4
code của mình là tìm các bước nhảy như 5, 7... với điều kiện:
ví dụ với bước nhảy 5 chẳng hạn, thì mổi lần nhảy 5 cột, và 4 cột liên tiếp có ít nhất 1 ô thỏa tính chất và có ít nhất 1 ô không thỏa tính chất
nếu chỉ tìm có ít nhất 1 ô thỏa tính chất thì sẽ viết lại code khác
trong code, bạn khai báo số cột xét tính chất theo yêu cầu
Đúng rồi bạn ạ. Trong code của bạn mình kiểm tra thì trong 4 ô kiểm tra đều thoả mãn cả 2 điều kiện. Mình cũng sẽ dùng cả trường hợp này.
- Nếu bạn viết thêm code thoả mãn theo từng điều kiện thì hay quá, 1 code tìm có ít nhất 1 ô thoả tính chất và 1 code khác tìm có ít nhất 1 ô không thoả tính chất thì tuyệt vời.
(Bạn chỉ giúp cho mình thêm chỗ điều chỉnh code để mình làm thêm với trường hợp là 3 ô kiểm tra với bạn nhé)
- Xin cảm ơn bạn nhiều!
 
Đúng rồi bạn ạ. Trong code của bạn mình kiểm tra thì trong 4 ô kiểm tra đều thoả mãn cả 2 điều kiện. Mình cũng sẽ dùng cả trường hợp này.
- Nếu bạn viết thêm code thoả mãn theo từng điều kiện thì hay quá, 1 code tìm có ít nhất 1 ô thoả tính chất và 1 code khác tìm có ít nhất 1 ô không thoả tính chất thì tuyệt vời.
(Bạn chỉ giúp cho mình thêm chỗ điều chỉnh code để mình làm thêm với trường hợp là 3 ô kiểm tra với bạn nhé)
- Xin cảm ơn bạn nhiều!
trong code có đoạn
Mã:
SoCot =[COLOR=#ff0000] 3[/COLOR]                   'Khai báo so cot xet tinh chat
bạn chỉnh số cột theo ý muốn
code lưu kết quả vào 3 sheet
 

File đính kèm

  • TIMBUOCNHAY (1).xlsb
    32.1 KB · Đọc: 8
Web KT

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

Back
Top Bottom