Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как заставить excel выдавать случайные числа, при этом постоянно не изменяя значения?

15K
04 января 2007 года
olen
11 / / 04.04.2006
Как заставить excel выдавать случайные числа, при этом постоянно не изменяя значения?

Нужно чтобы эксель выдавал числа от -0,03 до 0,03 в случайном порядке и, желательно, используя только экселевские формулы (с ВБА я не знаком). Я реализовал это след. образом (получилось, к сожалению, только 2 варианта 0,01 и - 0,01 - основной недостаток, желательно вариантов побольше):

в А1 ячейке: =СЛЧИС()
в А2 =ЕСЛИ(А1<0.5;-0.01;0.01)

Ещё 1 недостаток - эксель постоянно обновляет значение в А1, а мне это мешает - как заставить эксель не изменять результат?



Заранее извиняюсь, что спрашиваю в форуме посвященном программированию, но я больше не знаю сайтов где смог бы получить нужный совет.
267
04 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Напиши сразу так:
=СЛЧИС()*0.06-0.03
15K
05 января 2007 года
olen
11 / / 04.04.2006
Спасибо. А как сделать так чтобы значение случайного числа не обновлялись постоянно? Или это на данный момент не возможно?
267
05 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
А как? Чтобы один раз сгенерировалось и всё? Тогда вбей туда вручную -0.01. Или объясни поподробней.
263
05 января 2007 года
koltaviy
816 / / 16.12.2004
Просто человек хочет запомнить случайно сгинериное число..
1) Правой кнопкой на ячейке(ах) с обновляющимся значением -> Копировать
2) Правой кнопкой -> Специальная вставка -> Значения
267
05 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Нет уж, пусть объяснит. А то он сейчас пожалуется, что после твоего совета у него формула "пропала".
263
05 января 2007 года
koltaviy
816 / / 16.12.2004
:) Да уж..
15K
05 января 2007 года
olen
11 / / 04.04.2006
Цитата: Cutty Sark
Нет уж, пусть объяснит. А то он сейчас пожалуется, что после твоего совета у него формула "пропала".



Когда использую формулу =СЛЧИС() - excel постоянно обновляет число в ячейке (например изначально сгенерированное число 0.53456, после того как я 2 раза щёлкну в любой свободной ячейке, измениться на 0.9678 , например, и т.д.). Как от этого избавиться? Желательно автоматом - без копирования и т.п.
Использую связь (ole вроде - бы называется) с текстовым документом в word'e - там эти числа встречаются 2 раза в двух разных таблицах, но числа должны быть одинаковыми, а так как =СЛЧИС() постоянно обновляет значения, то одинаковыми они не получаются :(

267
08 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Давай мы тебе объясним, как макросом это сделать. У тебя на листе будет кнопочка нарисована, когда ты будешь на неё нажимать, будет появляться новое случайное число. А когда не будешь нажимать - ничего меняться не будет. Пойдёт?
15K
08 января 2007 года
olen
11 / / 04.04.2006
Цитата: Cutty Sark
Давай мы тебе объясним, как макросом это сделать. У тебя на листе будет кнопочка нарисована, когда ты будешь на неё нажимать, будет появляться новое случайное число. А когда не будешь нажимать - ничего меняться не будет. Пойдёт?



Конечно! Только подробно плз - я в программировании понимаю оч. плохо.

263
08 января 2007 года
koltaviy
816 / / 16.12.2004
Цитата: Cutty Sark
Давай мы тебе объясним, как макросом это сделать. У тебя на листе будет кнопочка нарисована, когда ты будешь на неё нажимать, будет появляться новое случайное число. А когда не будешь нажимать - ничего меняться не будет. Пойдёт?


А кроме шуток, возможно ли заставить Excel не обновлять данные??? т.е., чтобы значения не пересчитывались.. и какие у этого последствия??
З.Ы.: Насчет кнопки - ждем ответа ТопикСтартера:)

267
08 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Цитата: koltaviy
А кроме шуток, возможно ли заставить Excel не обновлять данные??? т.е., чтобы значения не пересчитывались..



Конечно. Отменить автоматический пересчёт.

267
08 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
А теперь ответ "топикстартеру".

1. Открываешь свой Экселевский файл. Нажимаешь Alt+F11. Попадаешь в редактор Visual Basic for Applications (далее сокращённо ВБА).

2. В меню ВБА выбираешь команду Вставка / Модуль. У тебя откроется окно с чистым модулем.

3. Копируешь туда вот такой код:
 
Код:
Sub GetRandom()
    Randomize
    ThisWorkbook.Worksheets("Лист1").Range("A1").Value = Rnd * 0.06 - 0.03
End Sub


4. Изменяешь в коде названия листа и адрес ячейки на те, что тебе нужны.

5. Закрываешь редактор ВБА и возвращаешься в Эксель.

6. Рисуешь в удобном тебе месте листа любой объект из доступных на панели инструментов "Рисование" - кружок, рожицу, стрелочку, что угодно. Раскрашиваешь его как угодно, добавляешь текст и т.п.

7. Нажимаешь на этом объекте правой кнопкой мыши, в появившемся меню выбираешь "Назначить макрос..." Перед тобой откроется окно, где будет список имеющихся макросов из одного пункта GetRandom. Выбираешь его и жмёшь Ок. Всё.
15K
08 января 2007 года
olen
11 / / 04.04.2006
Спасибо огромное - всё работает как надо.

Правда появилось пара ламерских вопросов:
1. как сделать так чтобы этот макрос автоматом запускался 1 раз при открытии книги?
2. Все значения в нескольких ячейках получаются одинаковыми :( мне это не подходит - надо чтобы были разные.

Ещё решил попробовать сделать значения рандомных чисел зависимым от значений чисел в других ячейках - как это сделать?
Попробовал написать так -
Sub GetRandom()
Randomize
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E19") > 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F19").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E19") < 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F19").Value = Rnd * 0.04 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E20") > 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F20").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E20") < 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F20").Value = Rnd * 0.04 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E21") > 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F21").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E21") < 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F21").Value = Rnd * 0.04 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E22") > 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F22").Value = Rnd * 0.06 - 0.03
If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E22") < 5 Then
ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F22").Value = Rnd * 0.04 - 0.03
End If
End Sub

Но ВБ при этом ругается :(
15K
08 января 2007 года
olen
11 / / 04.04.2006
Цитата: olen

2. Все значения в нескольких ячейках получаются одинаковыми :( мне это не подходит - надо чтобы были разные.



С этим разобрался

267
09 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Правильно вот так:
Код:
Sub GetRandom()
    Randomize
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E19") > 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F19").Value = Rnd * 0.06 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E19") < 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F19").Value = Rnd * 0.04 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E20") > 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F20").Value = Rnd * 0.06 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E20") < 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F20").Value = Rnd * 0.04 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E21") > 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F21").Value = Rnd * 0.06 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E21") < 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F21").Value = Rnd * 0.04 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E22") > 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F22").Value = Rnd * 0.06 - 0.03
    End If
    If ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("E22") < 5 Then
        ThisWorkbook.Worksheets("&#197;&#195;&#208;&#199;").Range("F22").Value = Rnd * 0.04 - 0.03
    End If
End Sub
267
09 января 2007 года
Cutty Sark
1.2K / / 17.10.2002
Чтобы автоматом запускалось при открытии книги, добавь в тот же модуль вот такую нехитрую процедурку:
 
Код:
Sub Auto_Open()
    Call GetRandom
End Sub


Или переименуй свою GetRandom в Auto_Open, а потом переназначь кнопку на листе на новое имя.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог