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

Вход

Регистрация

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

 

= Мир MS Excel/Как сделать чтобы рандомайз пересчитывал только когда надо - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Как сделать чтобы рандомайз пересчитывал только когда надо
koyaanisqatsi Дата: Вторник, 03.11.2015, 12:05 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.

Наверняка эта проблема уже вдоль и поперек изъезжена и возникала у многих юзеров. Но хочу у вас совет узнать какой метот дрешения этой проблемы наиболее оптимальный.

Есть файл где функция
Код
СЛУЧМЕЖДУ
(желтый столбец) при каждом вводе считает заново. Теоретически можно отключить авто подсчет формул, но это не решает проблемы.
Нужно что бы эта функция просчитывала ячейку только при изменении ячейки от которой она зависит. При открытии закрытии файла все оставалось статично.
Если я меня в сером столбце одну из ячеек то именно связанная с ней случайная из желтого столбца перерасчитыватся заново.

К Администрации. Если это можно сделать и лучше сделать макросами написав другую функцию просьба перенести эту тему в VBA
Спасибо.
К сообщению приложен файл: 5032504.xlsx (11.1 Kb)
 
Ответить
СообщениеЗдравствуйте.

Наверняка эта проблема уже вдоль и поперек изъезжена и возникала у многих юзеров. Но хочу у вас совет узнать какой метот дрешения этой проблемы наиболее оптимальный.

Есть файл где функция
Код
СЛУЧМЕЖДУ
(желтый столбец) при каждом вводе считает заново. Теоретически можно отключить авто подсчет формул, но это не решает проблемы.
Нужно что бы эта функция просчитывала ячейку только при изменении ячейки от которой она зависит. При открытии закрытии файла все оставалось статично.
Если я меня в сером столбце одну из ячеек то именно связанная с ней случайная из желтого столбца перерасчитыватся заново.

К Администрации. Если это можно сделать и лучше сделать макросами написав другую функцию просьба перенести эту тему в VBA
Спасибо.

Автор - koyaanisqatsi
Дата добавления - 03.11.2015 в 12:05
Nic70y Дата: Вторник, 03.11.2015, 12:29 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9133
Репутация: 2416 ±
Замечаний: 0% ±

Excel 2010
рекордером пойдет?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j4:j15000")) Is Nothing Then
    Target.Offset(0, -6) = "=RANDBETWEEN(1.01*RC[6],1.05*RC[6])+0.1*RANDBETWEEN(1,10)"
    Target.Offset(0, -6) = Target.Offset(0, -6).Value
End If
End Sub
[/vba]
К сообщению приложен файл: 1.00.xlsm (17.9 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщениерекордером пойдет?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j4:j15000")) Is Nothing Then
    Target.Offset(0, -6) = "=RANDBETWEEN(1.01*RC[6],1.05*RC[6])+0.1*RANDBETWEEN(1,10)"
    Target.Offset(0, -6) = Target.Offset(0, -6).Value
End If
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 03.11.2015 в 12:29
МВТ Дата: Вторник, 03.11.2015, 12:32 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Вставьте макрос в код листа[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row)) Is Nothing Then Exit Sub
    With Application.WorksheetFunction
        Target.Offset(0, -6) = .RandBetween(1.01 * Target.Value, 1.05 * Target.Value) + 0.1 * .RandBetween(1, 10)
    End With
End Sub
[/vba]
 
Ответить
СообщениеВставьте макрос в код листа[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row)) Is Nothing Then Exit Sub
    With Application.WorksheetFunction
        Target.Offset(0, -6) = .RandBetween(1.01 * Target.Value, 1.05 * Target.Value) + 0.1 * .RandBetween(1, 10)
    End With
End Sub
[/vba]

Автор - МВТ
Дата добавления - 03.11.2015 в 12:32
koyaanisqatsi Дата: Вторник, 03.11.2015, 12:36 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Nic70y, Пока подошел сразу первый вариант. Может до второго и не дойдет дело. Спасибо огромное.
 
Ответить
СообщениеNic70y, Пока подошел сразу первый вариант. Может до второго и не дойдет дело. Спасибо огромное.

Автор - koyaanisqatsi
Дата добавления - 03.11.2015 в 12:36
Manyasha Дата: Вторник, 03.11.2015, 12:37 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 902 ±
Замечаний: 0% ±

Excel 2010, 2016
с udf через Rnd тоже вроде пересчитывается только нужное
[vba]
Код
Function rndBetween(Uval, Lval)
    Randomize
    rndBetween = Int((Uval - Lval + 1) * Rnd + Lval)
End Function
[/vba]
Код
=rndBetween(1,01*J4;1,05*J4)+0,1*rndBetween(1;10)
К сообщению приложен файл: 5032504-1.xlsm (16.3 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениес udf через Rnd тоже вроде пересчитывается только нужное
[vba]
Код
Function rndBetween(Uval, Lval)
    Randomize
    rndBetween = Int((Uval - Lval + 1) * Rnd + Lval)
End Function
[/vba]
Код
=rndBetween(1,01*J4;1,05*J4)+0,1*rndBetween(1;10)

Автор - Manyasha
Дата добавления - 03.11.2015 в 12:37
_Boroda_ Дата: Вторник, 03.11.2015, 12:51 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16906
Репутация: 6615 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Попаризитировал на коде Михаила для множественного Target
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row)) Is Nothing Then Exit Sub
    Application.EnableEvents = 0
    For i = 1 To Target.Count
        If Target(i).Column = 10 Then
            With Application.WorksheetFunction
                Target(i).Offset(0, -6) = .RandBetween(1.01 * Target(i), 1.05 * Target(i)) + 0.1 * .RandBetween(1, 10)
            End With
        End If
    Next i
    Application.EnableEvents = 1
End Sub
[/vba]
К сообщению приложен файл: 5032504_1.xlsm (18.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПопаризитировал на коде Михаила для множественного Target
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J4:J" & Cells(Rows.Count, "J").End(xlUp).Row)) Is Nothing Then Exit Sub
    Application.EnableEvents = 0
    For i = 1 To Target.Count
        If Target(i).Column = 10 Then
            With Application.WorksheetFunction
                Target(i).Offset(0, -6) = .RandBetween(1.01 * Target(i), 1.05 * Target(i)) + 0.1 * .RandBetween(1, 10)
            End With
        End If
    Next i
    Application.EnableEvents = 1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 03.11.2015 в 12:51
koyaanisqatsi Дата: Вторник, 03.11.2015, 14:23 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, В Вашем случае я так понимаю не нужен шаг с записью в каждую ячейку чтобы начало все работать ?
Стало все еще интереснее )

P.S.: Ан нет ошибся. Разницы не вижу в чем улучшение. В этом случае тоже надо сначала записать все ячейки чтобы макрос отрабатывал как надо.

Проверил все макросы. Все работают на взгляд юзера одинаково. Если уже записал в ячейку там макрос будет отрабатыват. Тоесть если открыть готовый файл туда вставить макрос то там надо будет перезаписать все ячейки откуда берутся данные. Юзабельно даже очень.

Всем спасибо.


Сообщение отредактировал koyaanisqatsi - Вторник, 03.11.2015, 14:48
 
Ответить
Сообщение_Boroda_, В Вашем случае я так понимаю не нужен шаг с записью в каждую ячейку чтобы начало все работать ?
Стало все еще интереснее )

P.S.: Ан нет ошибся. Разницы не вижу в чем улучшение. В этом случае тоже надо сначала записать все ячейки чтобы макрос отрабатывал как надо.

Проверил все макросы. Все работают на взгляд юзера одинаково. Если уже записал в ячейку там макрос будет отрабатыват. Тоесть если открыть готовый файл туда вставить макрос то там надо будет перезаписать все ячейки откуда берутся данные. Юзабельно даже очень.

Всем спасибо.

Автор - koyaanisqatsi
Дата добавления - 03.11.2015 в 14:23
koyaanisqatsi Дата: Вторник, 03.11.2015, 14:43 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Manyasha, Нет, через вашу функцию случайные числа в диапазоне не получаются. Но спасибо за участие.
 
Ответить
СообщениеManyasha, Нет, через вашу функцию случайные числа в диапазоне не получаются. Но спасибо за участие.

Автор - koyaanisqatsi
Дата добавления - 03.11.2015 в 14:43
_Boroda_ Дата: Вторник, 03.11.2015, 15:01 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16906
Репутация: 6615 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Разницы не вижу в чем улучшение.

А в том разница, что нужно потом
перезаписать все ячейки откуда берутся данные

Просто берем пустую ячейку, копируем, выделяем диапазон из столбца J - спецвставка - ставим галку "Сложить" - жмем ОК. Сразу перезаписываются все ячейки столбца D, и не нужно по одной их перезаписывать.


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

А в том разница, что нужно потом
перезаписать все ячейки откуда берутся данные

Просто берем пустую ячейку, копируем, выделяем диапазон из столбца J - спецвставка - ставим галку "Сложить" - жмем ОК. Сразу перезаписываются все ячейки столбца D, и не нужно по одной их перезаписывать.

Автор - _Boroda_
Дата добавления - 03.11.2015 в 15:01
koyaanisqatsi Дата: Вторник, 03.11.2015, 16:09 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Да я так и делал ) Спасибо.
 
Ответить
Сообщение_Boroda_, Да я так и делал ) Спасибо.

Автор - koyaanisqatsi
Дата добавления - 03.11.2015 в 16:09
  • Страница 1 из 1
  • 1
Поиск:

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