Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2010, 19:57   #1
forumdin
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 10
По умолчанию От группировки строк с итогами к реляционной таблице

Доброе время суток!

Есть прайс в excel. В нем товар сгруппирован по типу товара и поставшику с помощью средства excel'я "Группа и структура", в настройках выставлено, что итоги в строках НАД данными, т.е. представляется это так
Код:
-   Тип товара1
 -  Производитель1
    Товар1
    Товар2
 -  Производитель2
    Товар3
    Товар4
-   Тип товара2
 -  Производитель3
    Товар5
    Товар6
Подскажите, пожалуйста, как программно переделать
данный прайс, чтобы от группировок перейти к реляционной таблице, т.е. тип товара и поставщик присутствовал бы в каждой строке с товаром.
т.е. нужно следующее представление:
Код:
Товар1 | Тип товара1 | Производитель1
Товар2 | Тип товара1 | Производитель1
Товар3 | Тип товара1 | Производитель2
Товар4 | Тип товара1 | Производитель2
Товар5 | Тип товара2 | Производитель3
Товар6 | Тип товара2 | Производитель3
Пример содержится в файле. Первоночальный вид на листе "Как было", а пример того, что нужно получить - на листе "Как нужно"
Вложения
Тип файла: zip primer.zip (2.4 Кб, 14 просмотров)
forumdin вне форума Ответить с цитированием
Старый 13.03.2010, 20:12   #2
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

вот как вариант. основывается на том что фон ячеек производители и группы - одинаков.
Вложения
Тип файла: rar primer.rar (13.0 Кб, 20 просмотров)
Dophin вне форума Ответить с цитированием
Старый 13.03.2010, 20:37   #3
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
Основывается на том что фон ячеек производители и группы - одинаков.
Постоянно требуется похожее решение. Если нет цвета в файле - как сделать?
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 13.03.2010, 20:51   #4
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

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

обычно всегда можно выкрутиться)
Dophin вне форума Ответить с цитированием
Старый 13.03.2010, 21:07   #5
forumdin
Пользователь
 
Регистрация: 10.03.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
вот как вариант. основывается на том что фон ячеек производители и группы - одинаков.
Спасибо, большое!
А можно ли для этих целей основываться на том, что производители и группы являются ИТОГАМИ (отмечены знаком плюс +) для своих подгрупп?
forumdin вне форума Ответить с цитированием
Старый 13.03.2010, 21:19   #6
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

может и можно, я не умею)
Dophin вне форума Ответить с цитированием
Старый 13.03.2010, 21:24   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте forumdin.
"..производители и группы являются ИТОГАМИ.." прочесть уровень группировки скорее всего можно, но мне кажется не стоит "привязываться" к структуре, как и к цвету.
Код:
Sub toTable()
Dim vArr(), i&, j%, s1$, s2$
With Sheets(1).UsedRange
    vArr = Range(Cells(2, 1), Cells(.Rows.Count + .Row, 5)).Value
End With
j = 1
For i = 1 To UBound(vArr) - 1
    If Len(vArr(i, 1) & vArr(i, 3)) = 0 Then
        If Len(vArr(i + 1, 1) & vArr(i + 1, 3)) = 0 Then _
            s1 = vArr(i, 2) Else s2 = vArr(i, 2)
        vArr(i, 2) = Empty
    Else
        vArr(j, 1) = vArr(i, 1): vArr(i, 1) = Empty
        vArr(j, 2) = vArr(i, 2): vArr(i, 2) = Empty
        vArr(j, 3) = vArr(i, 3): vArr(i, 3) = Empty
        vArr(j, 4) = s1: vArr(j, 5) = s2: j = j + 1
    End If
Next
With Sheets(2)
    .Range(.Cells(2, 1), .Cells(j + 1, 5)).Value = vArr
End With
End Sub
Евгений.

Последний раз редактировалось Teslenko_EA; 13.03.2010 в 21:29.
Teslenko_EA вне форума Ответить с цитированием
Старый 13.03.2010, 22:11   #8
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
давайте файл - придумаем ченить...

обычно всегда можно выкрутиться)

!!!!!!!!!!
Вложения
Тип файла: rar forumdin.rar (1.9 Кб, 14 просмотров)
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 13.03.2010, 23:06   #9
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

а на выходе что надо?
Dophin вне форума Ответить с цитированием
Старый 14.03.2010, 00:18   #10
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Dophin Посмотреть сообщение
а на выходе что надо?
Нижнюю табличку. Из верхней.
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление пустых строк в таблице Semen90 Microsoft Office Word 24 14.07.2022 12:28
Добавление (удаление) строк в таблице inside9 Microsoft Office Excel 29 01.01.2012 22:31
дублирование строк в таблице windrun БД в Delphi 0 27.02.2010 22:53