another variant (based on @Jeeped answer)
Sub test()
Dim Dic As Object, k As Variant, S$, rws&, x&, Rng As Range
Set Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = vbTextCompare
S = "Lorem,ipsum,dolor,amet,consectetur,adipiscing,elit,Mauris," & _
"facilisis,rutrum,faucibus,Sed,euismod,orci,rhoncus,tincidunt,elit,eros"
For Each k In Split(S, ",")
If Not Dic.exists(k) Then Dic.Add k, Nothing
Next k
rws = Range("A" & Rows.Count).End(xlUp).Row - 3
x = [3:3].Find("*", , , xlByColumns, , xlPrevious).Column
For Each Rng In Range([A3], Cells(3, x))
If Dic.exists(Rng.Value) Then
Rng.Offset(1, 0).FormulaR1C1 = "20"
Rng.Offset(1, 0).Resize(rws).FillDown
End If
Next Rng
End Sub
or
Sub test2()
Dim Dic As Object, k As Variant, S$, rws&, x&, Rng As Range
Set Dic = CreateObject("Scripting.Dictionary"): Dic.CompareMode = vbTextCompare
S = "Lorem,ipsum,dolor,amet,consectetur,adipiscing,elit,Mauris," & _
"facilisis,rutrum,faucibus,Sed,euismod,orci,rhoncus,tincidunt,elit,eros"
For Each k In Split(S, ",")
If Not Dic.exists(k) Then Dic.Add k, ""
Next k
rws = Range("A" & Rows.Count).End(xlUp).Row
x = [3:3].Find("*", , , xlByColumns, , xlPrevious).Column
For Each Rng In Range([A3], Cells(3, x))
If Dic.exists(Rng.Value) Then
Range(Cells(Rng.Row + 1, Rng.Column), Cells(rws, Rng.Column)).Value = "20"
End If
Next Rng
End Sub