Такая задача. Есть прайст лист, в котором много тысяч строчек. Нужно сделать оглавление для него на основе заголовков категории товаров, которые выставлены в столбике С (прикрепил файл с таблицей, там всё видно).
Я решил делать так. Я собрал все заголовки категорий из столбика C, вынес их в отдельный лист и написал макрос, который вставляет ссылки на ячейки этих заголовков.
Макрос выполняет такой алгоритм: 1. Берёт текст каждой ячейки из листа "Содержание 2. Ищет этот текст в столбике С (в котором содержатся заголовки категорий) листа "Прайс лист" 3. В тех ячейках, в которых текст совпал, программа вставляет ссылку. Т.е. в ячейку из "Содержания" вставляется ссылка на подошедшую ячейку из прайс-листа
Вот такой код я состряпал: [vba]
Код
Sub Find_n_PastLink()
Dim rangContent As Range, rangPrice As Range, oWbk As Excel.Workbook, cell As Range, RecRow
Set PriceSheet = ActiveSheet Set ContentSheet = oWbk.Worksheets.Item("Содержание") ' На самом деле лист по-другому называется, тут для наглядности поставил Set rangContent = ContentSheet.Range([A2], Range("A" & Rows.Count).End(xlUp)) Set rangPrice = PriceSheet.Range([C11], Range("C" & Rows.Count).End(xlUp))
For CRow = 1 To 360 ' нужно пройтись циклом до конца столбца, не знаю как это сделать, поэтому поставил цифру побольше RecRow = rangContent.Cells(A, CRow) For PRow = 1 To 17000 If rangContent.Cells(A, CRow).Text Like rangPrice.Cells(C, PRow).Text
Проблема в том, что в VBA я вообще не шарю, в коде наделал ошибок. Пожалуйста, помогите мне исправить код, чтобы всё работало [moder]Вам замечание за кросс без уведомления. Это нарушение правил форума.[/moder]
Такая задача. Есть прайст лист, в котором много тысяч строчек. Нужно сделать оглавление для него на основе заголовков категории товаров, которые выставлены в столбике С (прикрепил файл с таблицей, там всё видно).
Я решил делать так. Я собрал все заголовки категорий из столбика C, вынес их в отдельный лист и написал макрос, который вставляет ссылки на ячейки этих заголовков.
Макрос выполняет такой алгоритм: 1. Берёт текст каждой ячейки из листа "Содержание 2. Ищет этот текст в столбике С (в котором содержатся заголовки категорий) листа "Прайс лист" 3. В тех ячейках, в которых текст совпал, программа вставляет ссылку. Т.е. в ячейку из "Содержания" вставляется ссылка на подошедшую ячейку из прайс-листа
Вот такой код я состряпал: [vba]
Код
Sub Find_n_PastLink()
Dim rangContent As Range, rangPrice As Range, oWbk As Excel.Workbook, cell As Range, RecRow
Set PriceSheet = ActiveSheet Set ContentSheet = oWbk.Worksheets.Item("Содержание") ' На самом деле лист по-другому называется, тут для наглядности поставил Set rangContent = ContentSheet.Range([A2], Range("A" & Rows.Count).End(xlUp)) Set rangPrice = PriceSheet.Range([C11], Range("C" & Rows.Count).End(xlUp))
For CRow = 1 To 360 ' нужно пройтись циклом до конца столбца, не знаю как это сделать, поэтому поставил цифру побольше RecRow = rangContent.Cells(A, CRow) For PRow = 1 To 17000 If rangContent.Cells(A, CRow).Text Like rangPrice.Cells(C, PRow).Text
Проблема в том, что в VBA я вообще не шарю, в коде наделал ошибок. Пожалуйста, помогите мне исправить код, чтобы всё работало [moder]Вам замечание за кросс без уведомления. Это нарушение правил форума.[/moder]dredder_gun
Ну поскольку уже сделал то вот: Я видел такого плана прайсы - так вот там содержание не на отдельном листе - а строки сгруппированы - так удобнее смотреть. [vba]
Код
Sub d() Dim i&, n&, j% With ActiveSheet n = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 11 To n j = .Cells(i, 2).Font.Size If j = 12 Then .Cells(i, 2).EntireRow.OutlineLevel = 2 If j = 8 Then .Cells(i, 2).EntireRow.OutlineLevel = 3 Next .Outline.ShowLevels RowLevels:=2: .Outline.ShowLevels RowLevels:=1 .Outline.SummaryRow = xlAbove End With End Sub
[/vba] См пример.
Ну поскольку уже сделал то вот: Я видел такого плана прайсы - так вот там содержание не на отдельном листе - а строки сгруппированы - так удобнее смотреть. [vba]
Код
Sub d() Dim i&, n&, j% With ActiveSheet n = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 11 To n j = .Cells(i, 2).Font.Size If j = 12 Then .Cells(i, 2).EntireRow.OutlineLevel = 2 If j = 8 Then .Cells(i, 2).EntireRow.OutlineLevel = 3 Next .Outline.ShowLevels RowLevels:=2: .Outline.ShowLevels RowLevels:=1 .Outline.SummaryRow = xlAbove End With End Sub