Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

В колонке B в данном прайсе находится и название группы в отдельных строках и название товара - нужно одну и ту же колонку указывать и в поле "Название группы" и "Название", т.е. ничего страшного, программа определит где группа, а где товар, по колонке цены. Там где цены нет (пусто в колонке) - будет считаться группа, где есть цена - товар.

Группа в одной ячейке в виде полного пути, с разделителем

Данный способ подойдет в случае, когда полный путь группы (группа и все вышестоящие группы) указаны в одной ячейке, через какой-то разделитель, для каждой строчки с товаром в прайсе.

...

Или если в прайсе есть больше 2х колонок групп, и с помощью макроса их можно объединить в одну (так же для каждой строки с товаром).

...

Expand
titleКак объединить группы из нескольких колонок в одну? (разверните)

В прайс нужно добавить следующий макрос и в нем поменять настройки:

Code Block
languagevb
'индекс листа
SHEET_IDX = 1

'строка с которой начинается прайс
START_ROW = 13

'колонки
CLMS_LIST = Array(1, 2, 3) 'список индексов колонок, в каком порядке их нужно объединять
CLM_RESULT = 1 'колонка в которую будут записываться объединенные группы
CLM_PRICE = 9 'колонка с ценой товара (должна быть заполнена у каждого товара)
CHR_DELIMITER = ">" 'разделитель между группами (не должен встречаться в названиях групп)


Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False

Set Sht = Sheets(SHEET_IDX)

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)
            
            If Sht.Cells(i, clm_group).Value <> "" Then
                If (s_res = "") Then
                    s_res = Sht.Cells(i, CLMS_LIST(j)).Value
                Else
                    s_res = s_res & CHR_DELIMITER & Sht.Cells(i, clm_group).Value
                End If
                
                Sht.Cells(i, clm_group).Value = ""
            End If
        Next j
        
        Sht.Cells(i, CLM_RESULT).Value = s_res
    Else
        Sht.Cells(i, CLM_RESULT).Value = ""
    End If
Next i

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

Определение группировки по форматированию

...