...
Или если в прайсе есть больше 2х колонок групп, и с помощью макроса их можно объединить в одну (так же для каждой строки с товаром).
...
Для загрузки групп, которые объединены в одной ячейке, понадобится макрос. Макрос, который приведен ниже, в том числе и объединяет группы, если они в нескольких колонках.
Expand |
---|
title | Как объединить группы из нескольких колонок в одну? Макрос (разверните) |
---|
| В прайс нужно добавить следующий макрос и в нем поменять настройки: |
'индекс листа
SHEET_Dim idx_row, idx_group, j, k, idx_from, idx_to As Long
Dim group_full As String
Dim group_col As Integer
'индекс листа
SHEET_IDX = 1
'строка с которой начинается прайс
START_ROW = 13
|
'колонки
CLMS_LISTArray(1, 2, 3"ZZ" 'последняя колонка в прайсе, буквами
CLMS_LIST = Array(1) 'список индексов колонок, в каком порядке их нужно объединять |
CLM_RESULT, индексы колонок вводятся через запятую
'CLMS_LIST = | 1 'колонка в которую будут записываться объединенные группы
CLM_PRICE = 9 'колонка с ценой товара (должна быть заполнена у каждого товара)
CHR_DELIMITER = ">" 'разделитель между группами (не должен встречаться в названиях групп)
Array(3, 4, 5) 'пример если несколько колонок групп
CHR_DELIMITER = " >> " 'разделитель между группами
CLM_GROUP_IDX = 2 'номер колонки с группой (в нее же помещается объединенная группа)
CLM_GROUP_L = "B" 'буква колонки с группой
CLM_GROUP_LEVEL = 20 'номер колонки с уровнем группировки
CLM_PRICE = 9 'колонка, в которой указана цена товара
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Set | Sht
For i = START_ROW To Sht.UsedRange.Rows.Count
If Sht.Cells(i, CLM_PRICE).Value <> "" Then
s_res = ""
For j = LBound(CLMS_LIST) To UBound(CLMS_LIST)
clm_group = CLMS_LIST(j)
SHT.Select
Cells.Select
Selection.ClearOutline
Selection.UnMerge
SHT.Cells(1, 1).Select
row_count = SHT.UsedRange.Rows.Count
prev_level = Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
'формируем группы из нескольких колонок
For i = START_ROW To row_count
group_text = ""
If Sht.Cells(i, | clmgroupPRICE).Value <> "" Then
For j = LBound(CLMS_LIST) To UBound(CLMS_LIST)
clm_group = CLMS_LIST(j)
If SHT.Cells(i, clm_group).Value <> "" Then
If ( | srestext = "") Then
group_text = SHT.Cells(i, clm_group).Value
Else
group_text = group_text | s_res = Sht& CHR_DELIMITER & SHT.Cells(i, | CLMS_LIST(j)clm_group).Value
End If
Else
Exit For
End If
Next j
| Else
s_res = s_res & CHR_DELIMITER & Sht
If group_text <> "" Then
SHT.Cells(i, | clmgroupIDX).Value = group_text
Else
SHT.Cells(i, CLM_GROUP_IDX).Value = "не | распределено"
End If
Else
Sht.Cells(i, CLM_GROUP_IDX).Value = ""
End if
Next i
'сортировка по колонке с группой
Columns(CLM_GROUP_L & ":" & CLM_GROUP_L).Select
SHT.Sort.SortFields.Clear
SHT.Sort.SortFields.Add Key:=Range(CLM_GROUP_L & "1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With SHT.Sort
| Sht.Cells(i, clm_group).Value = ""
End If
Next j
Sht.Cells(i, CLM_RESULT).Value = s_res
Else
Sht.Cells(i, CLM_RESULT .SetRange Range("A" & CStr(START_ROW) & ":" & CLM_LAST & CStr(row_count))
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Добавление строчек с группами
idx_row = START_ROW
Do While ActiveSheet.Cells(idx_row, CLM_GROUP_IDX).Value <> ""
group_full = ActiveSheet.Cells(idx_row, CLM_GROUP_IDX).Value
ActiveSheet.Cells(idx_row, CLM_GROUP_LEVEL).Value = ""
'Разделитель
group_part = | End If
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = TrueSplit(group_full, CHR_DELIMITER)
For i = LBound(group_part) To UBound(group_part)
If group_part(i) <> prev_level(i) Then
Rows(CStr(idx_row) & ":" & CStr(idx_row)).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveSheet.Cells(idx_row, CLM_GROUP_LEVEL).Value = i + 1
ActiveSheet.Cells(idx_row, CLM_GROUP_IDX).Value = group_part(i)
prev_level(i) = group_part(i)
idx_row = idx_row + 1
End If
Next i
idx_row = idx_row + 1
Loop
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True |
Note |
---|
Перед копированием макроса из инструкции переключите раскладку клавиатуры на русский язык |
Макрос добавляется в карточке прайса во вкладке “Макрос” Image AddedНужно указать значения настроек для вашего прайса. В комментариях рядом со значением указано, что туда нужно вводить. Image AddedПример прайса (группы в каждой строке в первых трех колонках): Image AddedПример настройки (результат помещается в колонку А): Image Added |
Note |
---|
Если прайс большой, то макрос может выполняться долго |
После выполнения макроса в файле будет такой результат:
...
Группы вынесены в отдельные строки, а в 20-ой колонке указан уровень, на котором находится группа.
Для его загрузки указываются следующие настройки:
...
В Название группы и Название вышестоящей группы указывается колонка А, т.е. та колонка, в которую записывался результат макроса (CLM_GROUP_IDX
)
Колонка 20 (CLM_GROUP_LEVEL
из макроса) указывается как Код вышестоящей группы.
Устанавливаются птички Группа в отдельной строке и Дерево. Загрузка группы по наименованию.
В строку, с которой начинается загрузка прайса, указывается строка, в которой название первой группы.
Определение группировки по форматированию
...