Sub répartir()
Dim f As Worksheet, categ As ListObject, existeICI As Range
Set f = ActiveSheet
Set categ = f.ListObjects("_categ")
If Not f.ListObjects("_M1").DataBodyRange Is Nothing Then f.ListObjects("_M1").DataBodyRange.Delete
If Not f.ListObjects("_M2").DataBodyRange Is Nothing Then f.ListObjects("_M2").DataBodyRange.Delete
If Not f.ListObjects("_M3").DataBodyRange Is Nothing Then f.ListObjects("_M3").DataBodyRange.Delete
For i = 1 To categ.ListRows.Count
With f.ListObjects("_" & categ.DataBodyRange.Cells(i, 1))
Set existeICI = Nothing
If Not .DataBodyRange Is Nothing Then
Set existeICI = .ListColumns(1).DataBodyRange.Find(categ.DataBodyRange.Cells(i, 2).Value)
End If
If existeICI Is Nothing Then
.ListRows.Add
.DataBodyRange.Cells(.ListRows.Count, 1) = categ.DataBodyRange.Cells(i, 2).Value
.DataBodyRange.Cells(.ListRows.Count, 2) = categ.DataBodyRange.Cells(i, 3).Value
End If
Set existeICI = Nothing
End With
Next
End Sub