Всем привет! Придумал опять для себя задачу, которую пока сам же не могу понять как ее решить. Возможно придется все начинать с нуля. Поэтому прошу в очередной раз помочь советом.
В таблице 1 пользователь выбирает состав изделий кликом по ячейкам, соответствующим нужным деталям. Если деталь какая либо деталь выбрана, соответственно изделие считается выбранным. В таблице 1 изделию и детали присваивается порядковый номер для дальнейшего использования этих номеров в функции ВПР в таблице 2.
В таблице 2 пользователь указывает количество изделий и выбирает кликом по соответствующим ячейкам цвет деталей. И после этого возникает загвоздка если пользователь вдруг решает отказаться от какой либо детали или изделия, или наоборот решит добавить в состав изделия еще деталь или в заказ изделие. Например, пользователь двойным кликом отменяет все детали в изделии 1 в таблице 1, в таблице 2 получается следующее: изделие1 с порядковым номером 1 исключается из заказа, за порядковым номером 1 закрепляется другое изделие - изделие2, все свойства изделия1 присваиваются изделию2, изделия2 изделию3 и т.д., т.е. получается сдвиг в не ту сторону что хотелось бы. Надо что бы количество изделия1 и цвета его деталей были исключены из таблицы2, а изделия2 изделия3 и т.д. перенеслись в соответствующие строки. Вот как это сделать я даже представить не могу. Подскажите пожалуйста.
Всем привет! Придумал опять для себя задачу, которую пока сам же не могу понять как ее решить. Возможно придется все начинать с нуля. Поэтому прошу в очередной раз помочь советом.
В таблице 1 пользователь выбирает состав изделий кликом по ячейкам, соответствующим нужным деталям. Если деталь какая либо деталь выбрана, соответственно изделие считается выбранным. В таблице 1 изделию и детали присваивается порядковый номер для дальнейшего использования этих номеров в функции ВПР в таблице 2.
В таблице 2 пользователь указывает количество изделий и выбирает кликом по соответствующим ячейкам цвет деталей. И после этого возникает загвоздка если пользователь вдруг решает отказаться от какой либо детали или изделия, или наоборот решит добавить в состав изделия еще деталь или в заказ изделие. Например, пользователь двойным кликом отменяет все детали в изделии 1 в таблице 1, в таблице 2 получается следующее: изделие1 с порядковым номером 1 исключается из заказа, за порядковым номером 1 закрепляется другое изделие - изделие2, все свойства изделия1 присваиваются изделию2, изделия2 изделию3 и т.д., т.е. получается сдвиг в не ту сторону что хотелось бы. Надо что бы количество изделия1 и цвета его деталей были исключены из таблицы2, а изделия2 изделия3 и т.д. перенеслись в соответствующие строки. Вот как это сделать я даже представить не могу. Подскажите пожалуйста.Sancho
Сообщение отредактировал Sancho - Среда, 06.09.2017, 14:27
Но это уже довольно большая задача получится, если все красиво и как нужно делать Если ничего не менять особо, то вот такой вариант Кстати, там у Вас еще ВПР не всегда из-за округления работает. Я править не стал, все равно все это нужно переделывать
Но это уже довольно большая задача получится, если все красиво и как нужно делать Если ничего не менять особо, то вот такой вариант Кстати, там у Вас еще ВПР не всегда из-за округления работает. Я править не стал, все равно все это нужно переделывать_Boroda_
Кстати, там у Вас еще ВПР не всегда из-за округления работает
я что то не могу Вашу мысль уловить. В таблице 1 выбранному изделия присваивался порядковый номер, по которому ВПР и осуществлял поиск изделия, а затем детали. вы изменили поиск по "коду" изделия и теперь отменяя все детали в таблице 1 изделия остаются а должны "уйти" из таблицы 2. Возможно я опять недосказал вводные данные посчитав их некритичными и увлекся вычищая файл до требуемых форумом размеров: изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть
Ну и добавив УФ по пустому значению в столбце с деталями не получилось результата, убирая деталь из изделия ее выбранный цвет попадает на другую деталь которая занимает её место
Кстати, там у Вас еще ВПР не всегда из-за округления работает
я что то не могу Вашу мысль уловить. В таблице 1 выбранному изделия присваивался порядковый номер, по которому ВПР и осуществлял поиск изделия, а затем детали. вы изменили поиск по "коду" изделия и теперь отменяя все детали в таблице 1 изделия остаются а должны "уйти" из таблицы 2. Возможно я опять недосказал вводные данные посчитав их некритичными и увлекся вычищая файл до требуемых форумом размеров: изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть
Ну и добавив УФ по пустому значению в столбце с деталями не получилось результата, убирая деталь из изделия ее выбранный цвет попадает на другую деталь которая занимает её местоSancho
изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть
Воот! Вот этот момент нужно было особо овозначить. Я, например, предположил, что это необязательное условие и можно не уменьшать вторую таблицу. Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2
изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть
Воот! Вот этот момент нужно было особо овозначить. Я, например, предположил, что это необязательное условие и можно не уменьшать вторую таблицу. Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2_Boroda_
Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2
Мысль кстати интересная, почему бы действительно и нет. предложу руководству, что скажут, боюсь только что отметут.
Пока придумал и пытаюсь реализовать следующий алгоритм: установить коды для деталей, разнести таблицы по разным листам, установить счетчик выбранного цвета, если больше нуля то при активации листа с таблицей 1 копировать данные на вспомогательный лист, а по возвращению на лист с таблицей 2 осуществлять поиск по коду детали и подставлять данные из вспомогательного листа... как то так.
Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2
Мысль кстати интересная, почему бы действительно и нет. предложу руководству, что скажут, боюсь только что отметут.
Пока придумал и пытаюсь реализовать следующий алгоритм: установить коды для деталей, разнести таблицы по разным листам, установить счетчик выбранного цвета, если больше нуля то при активации листа с таблицей 1 копировать данные на вспомогательный лист, а по возвращению на лист с таблицей 2 осуществлять поиск по коду детали и подставлять данные из вспомогательного листа... как то так.Sancho
Всем привет! задачу реализовать получилось. на листе с таблицей1 код [vba]
Код
Sub Worksheet_activate() If Flag Then Flag = 0 Exit Sub Else Flag = 1 If ff2.Range("AH5").Value = 0 Then Exit Sub Application.ScreenUpdating = False ff2.Range("AG6:AI105").Copy FF6.Range("A1").PasteSpecial Paste:=xlPasteValues iNumClick = False Application.CutCopyMode = False Application.ScreenUpdating = True End If End Sub
[/vba]
на листе с таблицей2 код [vba]
Код
Sub Worksheet_activate()
Dim cc1 As Range, X If iNumClick = 0 Then Exit Sub Application.ScreenUpdating = False
ff2.Range("A6:A105,Ac6:af105").Value = "" For i = 6 To 105 X = ff2.Cells(i, 33).Value If X = "" Then GoTo A
With FF6.Range("A1:A100") Set cc1 = .Find(X) End With If Not cc1 Is Nothing Then
Z = FF6.Cells(cc1.Row, 2).Value Z2 = FF6.Cells(cc1.Row, 3).Value
If Z2 > 0 Then If i >= 6 And i < 16 And ff2.Cells(6, 1).Value = 0 Then ' ff2.Cells(6, 1).Value = Z2 ElseIf i >= 16 And i < 26 And ff2.Cells(16, 1).Value = 0 Then ff2.Cells(16, 1).Value = Z2 ElseIf i >= 26 And i < 36 And ff2.Cells(26, 1).Value = 0 Then ff2.Cells(26, 1).Value = Z2 ElseIf i >= 36 And i < 46 And ff2.Cells(36, 1).Value = 0 Then ff2.Cells(36, 1).Value = Z2 ElseIf i >= 46 And i < 56 And ff2.Cells(46, 1).Value = 0 Then ff2.Cells(46, 1).Value = Z2 ElseIf i >= 56 And i < 66 And ff2.Cells(56, 1).Value = 0 Then ff2.Cells(56, 1).Value = Z2 ElseIf i >= 66 And i < 76 And ff2.Cells(66, 1).Value = 0 Then ff2.Cells(66, 1).Value = Z2 ElseIf i >= 76 And i < 86 And ff2.Cells(76, 1).Value = 0 Then ff2.Cells(76, 1).Value = Z2 ElseIf i >= 86 And i < 96 And ff2.Cells(86, 1).Value = 0 Then ff2.Cells(86, 1).Value = Z2 ElseIf i >= 96 And i < 106 And ff2.Cells(96, 1).Value = 0 Then ff2.Cells(96, 1).Value = Z2 End If End If
If Z = 0 Then GoTo A
If Z = 1 Then ff2.Cells(i, 29).Value = "."
ElseIf Z = 2 Then ff2.Cells(i, 30).Value = "."
ElseIf Z = 3 Then ff2.Cells(i, 31).Value = "."
ElseIf Z = 4 Then ff2.Cells(i, 32).Value = "." End If
можно как то упростить, оптимизировать? например считаю совсем неудачную конструкцию[vba]
Код
If i >= 6 And i < 16 And ff2.Cells(6, 1).Value = 0 Then ' ff2.Cells(6, 1).Value = Z2
[/vba] и далее... хотел сделать если ячейка уже со значением (было установлено на предыдущем шаге) то дальнейшее сравнение игнорится. в итоге получил на каждом шаге цикла проверяет каждую строку условий Пока на ум приходит следующее [vba]
Код
If i >= 6 And i < 16 And ff2.Cells(6, 1).Value = 0 Then ' ff2.Cells(6, 1).Value = Z2 If i >= 6 And i < 16 And ff2.Cells(6, 1).Value <> 0 Then Goto B ....
[/vba] Шаг "B:" установить уже после этой конструкции проверки условий
Всем привет! задачу реализовать получилось. на листе с таблицей1 код [vba]
Код
Sub Worksheet_activate() If Flag Then Flag = 0 Exit Sub Else Flag = 1 If ff2.Range("AH5").Value = 0 Then Exit Sub Application.ScreenUpdating = False ff2.Range("AG6:AI105").Copy FF6.Range("A1").PasteSpecial Paste:=xlPasteValues iNumClick = False Application.CutCopyMode = False Application.ScreenUpdating = True End If End Sub
[/vba]
на листе с таблицей2 код [vba]
Код
Sub Worksheet_activate()
Dim cc1 As Range, X If iNumClick = 0 Then Exit Sub Application.ScreenUpdating = False
ff2.Range("A6:A105,Ac6:af105").Value = "" For i = 6 To 105 X = ff2.Cells(i, 33).Value If X = "" Then GoTo A
With FF6.Range("A1:A100") Set cc1 = .Find(X) End With If Not cc1 Is Nothing Then
Z = FF6.Cells(cc1.Row, 2).Value Z2 = FF6.Cells(cc1.Row, 3).Value
If Z2 > 0 Then If i >= 6 And i < 16 And ff2.Cells(6, 1).Value = 0 Then ' ff2.Cells(6, 1).Value = Z2 ElseIf i >= 16 And i < 26 And ff2.Cells(16, 1).Value = 0 Then ff2.Cells(16, 1).Value = Z2 ElseIf i >= 26 And i < 36 And ff2.Cells(26, 1).Value = 0 Then ff2.Cells(26, 1).Value = Z2 ElseIf i >= 36 And i < 46 And ff2.Cells(36, 1).Value = 0 Then ff2.Cells(36, 1).Value = Z2 ElseIf i >= 46 And i < 56 And ff2.Cells(46, 1).Value = 0 Then ff2.Cells(46, 1).Value = Z2 ElseIf i >= 56 And i < 66 And ff2.Cells(56, 1).Value = 0 Then ff2.Cells(56, 1).Value = Z2 ElseIf i >= 66 And i < 76 And ff2.Cells(66, 1).Value = 0 Then ff2.Cells(66, 1).Value = Z2 ElseIf i >= 76 And i < 86 And ff2.Cells(76, 1).Value = 0 Then ff2.Cells(76, 1).Value = Z2 ElseIf i >= 86 And i < 96 And ff2.Cells(86, 1).Value = 0 Then ff2.Cells(86, 1).Value = Z2 ElseIf i >= 96 And i < 106 And ff2.Cells(96, 1).Value = 0 Then ff2.Cells(96, 1).Value = Z2 End If End If
If Z = 0 Then GoTo A
If Z = 1 Then ff2.Cells(i, 29).Value = "."
ElseIf Z = 2 Then ff2.Cells(i, 30).Value = "."
ElseIf Z = 3 Then ff2.Cells(i, 31).Value = "."
ElseIf Z = 4 Then ff2.Cells(i, 32).Value = "." End If
можно как то упростить, оптимизировать? например считаю совсем неудачную конструкцию[vba]
Код
If i >= 6 And i < 16 And ff2.Cells(6, 1).Value = 0 Then ' ff2.Cells(6, 1).Value = Z2
[/vba] и далее... хотел сделать если ячейка уже со значением (было установлено на предыдущем шаге) то дальнейшее сравнение игнорится. в итоге получил на каждом шаге цикла проверяет каждую строку условий Пока на ум приходит следующее [vba]
Код
If i >= 6 And i < 16 And ff2.Cells(6, 1).Value = 0 Then ' ff2.Cells(6, 1).Value = Z2 If i >= 6 And i < 16 And ff2.Cells(6, 1).Value <> 0 Then Goto B ....
[/vba] Шаг "B:" установить уже после этой конструкции проверки условийSancho