Sub Макрос1()
Dim arr, arr_1, arr_rez, arr_osh, n As Long, m As Long, k As Long, lr As Long, lc As Long
Set sd = CreateObject("Scripting.Dictionary")
Set sd_osh = CreateObject("Scripting.Dictionary")
lr = Cells(Rows.Count, 2).End(xlUp).Row
lc = Cells(8, Columns.Count).End(xlToLeft).Column
arr = Range(Cells(9, 1), Cells(lr, lc))
arr = Range("A9:AQ" & lr)
k = 0
j = 0
For n = 1 To UBound(arr)
If arr(n, 1) <> "" Then
If Not sd.Exists(arr(n, 2) & "|" & arr(n, 3)) Then Set sd(arr(n, 2) & "|" & arr(n, 3)) = CreateObject("Scripting.Dictionary")
arr_1 = Split(arr(n, 1), ",")
For m = LBound(arr_1) To UBound(arr_1)
If Not sd(arr(n, 2) & "|" & arr(n, 3)).Exists(arr_1(m)) Then
sd(arr(n, 2) & "|" & arr(n, 3)).Add arr_1(m), n
k = k + 1
Else
If Not sd_osh.Exists("Строка " & n + 8) Then
sd_osh.Add "Строка " & n + 8, arr_1(m)
j = j + 1
Else
sd_osh("Строка " & n + 8) = sd_osh("Строка " & n + 8) & "; " & arr_1(m)
End If
End If
Next
End If
Next
ReDim arr_rez(1 To k, 1 To lc)
k = 1
For Each y In sd
For Each y1 In sd(y)
arr_rez(k, 1) = y1
For n = 2 To lc
arr_rez(k, n) = arr(sd(y)(y1), n)
Next
k = k + 1
Next
Next
ReDim arr_osh(1 To j, 1 To 2)
k = 1
For Each y In sd_osh
arr_osh(k, 1) = y
arr_osh(k, 2) = sd_osh(y)
k = k + 1
Next
ActiveSheet.Copy Before:=Sheets(1)
With Sheets(1)
.Range(Cells(9, 1), Cells(9, lc)).ClearContents
.Range(Cells(10, 1), Cells(lr, lc)).Clear
.Range(Cells(9, 1), Cells(9, lc)).Copy
.Range("A9").Resize(UBound(arr_rez), UBound(arr_rez, 2)).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("A9").Resize(UBound(arr_rez), UBound(arr_rez, 2)) = arr_rez
End With
With Sheets("Дубли")
.Cells.Clear
.Range("A1").Resize(UBound(arr_osh), UBound(arr_osh, 2)) = arr_osh
End With
End Sub
|