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

Вход

Регистрация

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

 

= Мир MS Excel/Изменение прозрачности автофигур в зависимости от чисел - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Изменение прозрачности автофигур в зависимости от чисел
mkotik Дата: Вторник, 18.09.2018, 09:50 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Уважаемые знатоки!
В VBA не силен, но возникла необходимость разбираться в "чужих" листингах :(.
Прошу помочь в решении следующей задачи:
26 автофигур с определенной прозрачностью (ячейки AK9:AK34) - назовем их "старые данные". Ежемесячно появляются данные об изменении прозрачности (заносятся в ячейки AM9:AM34) - "новые данные".
Макросом "Значение_приобретения1" заносятся значения из AM в AK.
Решил "облегчить" макрос - получилось (Дай Бог Здоровья _Boroda_!)? но "прозрачность слетела :("
Что хотелось бы получить?
В Идеале:
Данные из вне заносятся в ячейки AK9:AK34 и прозрачность меняется автоматом. Пробовал разными способами (УВЫ не получилось :()
Хотя бы так:
Данные из вне заносятся в AM9:AM34 и макросом переносятся в AK9:AK34 с изменением прозрачности.
Файл прилагаю.
Заранее благодарен.
К сообщению приложен файл: 7592675.xls (94.5 Kb)
 
Ответить
СообщениеУважаемые знатоки!
В VBA не силен, но возникла необходимость разбираться в "чужих" листингах :(.
Прошу помочь в решении следующей задачи:
26 автофигур с определенной прозрачностью (ячейки AK9:AK34) - назовем их "старые данные". Ежемесячно появляются данные об изменении прозрачности (заносятся в ячейки AM9:AM34) - "новые данные".
Макросом "Значение_приобретения1" заносятся значения из AM в AK.
Решил "облегчить" макрос - получилось (Дай Бог Здоровья _Boroda_!)? но "прозрачность слетела :("
Что хотелось бы получить?
В Идеале:
Данные из вне заносятся в ячейки AK9:AK34 и прозрачность меняется автоматом. Пробовал разными способами (УВЫ не получилось :()
Хотя бы так:
Данные из вне заносятся в AM9:AM34 и макросом переносятся в AK9:AK34 с изменением прозрачности.
Файл прилагаю.
Заранее благодарен.

Автор - mkotik
Дата добавления - 18.09.2018 в 09:50
_Boroda_ Дата: Вторник, 18.09.2018, 09:53 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d_ As Range, d1_ As Range
    Set d_ = Intersect(Range("ak9:ak34"), Target)
    If Not d_ Is Nothing Then
        For Each d1_ In d_
            With ActiveSheet.Shapes(d1_.Row - 8).Fill
                Select Case d1_.Value
                    Case Is < 15
                        .Transparency = 0.92
                    Case Is < 20
                        .Transparency = 0.74
                    Case Is < 50
                        .Transparency = 0.52
                    Case Else
                        .Transparency = 0.37
                End Select
            End With
        Next d1_
    End If
End Sub
[/vba]
К сообщению приложен файл: 8699732.xlsb (23.1 Kb)


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

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d_ As Range, d1_ As Range
    Set d_ = Intersect(Range("ak9:ak34"), Target)
    If Not d_ Is Nothing Then
        For Each d1_ In d_
            With ActiveSheet.Shapes(d1_.Row - 8).Fill
                Select Case d1_.Value
                    Case Is < 15
                        .Transparency = 0.92
                    Case Is < 20
                        .Transparency = 0.74
                    Case Is < 50
                        .Transparency = 0.52
                    Case Else
                        .Transparency = 0.37
                End Select
            End With
        Next d1_
    End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 18.09.2018 в 09:53
StoTisteg Дата: Вторник, 18.09.2018, 10:13 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
В макросе события не отключаем, ячейки перебираем:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim rng As Range
    Dim i As Integer
    
    Set rng = Intersect(Range("ak9:ak34"), Target)
    If Not rng Is Nothing Then
        For i = 1 To rng.Count
         With ActiveSheet.Shapes(Target.Row - 8).Fill
             Select Case Target.Value
                 Case Is < 15
                     .Transparency = 0.92
                 Case Is < 20
                     .Transparency = 0.74
                 Case Is < 50
                     .Transparency = 0.52
                 Case Else
                     .Transparency = 0.37
             End Select
         End With
      Next i
    End If
    
End Sub
[/vba]


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеВ макросе события не отключаем, ячейки перебираем:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim rng As Range
    Dim i As Integer
    
    Set rng = Intersect(Range("ak9:ak34"), Target)
    If Not rng Is Nothing Then
        For i = 1 To rng.Count
         With ActiveSheet.Shapes(Target.Row - 8).Fill
             Select Case Target.Value
                 Case Is < 15
                     .Transparency = 0.92
                 Case Is < 20
                     .Transparency = 0.74
                 Case Is < 50
                     .Transparency = 0.52
                 Case Else
                     .Transparency = 0.37
             End Select
         End With
      Next i
    End If
    
End Sub
[/vba]

Автор - StoTisteg
Дата добавления - 18.09.2018 в 10:13
mkotik Дата: Вторник, 18.09.2018, 10:38 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, один вопрос: чем отличаются ".Row - 8" и ".Row - 9"?
 
Ответить
Сообщение_Boroda_, один вопрос: чем отличаются ".Row - 8" и ".Row - 9"?

Автор - mkotik
Дата добавления - 18.09.2018 в 10:38
_Boroda_ Дата: Вторник, 18.09.2018, 10:45 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
У Вас массив рукотворный необъявленной размерности и без предварительных указаний на номер первого элемента, следовательно, он начинался с нуля, а у меня массив значений из ячеек, он начинается с 1. А номера строк начинаются с 9-й строки. Поэтому, чтобы попасть на элемент массива, соответствующий строке, Вы у себя писали "Row -9", а я пишу "Row -8"

StoTisteg, Вы б хоть в файле проверяли написанное, что ли. Не будет так работать


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ Вас массив рукотворный необъявленной размерности и без предварительных указаний на номер первого элемента, следовательно, он начинался с нуля, а у меня массив значений из ячеек, он начинается с 1. А номера строк начинаются с 9-й строки. Поэтому, чтобы попасть на элемент массива, соответствующий строке, Вы у себя писали "Row -9", а я пишу "Row -8"

StoTisteg, Вы б хоть в файле проверяли написанное, что ли. Не будет так работать

Автор - _Boroda_
Дата добавления - 18.09.2018 в 10:45
mkotik Дата: Вторник, 18.09.2018, 10:47 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, спасибо за разъяснения и за помощь!
 
Ответить
Сообщение_Boroda_, спасибо за разъяснения и за помощь!

Автор - mkotik
Дата добавления - 18.09.2018 в 10:47
mkotik Дата: Вторник, 18.09.2018, 12:31 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, а как правильно расширять/изменять массив (добавить/изменить название автофигур)?
 
Ответить
Сообщение_Boroda_, а как правильно расширять/изменять массив (добавить/изменить название автофигур)?

Автор - mkotik
Дата добавления - 18.09.2018 в 12:31
_Boroda_ Дата: Вторник, 18.09.2018, 12:53 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Это Вы про что? Подробности нужны


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

Автор - _Boroda_
Дата добавления - 18.09.2018 в 12:53
mkotik Дата: Вторник, 18.09.2018, 14:21 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Прошу прощения, за неопытность VBA...
Я запутался в трех соснах.

Насколько я разобрался, изначально был массив: "1","2"..."26" к которому была привязка по названию автофигур.
После всех изменений, возникли вопросы:
1. Правильно ли я понял, что массив автофигур стал d1_ ?
2. Как добавить/изменить/удалить в(/в/из) массив(/в/а) d1_ автофигуру (например автофигуру Проба26 (зелёного цвета))?
3. Какие действия нужно сделать, чтобы сформировать массив d1_ из других автофигур?
Спасибо заранее за понимание
К сообщению приложен файл: _-.xlsb (22.5 Kb)
 
Ответить
СообщениеПрошу прощения, за неопытность VBA...
Я запутался в трех соснах.

Насколько я разобрался, изначально был массив: "1","2"..."26" к которому была привязка по названию автофигур.
После всех изменений, возникли вопросы:
1. Правильно ли я понял, что массив автофигур стал d1_ ?
2. Как добавить/изменить/удалить в(/в/из) массив(/в/а) d1_ автофигуру (например автофигуру Проба26 (зелёного цвета))?
3. Какие действия нужно сделать, чтобы сформировать массив d1_ из других автофигур?
Спасибо заранее за понимание

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

2003; 2007; 2010; 2013 RUS
1. Нет. d1_ - это одна из ячеек диапазона d_
2. Не нужно никуда ничего добавлять. Просто обзовите новую фигуру следующим порядковым номером - 27. И немного измените макросы
[vba]
Код
Sub Значение_Приобретения()
    r1_ = Range("AM" & Rows.Count).End(3).Row 'здесь
    Range("AK9:AK" & r1_) = Range("AM9:AM" & r1_).Value 'здесь
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d_ As Range, d1_ As Range
    r1_ = Range("AM" & Rows.Count).End(3).Row 'здесь
    Set d_ = Intersect(Range("ak9:ak" & r1_), Target) 'здесь
    If Not d_ Is Nothing Then
        For Each d1_ In d_
            With ActiveSheet.Shapes(CStr(d1_.Row - 8)).Fill 'здесь
                Select Case d1_.Value
                    Case Is < 15
                        .Transparency = 0.92
                    Case Is < 20
                        .Transparency = 0.74
                    Case Is < 50
                        .Transparency = 0.52
                    Case Else
                        .Transparency = 0.37
                End Select
            End With
        Next d1_
    End If
End Sub

[/vba]
К сообщению приложен файл: -1-1.xlsb (23.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение1. Нет. d1_ - это одна из ячеек диапазона d_
2. Не нужно никуда ничего добавлять. Просто обзовите новую фигуру следующим порядковым номером - 27. И немного измените макросы
[vba]
Код
Sub Значение_Приобретения()
    r1_ = Range("AM" & Rows.Count).End(3).Row 'здесь
    Range("AK9:AK" & r1_) = Range("AM9:AM" & r1_).Value 'здесь
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d_ As Range, d1_ As Range
    r1_ = Range("AM" & Rows.Count).End(3).Row 'здесь
    Set d_ = Intersect(Range("ak9:ak" & r1_), Target) 'здесь
    If Not d_ Is Nothing Then
        For Each d1_ In d_
            With ActiveSheet.Shapes(CStr(d1_.Row - 8)).Fill 'здесь
                Select Case d1_.Value
                    Case Is < 15
                        .Transparency = 0.92
                    Case Is < 20
                        .Transparency = 0.74
                    Case Is < 50
                        .Transparency = 0.52
                    Case Else
                        .Transparency = 0.37
                End Select
            End With
        Next d1_
    End If
End Sub

[/vba]

Автор - _Boroda_
Дата добавления - 18.09.2018 в 14:35
mkotik Дата: Вторник, 18.09.2018, 15:02 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо за оперативность, проблема в том, что в первоначальном массиве, который я обозначил для простоты: "1","2"..."26" стоят определенные названия, которые сложно менять (большой массив, в котором забиты кадастровые номера)
Ух, надо открывать новую тему?
 
Ответить
СообщениеСпасибо за оперативность, проблема в том, что в первоначальном массиве, который я обозначил для простоты: "1","2"..."26" стоят определенные названия, которые сложно менять (большой массив, в котором забиты кадастровые номера)
Ух, надо открывать новую тему?

Автор - mkotik
Дата добавления - 18.09.2018 в 15:02
StoTisteg Дата: Вторник, 18.09.2018, 17:12 | Сообщение № 12
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
mkotik, но простите, тогда у Вас индекс фигуры привязан к кадастровому номеру. То есть Ваш макрос будет менять прозрачность фигуры с совершенно непредсказуемым (и скорее всего несуществующим) индексом.


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Вторник, 18.09.2018, 17:14
 
Ответить
Сообщениеmkotik, но простите, тогда у Вас индекс фигуры привязан к кадастровому номеру. То есть Ваш макрос будет менять прозрачность фигуры с совершенно непредсказуемым (и скорее всего несуществующим) индексом.

Автор - StoTisteg
Дата добавления - 18.09.2018 в 17:12
_Boroda_ Дата: Вторник, 18.09.2018, 17:23 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
проблема в том, что в первоначальном массиве, который я обозначил для простоты

Другими словами - все, что мы раньше делали - нафиг никому не нужно.
Не, сделать-то не вопрос, но потом Вы еще что-нибудь не вспомните, что "для простоты" сделали? В Правилах специально прописано
Цитата
старайтесь сохранить структуру, расположение таблиц, имена листов

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


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

Другими словами - все, что мы раньше делали - нафиг никому не нужно.
Не, сделать-то не вопрос, но потом Вы еще что-нибудь не вспомните, что "для простоты" сделали? В Правилах специально прописано
Цитата
старайтесь сохранить структуру, расположение таблиц, имена листов

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

Автор - _Boroda_
Дата добавления - 18.09.2018 в 17:23
mkotik Дата: Вторник, 18.09.2018, 19:29 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Уважаемые знатоки! Извините пожалуйста за проблемы, которые я вам доставил!
Выкладываю сокращённый файл (файл "настоящий" содержит более 1млн строк) с данными без изменений.
В колонку AM данные заносятся функцией ВПР из куба (длинная формула).
Макросом Значение_приобретения1() переносятся данные из AM в AK.
Макрос делает следующее: Копировать->Вставить значение.
В зависимости от значения для автофигур меняется значения прозрачности
Значения Прозрачность
<15 92%
>=15<20 74%
>=20<50 52%
>=50 37%
Долгое выполнение процедуры вынудило меня обратиться к вам.
Еще раз извините.
К сообщению приложен файл: __.xlsb (27.1 Kb)


Сообщение отредактировал mkotik - Вторник, 18.09.2018, 19:30
 
Ответить
СообщениеУважаемые знатоки! Извините пожалуйста за проблемы, которые я вам доставил!
Выкладываю сокращённый файл (файл "настоящий" содержит более 1млн строк) с данными без изменений.
В колонку AM данные заносятся функцией ВПР из куба (длинная формула).
Макросом Значение_приобретения1() переносятся данные из AM в AK.
Макрос делает следующее: Копировать->Вставить значение.
В зависимости от значения для автофигур меняется значения прозрачности
Значения Прозрачность
<15 92%
>=15<20 74%
>=20<50 52%
>=50 37%
Долгое выполнение процедуры вынудило меня обратиться к вам.
Еще раз извините.

Автор - mkotik
Дата добавления - 18.09.2018 в 19:29
_Boroda_ Дата: Вторник, 18.09.2018, 20:38 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Вот, прекрасно, это совсем меняет дело - у Вас же все написано в столбце AJ
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d_ As Range, d1_ As Range
    r1_ = Range("AM" & Rows.Count).End(3).Row
    Set d_ = Intersect(Range("ak9:ak" & r1_), Target)
    If Not d_ Is Nothing Then
        For Each d1_ In d_
            Select Case d1_.Value
                Case Is < 15
                    zn_ = 0.92
                Case Is < 20
                    zn_ = 0.74
                Case Is < 50
                    zn_ = 0.52
                Case Else
                    zn_ = 0.37
            End Select
            ActiveSheet.Shapes(d1_.Offset(, -1)).Fill.Transparency = zn_
        Next d1_
    End If
End Sub

Sub Значение_Приобретения()
    r0_ = 9
    r1_ = Range("AM" & Rows.Count).End(3).Row
    If r1_ < r0_ Then Exit Sub
    n_ = r1_ - r0_ + 1
    ar = Range("AJ" & r0_).Resize(n_)
    ar1 = Range("AM" & r0_).Resize(n_)
    Application.EnableEvents = 0
    Range("AK" & r0_).Resize(n_) = ar1
    Application.EnableEvents = 1
    For i = 1 To n_
        Select Case ar1(i, 1)
            Case Is < 15
                zn_ = 0.92
            Case Is < 20
                zn_ = 0.74
            Case Is < 50
                zn_ = 0.52
            Case Else
                zn_ = 0.37
        End Select
    ActiveSheet.Shapes(ar(i, 1)).Fill.Transparency = zn_
    Next i
End Sub
[/vba]
К сообщению приложен файл: _1.xlsb (25.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВот, прекрасно, это совсем меняет дело - у Вас же все написано в столбце AJ
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim d_ As Range, d1_ As Range
    r1_ = Range("AM" & Rows.Count).End(3).Row
    Set d_ = Intersect(Range("ak9:ak" & r1_), Target)
    If Not d_ Is Nothing Then
        For Each d1_ In d_
            Select Case d1_.Value
                Case Is < 15
                    zn_ = 0.92
                Case Is < 20
                    zn_ = 0.74
                Case Is < 50
                    zn_ = 0.52
                Case Else
                    zn_ = 0.37
            End Select
            ActiveSheet.Shapes(d1_.Offset(, -1)).Fill.Transparency = zn_
        Next d1_
    End If
End Sub

Sub Значение_Приобретения()
    r0_ = 9
    r1_ = Range("AM" & Rows.Count).End(3).Row
    If r1_ < r0_ Then Exit Sub
    n_ = r1_ - r0_ + 1
    ar = Range("AJ" & r0_).Resize(n_)
    ar1 = Range("AM" & r0_).Resize(n_)
    Application.EnableEvents = 0
    Range("AK" & r0_).Resize(n_) = ar1
    Application.EnableEvents = 1
    For i = 1 To n_
        Select Case ar1(i, 1)
            Case Is < 15
                zn_ = 0.92
            Case Is < 20
                zn_ = 0.74
            Case Is < 50
                zn_ = 0.52
            Case Else
                zn_ = 0.37
        End Select
    ActiveSheet.Shapes(ar(i, 1)).Fill.Transparency = zn_
    Next i
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 18.09.2018 в 20:38
mkotik Дата: Вторник, 18.09.2018, 21:24 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Если честно, я так и подумал, что в нём будет "зацепка".
Спасибо, что "тапками" не сильно "кидали"
 
Ответить
СообщениеЕсли честно, я так и подумал, что в нём будет "зацепка".
Спасибо, что "тапками" не сильно "кидали"

Автор - mkotik
Дата добавления - 18.09.2018 в 21:24
  • Страница 1 из 1
  • 1
Поиск:

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