Наверняка эта проблема уже вдоль и поперек изъезжена и возникала у многих юзеров. Но хочу у вас совет узнать какой метот дрешения этой проблемы наиболее оптимальный.
Есть файл где функция
Код
СЛУЧМЕЖДУ
(желтый столбец) при каждом вводе считает заново. Теоретически можно отключить авто подсчет формул, но это не решает проблемы. Нужно что бы эта функция просчитывала ячейку только при изменении ячейки от которой она зависит. При открытии закрытии файла все оставалось статично. Если я меня в сером столбце одну из ячеек то именно связанная с ней случайная из желтого столбца перерасчитыватся заново.
К Администрации. Если это можно сделать и лучше сделать макросами написав другую функцию просьба перенести эту тему в VBA Спасибо.
Здравствуйте.
Наверняка эта проблема уже вдоль и поперек изъезжена и возникала у многих юзеров. Но хочу у вас совет узнать какой метот дрешения этой проблемы наиболее оптимальный.
Есть файл где функция
Код
СЛУЧМЕЖДУ
(желтый столбец) при каждом вводе считает заново. Теоретически можно отключить авто подсчет формул, но это не решает проблемы. Нужно что бы эта функция просчитывала ячейку только при изменении ячейки от которой она зависит. При открытии закрытии файла все оставалось статично. Если я меня в сером столбце одну из ячеек то именно связанная с ней случайная из желтого столбца перерасчитыватся заново.
К Администрации. Если это можно сделать и лучше сделать макросами написав другую функцию просьба перенести эту тему в VBA Спасибо.koyaanisqatsi
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]
рекордером пойдет? [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
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
Попаризитировал на коде Михаила для множественного 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]
Попаризитировал на коде Михаила для множественного 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
_Boroda_, В Вашем случае я так понимаю не нужен шаг с записью в каждую ячейку чтобы начало все работать ? Стало все еще интереснее )
P.S.: Ан нет ошибся. Разницы не вижу в чем улучшение. В этом случае тоже надо сначала записать все ячейки чтобы макрос отрабатывал как надо.
Проверил все макросы. Все работают на взгляд юзера одинаково. Если уже записал в ячейку там макрос будет отрабатыват. Тоесть если открыть готовый файл туда вставить макрос то там надо будет перезаписать все ячейки откуда берутся данные. Юзабельно даже очень.
Всем спасибо.
_Boroda_, В Вашем случае я так понимаю не нужен шаг с записью в каждую ячейку чтобы начало все работать ? Стало все еще интереснее )
P.S.: Ан нет ошибся. Разницы не вижу в чем улучшение. В этом случае тоже надо сначала записать все ячейки чтобы макрос отрабатывал как надо.
Проверил все макросы. Все работают на взгляд юзера одинаково. Если уже записал в ячейку там макрос будет отрабатыват. Тоесть если открыть готовый файл туда вставить макрос то там надо будет перезаписать все ячейки откуда берутся данные. Юзабельно даже очень.
Просто берем пустую ячейку, копируем, выделяем диапазон из столбца J - спецвставка - ставим галку "Сложить" - жмем ОК. Сразу перезаписываются все ячейки столбца D, и не нужно по одной их перезаписывать.
Просто берем пустую ячейку, копируем, выделяем диапазон из столбца J - спецвставка - ставим галку "Сложить" - жмем ОК. Сразу перезаписываются все ячейки столбца D, и не нужно по одной их перезаписывать._Boroda_