Versions Compared

Key

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

...

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


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

Часто в прайсах указывают группы, которые не сгруппированы средствами Excel, но текст в каждом уровне имеет разное форматирование (разный шрифт, или цвет шрифта, или цвет ячейки, или разные отступы от начала ячейки). В этом случае группы можно загрузить, но для этого нужно составить макрос.

Текст макроса:

Expand
titleТекст макроса


Code Block
languagevb
firstline1
titleМакрос
###DECLARE###  
    Public Type GroupLevel
        ColIndex As Integer 'номер колонки, в которой указано название группы
        InterColor As Long 'цвет ячейки
        IsBold As Integer '1 - жирный 0 - нет
        IsItalic As Integer '1 - курсив 0 - нет
        FontName As String 'название шрифта
        FontColor As Long 'цвет шрифта
        FontSize As Long 'размер шрифта
        Indent As Integer 'отступ
    End Type  
###DECLARE###      
    Dim i, j, clmnPriceIndex, clmnOutIndex, rowFirstData, lvlCount As Integer
    
    'Укажите номер колонки, в которой указана цена товара
    clmnPriceIndex = 0
    
    'Укажите номер колонки, в которую будет помещен результат
    clmnOutIndex = 0
    
    'Укажите номер первой строки с данными
    rowFirstData = 1
    
    'Укажите после "To" количество уровней группировки,
    '3 (три) означет что у группы есть подгруппы и у подгруппы есть еще вложенные подгруппы
    lvlCount = 3
    
    Dim GroupLevels(1 To 3) As GroupLevel

    'Укажите настройки для каждого уровня
    GroupLevels(1).ColIndex = 1
    GroupLevels(1).InterColor = 0
    GroupLevels(1).IsBold = 0
    GroupLevels(1).IsItalic = 0
    GroupLevels(1).FontName = ""
    GroupLevels(1).FontColor = 0
    GroupLevels(1).FontSize = 1                        
    GroupLevels(1).Indent = 0   
    
    'GroupLevels(2).ColIndex = 1
    'GroupLevels(2).InterColor = 0
    'GroupLevels(2).IsBold = 0
    'GroupLevels(2).IsItalic = 0
    'GroupLevels(2).FontName = ""
    'GroupLevels(2).FontColor = 0
    'GroupLevels(2).Indent = 0
    
    For i = rowFirstData To ActiveSheet.UsedRange.Rows.Count
        If ActiveSheet.Cells(i, clmnPriceIndex).Value = "" Then
            For j = 1 To lvlCount
                Set cel = ActiveSheet.Cells(i, GroupLevels(j).ColIndex)
                
                If (cel.Interior.Color = GroupLevels(j).InterColor) And _
                    ((-1) * CInt(cel.Font.Bold) = GroupLevels(j).IsBold) And _
                    ((-1) * CInt(cel.Font.Italic) = GroupLevels(j).IsItalic) And _
                    (cel.Font.Name = GroupLevels(j).FontName) And _
                    (cel.Font.Color = GroupLevels(j).FontColor) And _
                    (cel.Font.Size = GroupLevels(j).FontSize) And _                    
                    (cel.IndentLevel = GroupLevels(j).Indent) Then
                        
                       ActiveSheet.Cells(i, clmnOutIndex).Value = j
                       Exit For
                End If
            Next j
        End If
    Next i