...
В колонке B в данном прайсе находится и название группы в отдельных строках и название товара - нужно одну и ту же колонку указывать и в поле "Название группы" и "Название", т.е. ничего страшного, программа определит где группа, а где товар, по колонке цены. Там где цены нет (пусто в колонке) - будет считаться группа, где есть цена - товар.
Определение группировки по форматированию
Часто в прайсах указывают группы, которые не сгруппированы средствами Excel, но текст в каждом уровне имеет разное форматирование (разный шрифт, или цвет шрифта, или цвет ячейки, или разные отступы от начала ячейки). В этом случае группы можно загрузить, но для этого нужно составить макрос.
Текст макроса:
Expand |
---|
|
Code Block |
---|
language | vb |
---|
firstline | 1 |
---|
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
|
|