Guesse this is what you're looking for.
untested because I don't have a sheet but should work
Sub copyToOtherSheet()
Dim srcSheet As Worksheet, dstSheet As Worksheet, nameSheet As Worksheet
Dim lRow As Long
Dim srcRng As Range
Dim i As Long, c As Long, j As Long
' Don't display alert on deletion
Application.DisplayAlerts = False
With ThisWorkbook
' Sheet where we copy from
Set srcSheet = .Sheets("Data")
' Sheet where we copy to
Set dstSheet = .Sheets("Results")
Set dstSheet = .Sheets("Names")
End With
With nameSheet
' Check how many records in table
lRowName = .Cells(Rows.Count, 1).End(xlUp).Row
End With
With srcSheet
' Check how many records in table
lRowSRC = .Cells(Rows.Count, 1).End(xlUp).Row
End With
With dstSheet
' clear last results
lrowdst = .Cells(Rows.Count, 1).End(xlUp).Row
If lrowdst = 1 Then lrowdst = 2 'if there are only headers don't clear them
.Range("A" & 2 & ":G" & lrowdst).ClearContents
End With
'k as counter for row names
'i as counter for rows data
'c as counter colums data
'j as counter for rows results
j = 2 'first row of your results
For k = 1 To lRowName 'loop trough rows with names
Name = Sheets(nameSheet).Range("B" & k).Value 'get cell value from name sheet
For i = 2 To lRowSRC 'loop trough rows data
For c = 1 To 7 'loop trough columns data
cellvalue = Sheets(srcSheet).Cells(i, c)
If InStr(1, Name, cellvalue, vbBinaryCompare) > 0 Then 'check if name is in cell value
Sheets(dstSheet).Range("A" & j & ":G" & j) = Sheets(srcSheet).Range("A" & i & ":G" & i) 'copy row to search results
j = j + 1 'add 1 to counter row results
GoTo foundrow 'go to next i to stop getting the same result 2 times if name exists in multiple columns
End If
Next c
foundrow:
Next i
Next k
Application.DisplayAlerts = True
End Sub