Здравствуйте. Прошу помочь с решением задачи, условия следующие:
Есть 5 столбов с разными заголовками (Китай, Франция, Германия, Россия, Америка) и в каждом столбе есть повторяющиеся значения (страны). Необходимо перенести их в строки таким образом, что если в столбцах есть к примеру Агадир то в его столбце появляется те заголовки в чьих столбцах есть это значение
Файл во вложении.
Здравствуйте. Прошу помочь с решением задачи, условия следующие:
Есть 5 столбов с разными заголовками (Китай, Франция, Германия, Россия, Америка) и в каждом столбе есть повторяющиеся значения (страны). Необходимо перенести их в строки таким образом, что если в столбцах есть к примеру Агадир то в его столбце появляется те заголовки в чьих столбцах есть это значение
Sub Alex_Mag() Application.ScreenUpdating = False For c = 1 To 5 Range(Cells(c), Cells(c).End(xlDown)).RemoveDuplicates 1, xlYes Next arr = Cells(1).CurrentRegion.Value q = UBound(arr) Set d = CreateObject("Scripting.Dictionary") For i = 1 To UBound(Application.Transpose(arr)) For j = 2 To UBound(arr) If Not IsEmpty(arr(j, i)) Then If d.exists(arr(j, i)) Then d.Item(arr(j, i)) = d.Item(arr(j, i)) & "|" & arr(1, i) Else: d.Add arr(j, i), arr(1, i) End If End If Next Next keysarr = d.keys Set r = Cells(2, 8).Resize(1, UBound(keysarr) + 1) r.Value = keysarr For Each cl In r.Cells itemarr = Split(d.Item(cl.Value), "|") cl.Offset(1, 0).Resize(UBound(itemarr) + 1, 1).Value = Application.Transpose(itemarr) Next Set d = Nothing Application.ScreenUpdating = True End Sub
Sub Alex_Mag() Application.ScreenUpdating = False For c = 1 To 5 Range(Cells(c), Cells(c).End(xlDown)).RemoveDuplicates 1, xlYes Next arr = Cells(1).CurrentRegion.Value q = UBound(arr) Set d = CreateObject("Scripting.Dictionary") For i = 1 To UBound(Application.Transpose(arr)) For j = 2 To UBound(arr) If Not IsEmpty(arr(j, i)) Then If d.exists(arr(j, i)) Then d.Item(arr(j, i)) = d.Item(arr(j, i)) & "|" & arr(1, i) Else: d.Add arr(j, i), arr(1, i) End If End If Next Next keysarr = d.keys Set r = Cells(2, 8).Resize(1, UBound(keysarr) + 1) r.Value = keysarr For Each cl In r.Cells itemarr = Split(d.Item(cl.Value), "|") cl.Offset(1, 0).Resize(UBound(itemarr) + 1, 1).Value = Application.Transpose(itemarr) Next Set d = Nothing Application.ScreenUpdating = True End Sub