The easiest way I can see is to use a user defined function and select the buyer with expertise in that area, and in case of multiple buyers choose the one with the highest performance
Option Explicit
Function AssignedBuyer(Cat As String, BuyerData As Range) As Variant
Dim aryBuyers As Variant
Dim b As Long, perf As Long
'assigned default error
AssignedBuyer = CVErr(xlErrNA)
'make into array
aryBuyers = BuyerData.Value
perf = 0
'check for buyer with 'Cat' experience, pick max historical performance if multiple
For b = LBound(aryBuyers, 1) + 1 To UBound(aryBuyers, 1)
If InStr(1, aryBuyers(b, 2), Cat, vbTextCompare) > 0 Then
If aryBuyers(b, 3) > perf Then
AssignedBuyer = aryBuyers(b, 1)
End If
End If
Next b
End Function
This does no resource leveling so a buyer could be assigned to multiple categories (e.g. Buyer8) and if there is no buyer with required expertise, then no one is assigned
These constraints / limitations can be resolved but will take more work