Это может быть достигнуто через VBA. Я написал код ниже и работал для меня.
Входной лист:
Попробуйте приведенный ниже код.
Sub CustomerAndProject()
Dim Customer As String, Project As String, Info1 As String, Info2 As String, Info3 As String
Dim TotalCustomers As Integer, m As Integer
m = 1
'Get Total customers
TotalCustomers = Worksheets("Sheet1").Range("A1").End(xlDown).Row
'First loop to pick customers
For i = 2 To TotalCustomers
Customer = Worksheets("Sheet1").Range("A" & i).Value
'Second loop to pick the projects related to customer
For k = 2 To TotalCustomers
Project = Worksheets("Sheet1").Range("B" & k).Value
'Function r=to validate the duplicate customers and projects
If CustomerValidationForDuplication(Project, Customer, TotalCustomers) = False Then
'Third loop to pick and paste info data related to customer and project
For j = 2 To TotalCustomers
If Worksheets("Sheet1").Range("A" & j).Value = Customer And Worksheets("Sheet1").Range("B" & j).Value = Project Then
Worksheets("Sheet2").Cells(1, m).Value = Customer
Worksheets("Sheet2").Cells(2, m).Value = Project
If IsEmpty(Worksheets("Sheet1").Range("C" & j).Value) Then
Else: Info1 = Worksheets("Sheet1").Range("C" & j).Value
Worksheets("Sheet2").Cells(3, m).Value = Info1
End If
If IsEmpty(Worksheets("Sheet1").Range("D" & j).Value) Then
Else: Info2 = Worksheets("Sheet1").Range("D" & j).Value
Worksheets("Sheet2").Cells(4, m).Value = Info2
End If
If IsEmpty(Worksheets("Sheet1").Range("E" & j).Value) Then
Else: Info3 = Worksheets("Sheet1").Range("E" & j).Value
Worksheets("Sheet2").Cells(5, m).Value = Info3
End If
End If
Next
m = m + 1
End If
Next
Next
End Sub
Function CustomerValidationForDuplication(ProjectToBeVerified As String, CustomerToBeVerified As String, TotalCustomers As Integer) As Boolean
For l = 1 To TotalCustomers
If ProjectToBeVerified = Worksheets("Sheet2").Cells(2, l) Then
For m = 1 To TotalCustomers
If CustomerToBeVerified = Worksheets("Sheet2").Cells(1, m) Then
CustomerValidationForDuplication = True
Exit For
Else
CustomerValidationForDuplication = False
End If
Next
Else
CustomerValidationForDuplication = False
End If
If CustomerValidationForDuplication = True Then Exit For
Next
End Function
Выходной лист:
Сообщите мне, если он сработает для вас.
Примечание: I Я новичок в VBA, поэтому мой код не будет дружелюбным. Разрешения приветствуются.