In order to compile youtr code, I had to make certain cvhanges and add some declarations. ( I had to add the declarations because I place "Option Explicit" at the top of all my code, to catch some common errors. (go to the Tools menu >> Options >> Editor and check "Require Variable Declaration.
Dim Ndex As String ' I never use a reserved word as a Variable.
Dim SearchIn As String
Dim SearchFor As String
Dim r As Long
Dim Status As String
'Change the Index and SearchIn ranges here..
Ndex = "CoresStatus!D2:D5000" 'contains "date" and "TBA"
Status = Evaluate("INDEX(" & Ndex & ",MATCH(" & """" & SearchFor & """" & ",INDEX(" & SearchIn & ",),0))")
Looking at the code I see that the String SearchIn evaluates to
"CoresStatus!B2:B5000&CoresStatus!F2:F5000&CoresStatus!D2
5000"
That the SearchFor = Join(etc) is the same as
With ws.Rows(r)
SearchFor = .Cells(1) & .Cells(2) & .Cells(3)
End With
Looking at this line
Status = Evaluate("INDEX(" & Ndex & ",MATCH(" & """" & SearchFor & """" & ",INDEX(" & SearchIn & ",),0))")
I will rewrite it to its very basic meaning
INDEX(Array(5000), MATCH(String, Array(15000)))
Do you see the basic flaw herein?
I understand why you are using all those confusing quotes and ampersands, but you really don't need to use Evaluate; INDEX and MATCH work just fine with Ranges and Strings. While I can't understand what the SearchIn Range is all about and what its relation to the (concatenated) values in Columns A, B, and C of Row "r" is, you can use code like
'Dim and Set Ndex and SearchIn as Ranges
With Application.WorksheetFunction
Status = .Index(Ndex, .Match(SearchFor, SearchIn), 0) 'An example only. Not correct for your purposes
End With