Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Domenico,
probabilmente mi sono espresso male.
No, non era una mancanza di chiarezza da parte tua! Non avendo visto la tua risposta, stavo invece rispondendo al mio proprio suggerimento di estendere la funzionalità della mia funzione!
La mia necessità è ricavare i numeri di riga del range in cui si trovano le sequenze.
Quindi tornando all'esempio , se il range da analizzare è A1:A12 e la sequenza da cercare è: a b a,
mi servirebbe conoscere che le righe:
3-4-5
5-6-7
10-11-12
quindi conoscere che le righe: 3-4-5-6-7-10-11-12 contengono la sequenza. Questo perché devo evidenziare le righe del range.
Si potrebbe sfruttare un adattamento della mia funzione. A titolo di esempio, prova qualcosa del genere:
'=========>>
Option Explicit
'--------->>
Public Sub DemoEvidenziareRighe()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range, rCell As Range
Dim mArrMulti As Variant, arrRighe As Variant
Dim i As Long, j As Long
Const sPrimaCella As String = "D4" '<<=== Modifica
Const sSeq As String = "a b a" '<<=== Modifica
Const iNumColDaEvidenziare As Long = 5 '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets("Foglio1")
With SH
Set rCell = .Range(sPrimaCella)
Set Rng = .Range(rCell, rCell.End(xlDown))
End With
mArrMulti = Split(sSeq, " ")
arrRighe = RigheSeqDodo(Rng, sSeq)
For j = 1 To UBound(arrRighe)
Rng.Cells(arrRighe(j)).Resize(3, iNumColDaEvidenziare).Interior.ColorIndex = 6
Next j
End Sub
'--------->>
Public Function RigheSeqDodo(rIntervallo As Range, _
sSequenza As String, _
Optional sSeparatore As String = " ") _
As Variant
Dim arrIn As Variant, arrSeq As Variant, arrOut() As Variant
Dim i As Long, j As Long, k As Long
Dim iCtr As Long
Dim bMatch As Boolean
arrIn = rIntervallo.Value
arrSeq = Split(sSequenza, sSeparatore)
If UBound(arrSeq) = 0 Then
Exit Function
End If
For i = 1 To UBound(arrIn) - UBound(arrSeq)
For j = LBound(arrSeq) To UBound(arrSeq)
bMatch = UCase(arrIn(i + j, 1)) = UCase(arrSeq(j))
If Not bMatch Then Exit For
Next j
If bMatch Then
iCtr = iCtr + 1
ReDim Preserve arrOut(1 To iCtr)
arrOut(iCtr) = i
End If
Next i
RigheSeqDodo = arrOut
End Function
'<<=========
Esequendo il codice, ottengo qualcosa del genere:
Potresti scaricare il mio file di prova Dodo#2_20160826.xlsm a:
https://www.dropbox.com/s/nbawrkzfayh3512/Dodo%232_20160826.xlsm?dl=0
===
Regards,
Norman