Здравствуйте. Прошу Вас если возможно, помочь реализовать создание умной очередности, описание задачи и пример в приложенном файле. Так же прошу, если это невозможно сделать по моему примеру, направить меня куда нибудь в правильном направлении :-) Заранее благодарен С уважением, Артем
Здравствуйте. Прошу Вас если возможно, помочь реализовать создание умной очередности, описание задачи и пример в приложенном файле. Так же прошу, если это невозможно сделать по моему примеру, направить меня куда нибудь в правильном направлении :-) Заранее благодарен С уважением, Артемartika2000
Если использовать умную таблицу, то можно попробовать решить Вашу задачу с помощью формул. Умная таблица вставляется так: вкладка "Главная"- Форматировать как таблицу.
Если использовать умную таблицу, то можно попробовать решить Вашу задачу с помощью формул. Умная таблица вставляется так: вкладка "Главная"- Форматировать как таблицу.Karataev
Karataev, Здравствуйте. спасибо за быстрый ответ, но не работает такой момент. если я 3 по очереди заказ хочу сделать первым, и вручную меняю 3 на 1, то первый заказ - вторым не становится и все остальные не меняют очередность
Karataev, Здравствуйте. спасибо за быстрый ответ, но не работает такой момент. если я 3 по очереди заказ хочу сделать первым, и вручную меняю 3 на 1, то первый заказ - вторым не становится и все остальные не меняют очередностьartika2000
Nic70y, Здравствуйте. И Вам спасибо за ответ, но не понимаю, как меняется очередь в Вашем примере? где изменяется порядковая очередь в Вашем примере остальных заказов? Извините, может у Вас это получается а у меня нет? Может мне нужен более поздний excel?
Nic70y, Здравствуйте. И Вам спасибо за ответ, но не понимаю, как меняется очередь в Вашем примере? где изменяется порядковая очередь в Вашем примере остальных заказов? Извините, может у Вас это получается а у меня нет? Может мне нужен более поздний excel?artika2000
Сообщение отредактировал artika2000 - Воскресенье, 19.03.2017, 13:45
Wasilich, Добрый день Вам. Спасибо Вам за Ваши мысли в выходной день. Вы не первый раз помогаете. я чувствую, что где-то все близко очень, но все-таки чуть не то. После некоторого ввода данных вручную в столбец "очередность"действительно, позиции выходят на номер очередности, Вы здесь правильно поняли меня. Но , Если я меняю заказ стоящий в очереди 15м на 3ий, то если посмотреть на очередность, становится 2а "третьих" заказа и ни одного 15го. И тогда получается, что в очереди стоит два "третьих" заказа, а ведь один из них должен стать 4-ым, а тот который был 14ым - должен стать 15ым, то есть в столбце "очередность" должны быть все номера 1,2,3,4,5,6,7,8,9,10,11,12...n,...(n-количество заказов)..... . То есть не обязательно они должны быть по порядку, но в очередности не может быть два "третьих" по очереди заказа.. Так же попробовал удалить заказ с очередностью 10 - но вот 11ый заказ при этом не стал 10-ым, а 12-11ым, 18-17ым по аналогии Я очень надеюсь что смог объяснить Вам, и я чувствую что Вы рядом в решении. Спасибо еще раз Вам за работу в выходной день
Wasilich, Добрый день Вам. Спасибо Вам за Ваши мысли в выходной день. Вы не первый раз помогаете. я чувствую, что где-то все близко очень, но все-таки чуть не то. После некоторого ввода данных вручную в столбец "очередность"действительно, позиции выходят на номер очередности, Вы здесь правильно поняли меня. Но , Если я меняю заказ стоящий в очереди 15м на 3ий, то если посмотреть на очередность, становится 2а "третьих" заказа и ни одного 15го. И тогда получается, что в очереди стоит два "третьих" заказа, а ведь один из них должен стать 4-ым, а тот который был 14ым - должен стать 15ым, то есть в столбце "очередность" должны быть все номера 1,2,3,4,5,6,7,8,9,10,11,12...n,...(n-количество заказов)..... . То есть не обязательно они должны быть по порядку, но в очередности не может быть два "третьих" по очереди заказа.. Так же попробовал удалить заказ с очередностью 10 - но вот 11ый заказ при этом не стал 10-ым, а 12-11ым, 18-17ым по аналогии Я очень надеюсь что смог объяснить Вам, и я чувствую что Вы рядом в решении. Спасибо еще раз Вам за работу в выходной деньartika2000
Wasilich, если представить живую очередь из 20 человек, если первый человек ушел, то первым стал "второй", и у всех следующих - поменялся номер очереди, если потом ушел 10ый, то 11ый стал десятым. а если вдруг первый вспомнил что забыл паспорт, и попросил его принести кого то и переместился сам назад 3им, то второй в очереди станет первым, а 3ий - четвертым. Если 13ый уйдет просто из очереди то вся очередь сместится (14 станет 13ым и тд) Еще раз надеюсь что объяснил верно и понятно. Спасибо Вам еще раз
Wasilich, если представить живую очередь из 20 человек, если первый человек ушел, то первым стал "второй", и у всех следующих - поменялся номер очереди, если потом ушел 10ый, то 11ый стал десятым. а если вдруг первый вспомнил что забыл паспорт, и попросил его принести кого то и переместился сам назад 3им, то второй в очереди станет первым, а 3ий - четвертым. Если 13ый уйдет просто из очереди то вся очередь сместится (14 станет 13ым и тд) Еще раз надеюсь что объяснил верно и понятно. Спасибо Вам еще разartika2000
Да уж, сразу не сообразил. А сейчас понял, что задача сложнее чем показалось и пока не соображу, смогу ли сообразить. Придется переписывать очередь. Надо подумать как.
Да уж, сразу не сообразил. А сейчас понял, что задача сложнее чем показалось и пока не соображу, смогу ли сообразить. Придется переписывать очередь. Надо подумать как.Wasilich
А если немножко изменить подход? Оператор будет не вводить номер очереди, а, не трогая номер, вырезать строку и переставлять в новое нужное место? Тогда возможна такая реализация: в B2:
А если немножко изменить подход? Оператор будет не вводить номер очереди, а, не трогая номер, вырезать строку и переставлять в новое нужное место? Тогда возможна такая реализация: в B2:
Perfect2You, Здравствуйте! Спасибо и Вам за неравнодушие. Как Вы описали у меня не работает, не получилось, но попробую вытянуть что-то и из Вашей формулы. Да, Вариант с вырезанием строки тоже "имеет место быть", но здесь все уходит в частный случай. Пример мой приведен на очень, очень маленькой БД, как пример и ничего общего со структурой, к которой я хочу привязать эту мысль - не имеет. Из приведенного примера я хочу вытащить буквально только идею.
Я думаю, задача будет упрощена, если количество заказов n (номера 1,2,3,4,5,6,7,8,9,10,11,12...n,...(n-количество заказов) будет ограничено например каким то максимумом, например 1000, и тогда вероятно проще на заданном интервале получить результат. Но тут ведь 2е стороны - и мы не знаем, а вдруг мы выйдем за эти границы?, будет ли это корректным, можно ли всегда предполагать что n<1000 В общем Perfect2You спасибо Вам. Еще поработаем.
Perfect2You, Здравствуйте! Спасибо и Вам за неравнодушие. Как Вы описали у меня не работает, не получилось, но попробую вытянуть что-то и из Вашей формулы. Да, Вариант с вырезанием строки тоже "имеет место быть", но здесь все уходит в частный случай. Пример мой приведен на очень, очень маленькой БД, как пример и ничего общего со структурой, к которой я хочу привязать эту мысль - не имеет. Из приведенного примера я хочу вытащить буквально только идею.
Я думаю, задача будет упрощена, если количество заказов n (номера 1,2,3,4,5,6,7,8,9,10,11,12...n,...(n-количество заказов) будет ограничено например каким то максимумом, например 1000, и тогда вероятно проще на заданном интервале получить результат. Но тут ведь 2е стороны - и мы не знаем, а вдруг мы выйдем за эти границы?, будет ли это корректным, можно ли всегда предполагать что n<1000 В общем Perfect2You спасибо Вам. Еще поработаем.artika2000
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim wb, sh, lr, rg As Range, str, f, tekN, rt, k If Target.Columns().Count > 1 Or Target.Rows().Count > 1 Then GoTo ex wb = ThisWorkbook.Name sh = ActiveSheet.Name lr = Workbooks(wb).Sheets(sh).Cells(Rows.Count, 3).End(xlUp).Row If Target.Column = 3 Then If Target.Value < 1 Or Target.Value > lr + 1 Or Target.Value = Empty Then GoTo ex tekN = Target.Value + 1 rt = Target.Row Application.CutCopyMode = False Workbooks(wb).Sheets(sh).Rows(rt).Cut Workbooks(wb).Sheets(sh).Rows(tekN).Insert Shift:=xlDown For f = 1 To lr - 1 Workbooks(wb).Sheets(sh).Cells(f + 1, 3).Value = f Next f End If If Target.Column = 1 Or Target.Column = 2 Then rt = Target.Row If Workbooks(wb).Sheets(sh).Cells(rt, 1) <> "" And Workbooks(wb).Sheets(sh).Cells(rt, 2).Value <> "" Then Workbooks(wb).Sheets(sh).Cells(rt, 3).Value = lr End If ex: wb = ThisWorkbook.Name sh = ActiveSheet.Name lr = Workbooks(wb).Sheets(sh).Cells(Rows.Count, 3).End(xlUp).Row k = 1 For f = 1 To lr - 1 If Workbooks(wb).Sheets(sh).Cells(f, 1) <> "" And Workbooks(wb).Sheets(sh).Cells(f, 2).Value <> "" Then Workbooks(wb).Sheets(sh).Cells(f + 1, 3).Value = k: k = k + 1 Next f Application.EnableEvents = True End Sub
[/vba]
вроде работет как написано
а так?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim wb, sh, lr, rg As Range, str, f, tekN, rt, k If Target.Columns().Count > 1 Or Target.Rows().Count > 1 Then GoTo ex wb = ThisWorkbook.Name sh = ActiveSheet.Name lr = Workbooks(wb).Sheets(sh).Cells(Rows.Count, 3).End(xlUp).Row If Target.Column = 3 Then If Target.Value < 1 Or Target.Value > lr + 1 Or Target.Value = Empty Then GoTo ex tekN = Target.Value + 1 rt = Target.Row Application.CutCopyMode = False Workbooks(wb).Sheets(sh).Rows(rt).Cut Workbooks(wb).Sheets(sh).Rows(tekN).Insert Shift:=xlDown For f = 1 To lr - 1 Workbooks(wb).Sheets(sh).Cells(f + 1, 3).Value = f Next f End If If Target.Column = 1 Or Target.Column = 2 Then rt = Target.Row If Workbooks(wb).Sheets(sh).Cells(rt, 1) <> "" And Workbooks(wb).Sheets(sh).Cells(rt, 2).Value <> "" Then Workbooks(wb).Sheets(sh).Cells(rt, 3).Value = lr End If ex: wb = ThisWorkbook.Name sh = ActiveSheet.Name lr = Workbooks(wb).Sheets(sh).Cells(Rows.Count, 3).End(xlUp).Row k = 1 For f = 1 To lr - 1 If Workbooks(wb).Sheets(sh).Cells(f, 1) <> "" And Workbooks(wb).Sheets(sh).Cells(f, 2).Value <> "" Then Workbooks(wb).Sheets(sh).Cells(f + 1, 3).Value = k: k = k + 1 Next f Application.EnableEvents = True End Sub