Имеется выгрузка из 1с, содержащая разбивку по контрагентам и договорам. Необходимо наименование контрагентов выставить в столбец слева от договора. Руками это делать очень долго, контрагентов достаточно много, есть ли какой-то удобный и быстрый способ это сделать?
Имеется выгрузка из 1с, содержащая разбивку по контрагентам и договорам. Необходимо наименование контрагентов выставить в столбец слева от договора. Руками это делать очень долго, контрагентов достаточно много, есть ли какой-то удобный и быстрый способ это сделать?Triip_utd
Если структура как в примере (см. картинку, обведено красным), то можно макросом [vba]
Код
Sub Макрос1() Dim arr As Variant, arr1 As Variant, n As Long, m As Integer arr1 = Selection.Columns("A:A") ReDim arr(1 To UBound(arr1), 1 To 1) Set Dict = CreateObject("System.Collections.ArrayList") For Each r In Selection.Rows n = n + 1 If Not Dict.contains(r.OutlineLevel) Then Dict.Add r.OutlineLevel If Dict.Count > 1 Then ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1) End If arr(n, Dict.LastIndexOf(r.OutlineLevel) + 1) = arr1(n, 1) If Dict.LastIndexOf(r.OutlineLevel) + 1 > 1 And n > 1 Then For m = Dict.LastIndexOf(r.OutlineLevel) To 1 Step -1 arr(n, m) = arr(n - 1, m) Next End If Next Columns(1).Resize(, Dict.Count).Insert Shift:=xlToRight Selection(1).Resize(UBound(arr), UBound(arr, 2)).NumberFormat = "@" Selection(1).Resize(UBound(arr), UBound(arr, 2)) = arr End Sub
[/vba]
Выделяйте данные, как показано на рисунке и жмите кнопку. Только учтите, что у Вас столбец А практически скрыт, его выделять не надо, только данные (не весь столбец, а только ячейки с данными) в столбце В
Если структура как в примере (см. картинку, обведено красным), то можно макросом [vba]
Код
Sub Макрос1() Dim arr As Variant, arr1 As Variant, n As Long, m As Integer arr1 = Selection.Columns("A:A") ReDim arr(1 To UBound(arr1), 1 To 1) Set Dict = CreateObject("System.Collections.ArrayList") For Each r In Selection.Rows n = n + 1 If Not Dict.contains(r.OutlineLevel) Then Dict.Add r.OutlineLevel If Dict.Count > 1 Then ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + 1) End If arr(n, Dict.LastIndexOf(r.OutlineLevel) + 1) = arr1(n, 1) If Dict.LastIndexOf(r.OutlineLevel) + 1 > 1 And n > 1 Then For m = Dict.LastIndexOf(r.OutlineLevel) To 1 Step -1 arr(n, m) = arr(n - 1, m) Next End If Next Columns(1).Resize(, Dict.Count).Insert Shift:=xlToRight Selection(1).Resize(UBound(arr), UBound(arr, 2)).NumberFormat = "@" Selection(1).Resize(UBound(arr), UBound(arr, 2)) = arr End Sub
[/vba]
Выделяйте данные, как показано на рисунке и жмите кнопку. Только учтите, что у Вас столбец А практически скрыт, его выделять не надо, только данные (не весь столбец, а только ячейки с данными) в столбце Вmsi2102