Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как запомнить и перенести действия пользователя в строке ВПР - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Как запомнить и перенести действия пользователя в строке ВПР
Sancho Дата: Среда, 06.09.2017, 14:19 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 282
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем привет! Придумал опять для себя задачу, которую пока сам же не могу понять как ее решить. Возможно придется все начинать с нуля. Поэтому прошу в очередной раз помочь советом.

В таблице 1 пользователь выбирает состав изделий кликом по ячейкам, соответствующим нужным деталям. Если деталь какая либо деталь выбрана, соответственно изделие считается выбранным. В таблице 1 изделию и детали присваивается порядковый номер для дальнейшего использования этих номеров в функции ВПР в таблице 2.

В таблице 2 пользователь указывает количество изделий и выбирает кликом по соответствующим ячейкам цвет деталей. И после этого возникает загвоздка если пользователь вдруг решает отказаться от какой либо детали или изделия, или наоборот решит добавить в состав изделия еще деталь или в заказ изделие. Например, пользователь двойным кликом отменяет все детали в изделии 1 в таблице 1, в таблице 2 получается следующее: изделие1 с порядковым номером 1 исключается из заказа, за порядковым номером 1 закрепляется другое изделие - изделие2, все свойства изделия1 присваиваются изделию2, изделия2 изделию3 и т.д., т.е. получается сдвиг в не ту сторону что хотелось бы. Надо что бы количество изделия1 и цвета его деталей были исключены из таблицы2, а изделия2 изделия3 и т.д. перенеслись в соответствующие строки.
Вот как это сделать я даже представить не могу.
Подскажите пожалуйста.


Сообщение отредактировал Sancho - Среда, 06.09.2017, 14:27
 
Ответить
СообщениеВсем привет! Придумал опять для себя задачу, которую пока сам же не могу понять как ее решить. Возможно придется все начинать с нуля. Поэтому прошу в очередной раз помочь советом.

В таблице 1 пользователь выбирает состав изделий кликом по ячейкам, соответствующим нужным деталям. Если деталь какая либо деталь выбрана, соответственно изделие считается выбранным. В таблице 1 изделию и детали присваивается порядковый номер для дальнейшего использования этих номеров в функции ВПР в таблице 2.

В таблице 2 пользователь указывает количество изделий и выбирает кликом по соответствующим ячейкам цвет деталей. И после этого возникает загвоздка если пользователь вдруг решает отказаться от какой либо детали или изделия, или наоборот решит добавить в состав изделия еще деталь или в заказ изделие. Например, пользователь двойным кликом отменяет все детали в изделии 1 в таблице 1, в таблице 2 получается следующее: изделие1 с порядковым номером 1 исключается из заказа, за порядковым номером 1 закрепляется другое изделие - изделие2, все свойства изделия1 присваиваются изделию2, изделия2 изделию3 и т.д., т.е. получается сдвиг в не ту сторону что хотелось бы. Надо что бы количество изделия1 и цвета его деталей были исключены из таблицы2, а изделия2 изделия3 и т.д. перенеслись в соответствующие строки.
Вот как это сделать я даже представить не могу.
Подскажите пожалуйста.

Автор - Sancho
Дата добавления - 06.09.2017 в 14:19
_Boroda_ Дата: Среда, 06.09.2017, 14:21 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Пароль на VBA нам самим снимать? А потом свой поставить?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПароль на VBA нам самим снимать? А потом свой поставить?

Автор - _Boroda_
Дата добавления - 06.09.2017 в 14:21
Sancho Дата: Среда, 06.09.2017, 14:26 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 282
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
_Boroda_, прошу прощения, перезалил
К сообщению приложен файл: 999.xlsm (51.1 Kb)


Сообщение отредактировал Sancho - Среда, 06.09.2017, 14:28
 
Ответить
Сообщение_Boroda_, прошу прощения, перезалил

Автор - Sancho
Дата добавления - 06.09.2017 в 14:26
_Boroda_ Дата: Среда, 06.09.2017, 18:01 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Ну, на самом деле там действительно лучше
все начинать с нуля

Но это уже довольно большая задача получится, если все красиво и как нужно делать
Если ничего не менять особо, то вот такой вариант
Кстати, там у Вас еще ВПР не всегда из-за округления работает. Я править не стал, все равно все это нужно переделывать
К сообщению приложен файл: 999-1-2.xlsm (42.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу, на самом деле там действительно лучше
все начинать с нуля

Но это уже довольно большая задача получится, если все красиво и как нужно делать
Если ничего не менять особо, то вот такой вариант
Кстати, там у Вас еще ВПР не всегда из-за округления работает. Я править не стал, все равно все это нужно переделывать

Автор - _Boroda_
Дата добавления - 06.09.2017 в 18:01
Sancho Дата: Четверг, 07.09.2017, 08:27 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 282
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Кстати, там у Вас еще ВПР не всегда из-за округления работает

я что то не могу Вашу мысль уловить. В таблице 1 выбранному изделия присваивался порядковый номер, по которому ВПР и осуществлял поиск изделия, а затем детали. вы изменили поиск по "коду" изделия и теперь отменяя все детали в таблице 1 изделия остаются а должны "уйти" из таблицы 2.
Возможно я опять недосказал вводные данные посчитав их некритичными и увлекся вычищая файл до требуемых форумом размеров: изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть

Ну и добавив УФ по пустому значению в столбце с деталями не получилось результата, убирая деталь из изделия ее выбранный цвет попадает на другую деталь которая занимает её место
 
Ответить
Сообщение
Кстати, там у Вас еще ВПР не всегда из-за округления работает

я что то не могу Вашу мысль уловить. В таблице 1 выбранному изделия присваивался порядковый номер, по которому ВПР и осуществлял поиск изделия, а затем детали. вы изменили поиск по "коду" изделия и теперь отменяя все детали в таблице 1 изделия остаются а должны "уйти" из таблицы 2.
Возможно я опять недосказал вводные данные посчитав их некритичными и увлекся вычищая файл до требуемых форумом размеров: изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть

Ну и добавив УФ по пустому значению в столбце с деталями не получилось результата, убирая деталь из изделия ее выбранный цвет попадает на другую деталь которая занимает её место

Автор - Sancho
Дата добавления - 07.09.2017 в 08:27
_Boroda_ Дата: Четверг, 07.09.2017, 09:18 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть

Воот! Вот этот момент нужно было особо овозначить. Я, например, предположил, что это необязательное условие и можно не уменьшать вторую таблицу.
Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
изделий 500 - Таблица1, а бланк заказа допускает максимум 10 изделий - таблица2, т.е таблица2 динамически наполняемая должна быть

Воот! Вот этот момент нужно было особо овозначить. Я, например, предположил, что это необязательное условие и можно не уменьшать вторую таблицу.
Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2

Автор - _Boroda_
Дата добавления - 07.09.2017 в 09:18
Sancho Дата: Четверг, 07.09.2017, 10:20 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 282
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2


Мысль кстати интересная, почему бы действительно и нет. предложу руководству, что скажут, боюсь только что отметут.

Пока придумал и пытаюсь реализовать следующий алгоритм: установить коды для деталей, разнести таблицы по разным листам, установить счетчик выбранного цвета, если больше нуля то при активации листа с таблицей 1 копировать данные на вспомогательный лист, а по возвращению на лист с таблицей 2 осуществлять поиск по коду детали и подставлять данные из вспомогательного листа... как то так.
 
Ответить
Сообщение
Тогда такая мысль - вот Вы выбираете в Таб.1 какие-то детали, а почему бы не сделать рядом еще 4 столбца с выбором цвета? Все это в большой Таб.1. А потом все это переносить в Таб.2


Мысль кстати интересная, почему бы действительно и нет. предложу руководству, что скажут, боюсь только что отметут.

Пока придумал и пытаюсь реализовать следующий алгоритм: установить коды для деталей, разнести таблицы по разным листам, установить счетчик выбранного цвета, если больше нуля то при активации листа с таблицей 1 копировать данные на вспомогательный лист, а по возвращению на лист с таблицей 2 осуществлять поиск по коду детали и подставлять данные из вспомогательного листа... как то так.

Автор - Sancho
Дата добавления - 07.09.2017 в 10:20
Sancho Дата: Вторник, 12.09.2017, 08:00 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 282
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем привет! задачу реализовать получилось.
на листе с таблицей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
    
    End If
    
    
    
A:
    Next i
    
       
    iNumClick = False
    Application.ScreenUpdating = True

End Sub
[/vba]

можно как то упростить, оптимизировать? например считаю совсем неудачную конструкцию[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:" установить уже после этой конструкции проверки условий
К сообщению приложен файл: _6691576_1.xlsm (60.3 Kb)


Сообщение отредактировал Sancho - Вторник, 12.09.2017, 08:07
 
Ответить
СообщениеВсем привет! задачу реализовать получилось.
на листе с таблицей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
    
    End If
    
    
    
A:
    Next i
    
       
    iNumClick = False
    Application.ScreenUpdating = True

End Sub
[/vba]

можно как то упростить, оптимизировать? например считаю совсем неудачную конструкцию[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
Дата добавления - 12.09.2017 в 08:00
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!