Добрый день! Имеется прайс. Из которого необходимо сделать электронное формирование спецификации. Т.е. Имена групп и подгрупп должны быть связаны с основными позициями прайса. Файл во вложении, надеюсь задача будет понятна. К сожалению я никак не могу понять, как работают функции СМЕЩ(), ДВССЫЛ(), ВПР(). Точнее в ВПР я более или менее разобралась и то не до конца.
Добрый день! Имеется прайс. Из которого необходимо сделать электронное формирование спецификации. Т.е. Имена групп и подгрупп должны быть связаны с основными позициями прайса. Файл во вложении, надеюсь задача будет понятна. К сожалению я никак не могу понять, как работают функции СМЕЩ(), ДВССЫЛ(), ВПР(). Точнее в ВПР я более или менее разобралась и то не до конца.yuka
я понимаю, что это работа не 5 минут)). Сама когда-то на Delphi делала подобную сортировку данных. Только там в разы это проще, чем не зная как это делать сейчас.
Может вопрос по-проще... Возможно ли макросом при просмотре всех данных сделать именованные диапазоны? Только в третьем уровне (т.е. по моему файлу: {Текст 1; Текст 2; Текст; и т.д.}? Как это сделать? Будут ли они динамическими?
я понимаю, что это работа не 5 минут)). Сама когда-то на Delphi делала подобную сортировку данных. Только там в разы это проще, чем не зная как это делать сейчас.
Может вопрос по-проще... Возможно ли макросом при просмотре всех данных сделать именованные диапазоны? Только в третьем уровне (т.е. по моему файлу: {Текст 1; Текст 2; Текст; и т.д.}? Как это сделать? Будут ли они динамическими?yuka
Сообщение отредактировал yuka - Вторник, 27.11.2012, 13:51
yuka, 1. Вы просите МАКРОСОМ, а выкладываете файл XLSX А вообще-то лучше бы в XLS выложили - больше было бы пытающихся помочь. 2. Посмотреть внимательно Ваш файл не могу (на работе сейчас завал, а дома только Офис-2003), но могу посоветовать посмотреть про создание выпадающих списков на очень полезном ресурсе Что умеет Excel
yuka, 1. Вы просите МАКРОСОМ, а выкладываете файл XLSX А вообще-то лучше бы в XLS выложили - больше было бы пытающихся помочь. 2. Посмотреть внимательно Ваш файл не могу (на работе сейчас завал, а дома только Офис-2003), но могу посоветовать посмотреть про создание выпадающих списков на очень полезном ресурсе Что умеет ExcelAlex_ST
Я вообще не понимаю в деталях задачу - что имеем, что нужно получить. Но если есть опыт на Delphi, то почему бы не делать макросом? Алгоритм ведь вероятно можно использовать один? Я вижу так сразу два варианта - или словарь словаря в словаре , или перебор значений типа "1|2|3|4" и создание динамического словаря, из которого даём выбирать юзеру. Т.е. есть массив 70 строк - сперва показываем уникальные первые части, после выбора показываем уникальные вторые, с условием что первая=выбранная, далее аналогично.
Я вообще не понимаю в деталях задачу - что имеем, что нужно получить. Но если есть опыт на Delphi, то почему бы не делать макросом? Алгоритм ведь вероятно можно использовать один? Я вижу так сразу два варианта - или словарь словаря в словаре , или перебор значений типа "1|2|3|4" и создание динамического словаря, из которого даём выбирать юзеру. Т.е. есть массив 70 строк - сперва показываем уникальные первые части, после выбора показываем уникальные вторые, с условием что первая=выбранная, далее аналогично.Hugo
Я вообще не понимаю в деталях задачу - что имеем, что нужно получить. Но если есть опыт на Delphi, то почему бы не делать макросом? Алгоритм ведь вероятно можно использовать один?
Да, алгоритм можно использовать один... но в Delphi я работала с таблицами и отфильтровывала таблицу по данному значению. Возможно здесь можно это сделать, но плохо знаю команды VBA, в них еще ведутся "раскопки" Тут есть список, нет таблиц. Т.е. отсортировать значения по выбранному полю я не знаю как.
Quote
Т.е. есть массив 70 строк - сперва показываем уникальные первые части, после выбора показываем уникальные вторые, с условием что первая=выбранная, далее аналогично.
Да, это и надо сделать.... Но у меня не фиксированное значение строк. И потом как создать из уникальных первых частей список без пустых строк?
Quote
Я вообще не понимаю в деталях задачу - что имеем, что нужно получить. Но если есть опыт на Delphi, то почему бы не делать макросом? Алгоритм ведь вероятно можно использовать один?
Да, алгоритм можно использовать один... но в Delphi я работала с таблицами и отфильтровывала таблицу по данному значению. Возможно здесь можно это сделать, но плохо знаю команды VBA, в них еще ведутся "раскопки" Тут есть список, нет таблиц. Т.е. отсортировать значения по выбранному полю я не знаю как.
Quote
Т.е. есть массив 70 строк - сперва показываем уникальные первые части, после выбора показываем уникальные вторые, с условием что первая=выбранная, далее аналогично.
Да, это и надо сделать.... Но у меня не фиксированное значение строк. И потом как создать из уникальных первых частей список без пустых строк?yuka
Потом, если, коли не получится сделать "идеально" с первым моим вопросом
Quote
сперва показываем уникальные первые части, после выбора показываем уникальные вторые, с условием что первая=выбранная, далее аналогично.
, может попробовать создать наподобие того, что я хочу: вывести оглавление прайса и под заголовками конечного уровня создать раскрывающиеся списки.
.... только в последнем случае, придется искать начало группы, конец группы, присваивать имя диапазону, а потом каким-то макаром указывать это имя для раскрывающегося списка....
Уфф... честно говоря мозг взрывается уже...)))
Потом, если, коли не получится сделать "идеально" с первым моим вопросом
Quote
сперва показываем уникальные первые части, после выбора показываем уникальные вторые, с условием что первая=выбранная, далее аналогично.
, может попробовать создать наподобие того, что я хочу: вывести оглавление прайса и под заголовками конечного уровня создать раскрывающиеся списки.
.... только в последнем случае, придется искать начало группы, конец группы, присваивать имя диапазону, а потом каким-то макаром указывать это имя для раскрывающегося списка....
Так Вы пока не сказали предельно ясно - что есть, что нужно получить. Если есть конкретный диапазон с дырами - нужно как-то перебором эти дыры в массиве данных заполнить. Или проще это сделать вручную на листе. Я бы сделал на листе, вручную
Так Вы пока не сказали предельно ясно - что есть, что нужно получить. Если есть конкретный диапазон с дырами - нужно как-то перебором эти дыры в массиве данных заполнить. Или проще это сделать вручную на листе. Я бы сделал на листе, вручную Hugo
Вот такой вариант: начальн. список в Н3 создается кнопкой ("i"), а списки в I3, J3, K3 формируются в завис-ти от выбранного знач-я в H3, I3, J3 соотв-но.
Вот такой вариант: начальн. список в Н3 создается кнопкой ("i"), а списки в I3, J3, K3 формируются в завис-ти от выбранного знач-я в H3, I3, J3 соотв-но.nilem
Вот такой вариант: начальн. список в Н3 создается кнопкой ("i"), а списки в I3, J3, K3 формируются в завис-ти от выбранного знач-я в H3, I3, J3 соотв-но.
Спасибо огромное! Задача выполняется так, как мне надо, но есть кое-какие вопросы. Есть ли возможность на них ответить? На крайний случай, мы не найдем на них ответы, буду дорабатывать то, что есть.
1. Т.к. работа с прайсом, то есть артикулы. Артикулы почему-то в ниспадающем списке пишутся в следующую строчку, можно ли записать их вместе с позицией? 2. Есть ли возможность разнести создание спецификации и сам прайс на разные листы книги? Что необходимо изменить в кодах макросов, чтобы все также работало после переноса?
Про команды макросов, которые мне непонятны спрашивать пока не буду...))) А то это уже совсем другая история получится.
Quote (nilem)
Вот такой вариант: начальн. список в Н3 создается кнопкой ("i"), а списки в I3, J3, K3 формируются в завис-ти от выбранного знач-я в H3, I3, J3 соотв-но.
Спасибо огромное! Задача выполняется так, как мне надо, но есть кое-какие вопросы. Есть ли возможность на них ответить? На крайний случай, мы не найдем на них ответы, буду дорабатывать то, что есть.
1. Т.к. работа с прайсом, то есть артикулы. Артикулы почему-то в ниспадающем списке пишутся в следующую строчку, можно ли записать их вместе с позицией? 2. Есть ли возможность разнести создание спецификации и сам прайс на разные листы книги? Что необходимо изменить в кодах макросов, чтобы все также работало после переноса?
Про команды макросов, которые мне непонятны спрашивать пока не буду...))) А то это уже совсем другая история получится.yuka
Артикулы пишутся в отдельную строку, потому что они отделены запятой (ну, такой подход в макросе). Можно заменить запятые на, например, пробелы вот так: [vba]
Code
Sub rty() Range("A1").CurrentRegion.Replace ",", " ", 2 End Sub
[/vba] И еще нюанс. Длина строки s (в коде Formula1:=s) не м.б. более 255 символов (для Е2003). Т.е., если отсутствие запятых в тексте и длина строки в раср. списках не критичны, то можно оставить, как есть. Иначе нужно будет использовать комбобоксы - с ними можно разгуляться, как хошь ПС Удалите имена в Вашем файле, размер немного сократится.
Артикулы пишутся в отдельную строку, потому что они отделены запятой (ну, такой подход в макросе). Можно заменить запятые на, например, пробелы вот так: [vba]
Code
Sub rty() Range("A1").CurrentRegion.Replace ",", " ", 2 End Sub
[/vba] И еще нюанс. Длина строки s (в коде Formula1:=s) не м.б. более 255 символов (для Е2003). Т.е., если отсутствие запятых в тексте и длина строки в раср. списках не критичны, то можно оставить, как есть. Иначе нужно будет использовать комбобоксы - с ними можно разгуляться, как хошь ПС Удалите имена в Вашем файле, размер немного сократится.nilem
Спасибо! Столкнулась с такой проблемой, 1) если к примеру нет третьего уровня заголовков, скажем: "Заголовок 2.1.1 ", то самый нижний подуровень не заполняется. Возможно ли с этим что-то делать? Отсутствовать может только заголовок 3 уровня. Я чуть изменила код листа
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("B:E")) Is Nothing Then Exit Sub If Target.Value = vbNullString Then Exit Sub Dim r As Range, s$ With Sheets("Лист1").Columns(Target.Column - 1).Find(Target.Value, LookAt:=xlWhole) Set r = Intersect(Sheets("Лист1").UsedRange, Sheets("Лист1").Range(.Item(1), .Item(1).End(xlDown))).Offset(, 1) End With
s = F_conc_col_noblanks_sep_snb(r, ",")
With Target.Next If Target.Column = 5 Then Exit Sub .Value = "" With .Validation .Delete If s <> vbNullString Then .Add Type:=xlValidateList, Formula1:=s End With End With
End Sub
[/vba] Необходимо добавить условие на проверку, чтобы миновать 3 столбец и пустую переменную s и не завершая программы перейти на 5 столбец. Как это сделать?
Спасибо! Столкнулась с такой проблемой, 1) если к примеру нет третьего уровня заголовков, скажем: "Заголовок 2.1.1 ", то самый нижний подуровень не заполняется. Возможно ли с этим что-то делать? Отсутствовать может только заголовок 3 уровня. Я чуть изменила код листа
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("B:E")) Is Nothing Then Exit Sub If Target.Value = vbNullString Then Exit Sub Dim r As Range, s$ With Sheets("Лист1").Columns(Target.Column - 1).Find(Target.Value, LookAt:=xlWhole) Set r = Intersect(Sheets("Лист1").UsedRange, Sheets("Лист1").Range(.Item(1), .Item(1).End(xlDown))).Offset(, 1) End With
s = F_conc_col_noblanks_sep_snb(r, ",")
With Target.Next If Target.Column = 5 Then Exit Sub .Value = "" With .Validation .Delete If s <> vbNullString Then .Add Type:=xlValidateList, Formula1:=s End With End With
End Sub
[/vba] Необходимо добавить условие на проверку, чтобы миновать 3 столбец и пустую переменную s и не завершая программы перейти на 5 столбец. Как это сделать?yuka
Сообщение отредактировал yuka - Среда, 28.11.2012, 17:11