Как заставить excel выдавать случайные числа, при этом постоянно не изменяя значения?
Нужно чтобы эксель выдавал числа от -0,03 до 0,03 в случайном порядке и, желательно, используя только экселевские формулы (с ВБА я не знаком). Я реализовал это след. образом (получилось, к сожалению, только 2 варианта 0,01 и - 0,01 - основной недостаток, желательно вариантов побольше):
в А1 ячейке: =СЛЧИС()
в А2 =ЕСЛИ(А1<0.5;-0.01;0.01)
Ещё 1 недостаток - эксель постоянно обновляет значение в А1, а мне это мешает - как заставить эксель не изменять результат?
Заранее извиняюсь, что спрашиваю в форуме посвященном программированию, но я больше не знаю сайтов где смог бы получить нужный совет.
=СЛЧИС()*0.06-0.03
1) Правой кнопкой на ячейке(ах) с обновляющимся значением -> Копировать
2) Правой кнопкой -> Специальная вставка -> Значения
Когда использую формулу =СЛЧИС() - excel постоянно обновляет число в ячейке (например изначально сгенерированное число 0.53456, после того как я 2 раза щёлкну в любой свободной ячейке, измениться на 0.9678 , например, и т.д.). Как от этого избавиться? Желательно автоматом - без копирования и т.п.
Использую связь (ole вроде - бы называется) с текстовым документом в word'e - там эти числа встречаются 2 раза в двух разных таблицах, но числа должны быть одинаковыми, а так как =СЛЧИС() постоянно обновляет значения, то одинаковыми они не получаются :(
Конечно! Только подробно плз - я в программировании понимаю оч. плохо.
А кроме шуток, возможно ли заставить Excel не обновлять данные??? т.е., чтобы значения не пересчитывались.. и какие у этого последствия??
З.Ы.: Насчет кнопки - ждем ответа ТопикСтартера:)
Конечно. Отменить автоматический пересчёт.
1. Открываешь свой Экселевский файл. Нажимаешь Alt+F11. Попадаешь в редактор Visual Basic for Applications (далее сокращённо ВБА).
2. В меню ВБА выбираешь команду Вставка / Модуль. У тебя откроется окно с чистым модулем.
3. Копируешь туда вот такой код:
Randomize
ThisWorkbook.Worksheets("Лист1").Range("A1").Value = Rnd * 0.06 - 0.03
End Sub
4. Изменяешь в коде названия листа и адрес ячейки на те, что тебе нужны.
5. Закрываешь редактор ВБА и возвращаешься в Эксель.
6. Рисуешь в удобном тебе месте листа любой объект из доступных на панели инструментов "Рисование" - кружок, рожицу, стрелочку, что угодно. Раскрашиваешь его как угодно, добавляешь текст и т.п.
7. Нажимаешь на этом объекте правой кнопкой мыши, в появившемся меню выбираешь "Назначить макрос..." Перед тобой откроется окно, где будет список имеющихся макросов из одного пункта GetRandom. Выбираешь его и жмёшь Ок. Всё.
Правда появилось пара ламерских вопросов:
1. как сделать так чтобы этот макрос автоматом запускался 1 раз при открытии книги?
2. Все значения в нескольких ячейках получаются одинаковыми :( мне это не подходит - надо чтобы были разные.
Ещё решил попробовать сделать значения рандомных чисел зависимым от значений чисел в других ячейках - как это сделать?
Попробовал написать так -
Sub GetRandom()
Randomize
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E19") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F19").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E19") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F19").Value = Rnd * 0.04 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E20") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F20").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E20") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F20").Value = Rnd * 0.04 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E21") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F21").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E21") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F21").Value = Rnd * 0.04 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E22") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F22").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E22") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F22").Value = Rnd * 0.04 - 0.03
End If
End Sub
Но ВБ при этом ругается :(
2. Все значения в нескольких ячейках получаются одинаковыми :( мне это не подходит - надо чтобы были разные.
С этим разобрался
Randomize
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E19") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F19").Value = Rnd * 0.06 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E19") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F19").Value = Rnd * 0.04 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E20") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F20").Value = Rnd * 0.06 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E20") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F20").Value = Rnd * 0.04 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E21") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F21").Value = Rnd * 0.06 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E21") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F21").Value = Rnd * 0.04 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E22") > 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F22").Value = Rnd * 0.06 - 0.03
End If
If ThisWorkbook.Worksheets("ÅÃÐÇ").Range("E22") < 5 Then
ThisWorkbook.Worksheets("ÅÃÐÇ").Range("F22").Value = Rnd * 0.04 - 0.03
End If
End Sub
Call GetRandom
End Sub
Или переименуй свою GetRandom в Auto_Open, а потом переназначь кнопку на листе на новое имя.