Mày mò hoài không được, mong các Anh Chị & các bạn giúp đỡ.
Dim CotCuoi As Long
Dim DemTrung As Long
Dim SoCot As Long
DemTrung = 0
DongCuoi = Sheet1.Range("A60000").End(xlUp).Row
CotCuoi = Sheet1.Range("A2").End(xlToRight).Column
Arr01 = Sheet1.Range("LK2:LS" & DongCuoi)
SoCot = UBound(Arr01, 2)
For i = 1 To CotCuoi - 8
Arr02 = Sheet1.Range(Sheet1.Cells(2, i), Sheet1.Cells(DongCuoi, i + 8))
If Sokhop(Arr01, Arr02, DongCuoi, SoCot) Then
DemTrung = DemTrung + 1
End If
Next
MsgBox "co tong cong " & DemTrung & "trung"
End Sub
Function Sokhop(Arr01, Arr02, DongCuoi, SoCot)
Dim i As Long
Dim j As Long
For i = 1 To DongCuoi - 1
For j = 1 To SoCot
If (Arr01(i, j) <> Arr02(i, j)) Then
Sokhop = False
Exit Function
End If
Next j
Next i
Sokhop = True
End Function
Trên mỗi dòng i : Lấy các ô từ Cell(LK, i) đến Cell(LS, i) làm mảng con mẫu (Mảng con mẫu này chỉ có 1 hàng và 9 cột).
Cám ơn các Anh Chị đã xem và nhiệt tình giúp đỡ !
Do mình đưa yêu cầu của bài không rõ ràng nên làm vất vả mọi người rồi.
Xin được nói rõ thêm về yêu cầu của bài ( Dựa theo ý trong bài của Anh ChanhTQ@):
Trên mỗi dòng i : Lấy các ô từ Cell(LK, i) đến Cell(LS, i) làm mảng con mẫu (Mảng con mẫu này chỉ có 1 hàng và 9 cột). Tiếp đó dò tìm trên mảng lớn cũng trên dòng đó ( Mảng này cũng chỉ có 1 hàng và cột là từ Cell(A, i) đến Cell(LH, i)) . Ghi tổng số lần mà mảng mẫu con mẫu xuất hiện trong mảng lớn ra Cell(LU, i). Tô màu được như Anh ChanhTQ@ thì càng tốt .
Làm tiếp cho các dòng tiếp theo cho đến hết.
Xin các Anh Chị giúp cho.
Trân trọng cảm ơn.
Public Sub Dem()
Dim A, B, MA(), MB(), kq(), r As Long, c As Long
A = Sheet1.Range("A2").CurrentRegion
B = Sheet1.Range("LK2").CurrentRegion
ReDim MA(1 To UBound(A)), MB(1 To UBound(B)), kq(1 To UBound(B), 1 To 1)
For r = 1 To UBound(A)
For c = 1 To UBound(A, 2)
MA(r) = MA(r) & " " & A(r, c)
Next c
MA(r) = MA(r) & " "
Next r
For r = 1 To UBound(B)
For c = 1 To UBound(B, 2)
MB(r) = MB(r) & " " & B(r, c)
Next c
Next r
With CreateObject("vbscript.regexp")
.Global = True
For r = 1 To UBound(MB)
.Pattern = MB(r) & "(?=\s)"
kq(r, 1) = .Execute(MA(r)).Count
Next r
End With
Sheet1.Range("LU2", "LU" & Sheet1.UsedRange.Row).Clear
Sheet1.Range("LU2").Resize(UBound(kq), 1) = kq
End Sub
Cám ơn các Anh Chị đã xem và nhiệt tình giúp đỡ !
Do mình đưa yêu cầu của bài không rõ ràng nên làm vất vả mọi người rồi.
Xin được nói rõ thêm về yêu cầu của bài ( Dựa theo ý trong bài của Anh ChanhTQ@):
Trên mỗi dòng i : Lấy các ô từ Cell(LK, i) đến Cell(LS, i) làm mảng con mẫu (Mảng con mẫu này chỉ có 1 hàng và 9 cột). Tiếp đó dò tìm trên mảng lớn cũng trên dòng đó ( Mảng này cũng chỉ có 1 hàng và cột là từ Cell(A, i) đến Cell(LH, i)) . Ghi tổng số lần mà mảng mẫu con mẫu xuất hiện trong mảng lớn ra Cell(LU, i). Tô màu được như Anh ChanhTQ@ thì càng tốt .
Làm tiếp cho các dòng tiếp theo cho đến hết.
Xin các Anh Chị giúp cho.
Trân trọng cảm ơn.
Public Sub GPE()
Dim tArr(), sArr(), dArr(), I As Long, J As Long, Tem As Long, Num As Long, N As Long, Mau As Long
tArr = Range("LK2:LS34").Value
sArr = Range("A2:LH34").Value
ReDim dArr(1 To 33, 1 To 1)
For I = 1 To UBound(tArr, 1)
Mau = 2
Tem = 0
For J = 1 To 9
Tem = Tem & tArr(I, J)
Next J
For J = 1 To UBound(sArr, 2) - 9
Num = 0
For N = J To J + 8
Num = Num & sArr(I, N)
Next N
If Num = Tem Then
Mau = Mau + 1
dArr(I, 1) = dArr(I, 1) + 1
Cells(I + 1, J).Resize(, 9).Interior.ColorIndex = Mau
End If
Next J
Next I
[LU2].Resize(33) = dArr
End Sub
Public Sub hello()
Dim fullStr As String, childStr As String, lr As Long, lPos As Long, dArr() As Long
lr = Sheet1.Range("A1000000").End(xlUp).Row
ReDim dArr(1 To lr - 1, 1 To 1)
Sheet1.Range("A2:LH" & lr).Interior.ColorIndex = 0
For r = 2 To lr Step 1
fullStr = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose( _
Sheet1.Range("A" & r & ":LH" & r))), " ")
childStr = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose( _
Sheet1.Range("LK" & r & ":LS" & r))), " ")
lPos = InStr(fullStr, childStr)
Do While lPos > 0
dArr(r - 1, 1) = dArr(r - 1, 1) + 1
Cells(r, UBound(Split(Left(fullStr, lPos), " ")) + 1).Resize(, 9).Interior.ColorIndex = Int((50 * Rnd) + 1)
lPos = InStr(lPos + 1, fullStr, childStr)
Loop
Next
Sheet1.[LU2].Resize(lr - 1).Value = dArr
End Sub
Mình có chỗ này chưa hiểu lắm, có thể xin thông tin của bạn được k ?Bạn không cho ví dụ, điển hình dữ liệu như ở dòng 2, 3 thì kết quả ra cái gì?
Vì vậy tôi không muốn làm theo kiểu đoán mò yêu cầu.
Tôi chỉ dẫn thuật toán đơn giản cho bạn (có thuật toán khác, nhanh hơn nhưng phức tạp hơn)
Lập một vòng lặp đọc từng dòng:
Dùng hàm join, hoặc concatenate để nối mảng lớn lại thành chuỗi chuoiMe.
Dùing cách tương tự để nối mảng con lại thành chuỗi chuoiCon.
Mở một vòng lặp duyệt chuỗi; dùng hàm InStr để tìm chuoiCn trong chuoiMe. Nếu tìm ra thì cộng 1 và tiếp tục ở vị trí kế tiếp. Nếu không tìm ra thì thoát vòng lặp duyệt chuỗi.
Nối mảng thành chuỗi: nếu dữ liệu như trong file (chỉ 1 và 0) thì có thể nối thẳng, nếu là loại dữ liệu khác thì lúc nối phải có dầu ngăn (delimiters)
cho tớ xin thông tin để tiện liên hệ ạ, có chỗ này mình cần hỏi sâu hơn 1 týLàm thí thí nhé, không biết kết quả có đúng không, đếm trong dòng có bi nhiêu màu là có bi nhiêu lần trùng.
PHP:Public Sub GPE() Dim tArr(), sArr(), dArr(), I As Long, J As Long, Tem As Long, Num As Long, N As Long, Mau As Long tArr = Range("LK2:LS34").Value sArr = Range("A2:LH34").Value ReDim dArr(1 To 33, 1 To 1) For I = 1 To UBound(tArr, 1) Mau = 2 Tem = 0 For J = 1 To 9 Tem = Tem & tArr(I, J) Next J For J = 1 To UBound(sArr, 2) - 9 Num = 0 For N = J To J + 8 Num = Num & sArr(I, N) Next N If Num = Tem Then Mau = Mau + 1 dArr(I, 1) = dArr(I, 1) + 1 Cells(I + 1, J).Resize(, 9).Interior.ColorIndex = Mau End If Next J Next I [LU2].Resize(33) = dArr End Sub
em cảm ơn anh nhiều vì đã có những chia sẻ và giúp đỡ mọi người trên diễn đàn. Hiện tại e có một vấn đề mà không có cách giải quyết muốn nhờ anh code hộ ak!. a có thể viết hộ e cách tìm số lần xuất hiện của một chữ xuất hiện trong chuỗi kiểu dạng đếm số lần xuất hiện kí tự trong chuỗi như hàm countifs đó ak.Thanks anh nhiềuPublic Sub hello() Dim fullStr As String, childStr As String, lr As Long, lPos As Long, dArr() As Long lr = Sheet1.Range("A1000000").End(xlUp).Row ReDim dArr(1 To lr - 1, 1 To 1) Sheet1.Range("A2:LH" & lr).Interior.ColorIndex = 0 For r = 2 To lr Step 1 fullStr = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose( _ Sheet1.Range("A" & r & ":LH" & r))), " ") childStr = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose( _ Sheet1.Range("LK" & r & ":LS" & r))), " ") lPos = InStr(fullStr, childStr) Do While lPos > 0 dArr(r - 1, 1) = dArr(r - 1, 1) + 1 Cells(r, UBound(Split(Left(fullStr, lPos), " ")) + 1).Resize(, 9).Interior.ColorIndex = Int((50 * Rnd) + 1) lPos = InStr(lPos + 1, fullStr, childStr) Loop Next Sheet1.[LU2].Resize(lr - 1).Value = dArr End Sub