Versions Compared

Key

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

...

Часто в прайсах указывают группы, которые не сгруппированы средствами 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###      
    'Укажите после "To" количество уровней группировки,
    '3 (три) означет что у группы есть подгруппы и у подгруппы есть еще вложенные подгруппы
    lvlCount = 3
	
    Dim i, j, clmnPriceIndex, clmnOutIndex, rowFirstData, lvlCount As Integer
    
    'Укажите номер колонки, в которой указана цена товара
    clmnPriceIndex = 06
    
    'Укажите номер колонки, в которую будет помещен результат
    clmnOutIndex = 020
    
    'Укажите номер первой строки с данными
    rowFirstData = 1
    
    'Укажите после "To" количество уровней группировки,
    '3 (три) означет что у группы есть подгруппы и у подгруппы есть еще вложенные подгруппы
    lvlCount = 310
    
    Dim GroupLevels(1 To 3lvlCount) 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 
 



Вам так же понадобится этот файл, для определения форматирования в ячейках, скачайте его себе:

View file
nameПроверка формата ячейки.xlsm
height250


Что нужно делать:

1. Скопируйте текст макроса в блокнот, можете использовать для этого программу-блокнот с подсветкой синтаксиса, например Notepad++

Установите в нем синтаксис Visual Basic

Image Added


В макросе укажите:

Количество уровней групп, которые собираетесь загружать из прайса

Image Added


Номер колонки в которой цена товара

Image Added


Номер колонки, в которую будет помещен код уровня группировки:

Image Added

Здесь нужно указать какую-то пустую колонку, после всех колонок прайса. Указывайте с запасом, на случай, если поставщик добавит в прайс колонки, чтобы не переделывать макрос. Обычно указывается 20-ая колонка, если в прайсе колонок меньше.


Укажите номер строки, с которой начинается прайс (первая строка после шапки)

Image Added


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

Image Added

Блоки эти нужно брать из файла "Проверка формата ячейки"


2. Откройте файл "Проверка формата ячейки"

В этом файле нужно получить код для каждого уровня группировки. Пример прайса, в котором каждый уровень группировки обозначен с помощью различного цвета ячейки:

Image Added


Копируем ячейку с названием первого уровня групп (если в экселе для названия группы объединено несколько ячеек, то их нужно разъединить)

Image Added

после этого скопировать

Image Added

и вставить в файл с макросом проверки, ввести номер уровня группы и нажать "Проверить"

Image Added

в результате получим код, который нужно скопировать в макрос для прайса:

Image Added