Conta e Evidenzia parole chiave all’interno di frasi

Ho un foglio excel con due colonne. La prima colonna è la frase chiave e la seconda è i messaggi. La frase chiave può verificarsi nella colonna dei messaggi. Devo sapere quante volte una frase chiave si è verificata nella colonna dei messaggi. per favore suggerisci qualche buon modo per trovare

La frase chiave è una colonna e i messaggi è la seconda colonna. La colonna dei messaggi è una combinazione (concatenazione) di 1 o più di 1 frase chiave. Devo scoprire che quante frasi chiave contiene ogni messaggio.

È ansible che tu possa essere in grado di raccogliere un conteggio efficiente con una procedura secondaria del modulo che esegua tutte le operazioni matematiche negli array di memoria¹ e restituisca i conteggi al foglio di lavoro.

Conta le parole chiave nei dati di esempio delle frasi

Ho usato alcune parole chiave e frasi standard di Lorem Ipsum per creare i dati di esempio sopra.

Tocca Alt + F11 e quando si apre il VBE, usa immediatamente i menu a discesa per inserire ► Modulo ( Alt + I , M ). Incolla quanto segue nel nuovo foglio di codice del modulo intitolato qualcosa come Book1 – Module1 (Code) .

Option Explicit Sub count_strings_inside_strings() Dim rw As Long, lr As Long Dim k As Long, p As Long, vKEYs As Variant, vPHRASEs As Variant, vCOUNTs As Variant ReDim vKEYs(0) ReDim vPHRASEs(0) With Worksheets("Sheet1") '<~~ set to the correct worksheet name\ 'populate the vKEYs array For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row vKEYs(UBound(vKEYs)) = LCase(.Cells(rw, 1).Value2) ReDim Preserve vKEYs(UBound(vKEYs) + 1) Next rw ReDim Preserve vKEYs(UBound(vKEYs) - 1) 'populate the vPHRASEs array For rw = 2 To .Cells(Rows.Count, 2).End(xlUp).Row vPHRASEs(UBound(vPHRASEs)) = LCase(.Cells(rw, 2).Value2) ReDim Preserve vPHRASEs(UBound(vPHRASEs) + 1) Next rw ReDim Preserve vPHRASEs(UBound(vPHRASEs) - 1) ReDim vCOUNTs(0 To UBound(vPHRASEs)) 'perform the counts For p = LBound(vPHRASEs) To UBound(vPHRASEs) For k = LBound(vKEYs) To UBound(vKEYs) vCOUNTs(p) = CInt(vCOUNTs(p)) + _ (Len(vPHRASEs(p)) - Len(Replace(vPHRASEs(p), vKEYs(k), vbNullString))) / Len(vKEYs(k)) Next k Next p 'return the counts to the worksheet .Cells(2, 3).Resize(UBound(vCOUNTs) + 1, 1) = Application.Transpose(vCOUNTs) 'run the helper procedure to Blue|Bold all of the found keywords within the phrases Call key_in_phrase_helper(vKEYs, .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp))) End With End Sub Sub key_in_phrase_helper(vKYs As Variant, rPHRSs As Range) Dim p As Long, r As Long, v As Long With rPHRSs For r = 1 To rPHRSs.Rows.Count .Cells(r, 1) = .Cells(r, 1).Value2 For v = LBound(vKYs) To UBound(vKYs) p = 0 Do While CBool(InStr(p + 1, .Cells(r, 1).Value2, vKYs(v), vbTextCompare)) p = InStr(p + 1, .Cells(r, 1).Value2, vKYs(v), vbTextCompare) Debug.Print vKYs(v) With .Cells(r, 1).Characters(Start:=p, Length:=Len(vKYs(v))).Font .Bold = True .ColorIndex = 5 End With Loop Next v Next r End With End Sub 

Potrebbe essere necessario rinominare il foglio di lavoro da elaborare nella 5 ° riga del codice. Ho anche incluso una routine di supporto che identifica le parole chiave all'interno delle frasi con un font Blue | Bold. Commentare o eliminare la Call key_in_phrase_helper(...) nella parte inferiore della prima sottoprocedura se non si desidera.

Tocca Alt + Q per tornare al foglio di lavoro. Toccare Alt + F8 per aprire la finestra di dialogo Macro ed eseguire la procedura secondaria. Se i dati sono simili ai dati di esempio che ho messo insieme, dovresti avere risultati simili.

Conta le chiavi nelle frasi


¹ Questi sono alcuni metodi avanzati ma ritengo che siano anche il modo migliore per affrontare il tuo problema. Se hai domande specifiche che la tua ricerca non spiega in modo adeguato, cercherò di affrontarle nella sezione Commenti. La cartella di lavoro di esempio che ho creato per creare questa soluzione può essere resa disponibile su richiesta.

Puoi utilizzare questa formula COUNTIF(B:B;"*"&A2&"*") partire dalla seconda riga.