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

Вход

Регистрация

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

 

= Мир MS Excel/Выполнение функции по кнопке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Выполнение функции по кнопке
dsasda Дата: Суббота, 12.04.2014, 03:24 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте! Мне нужна такая функция, что бы выводила текст в рандомном порядке с таблицы, допустим, B1 : D58.
После вывода этого рандомного текста, который находится в таблице B1 : D58 он больше не менялся.

У меня получилась лишь такая функция:
Код
=ЕСЛИ(СЛУЧМЕЖДУ(1;3) = 1;ИНДЕКС($B$1:$B$58;СЛУЧМЕЖДУ(1;58));ЕСЛИ(СЛУЧМЕЖДУ(1;3) = 2;ИНДЕКС($C$1:$C$58;СЛУЧМЕЖДУ(1;58));ИНДЕКС($D$1:$D$58;СЛУЧМЕЖДУ(1;58))))

Довольно глупая, но как умел на это время. Проблемы две:
1) если я изменю или нажму на на информацию в поле, куда сохранилась эта функция она снова рандомно сменит все данные.
2) Мне нужно реализовать так, что бы выделил поля, куда засунуть эту формулу и нажать кнопку (Shape / фигуру). Предполагаю, что без макроса не обойдётся.

Будьте добры, помогите это реализовать как можно скорее. :'(
 
Ответить
СообщениеЗдравствуйте! Мне нужна такая функция, что бы выводила текст в рандомном порядке с таблицы, допустим, B1 : D58.
После вывода этого рандомного текста, который находится в таблице B1 : D58 он больше не менялся.

У меня получилась лишь такая функция:
Код
=ЕСЛИ(СЛУЧМЕЖДУ(1;3) = 1;ИНДЕКС($B$1:$B$58;СЛУЧМЕЖДУ(1;58));ЕСЛИ(СЛУЧМЕЖДУ(1;3) = 2;ИНДЕКС($C$1:$C$58;СЛУЧМЕЖДУ(1;58));ИНДЕКС($D$1:$D$58;СЛУЧМЕЖДУ(1;58))))

Довольно глупая, но как умел на это время. Проблемы две:
1) если я изменю или нажму на на информацию в поле, куда сохранилась эта функция она снова рандомно сменит все данные.
2) Мне нужно реализовать так, что бы выделил поля, куда засунуть эту формулу и нажать кнопку (Shape / фигуру). Предполагаю, что без макроса не обойдётся.

Будьте добры, помогите это реализовать как можно скорее. :'(

Автор - dsasda
Дата добавления - 12.04.2014 в 03:24
AlexM Дата: Суббота, 12.04.2014, 08:34 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
помогите это реализовать как можно скорее
Прочтите правила форума. Без файла либо долго, либо оооочень долго.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Суббота, 12.04.2014, 10:00
 
Ответить
Сообщение
помогите это реализовать как можно скорее
Прочтите правила форума. Без файла либо долго, либо оооочень долго.

Автор - AlexM
Дата добавления - 12.04.2014 в 08:34
AlexM Дата: Суббота, 12.04.2014, 13:16 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Предполагаю, что без макроса не обойдётся
Вы правы. Можно без кнопки. Макрос срабатывает по событию двойной клик по ЛКМ.
Массив текстовых значений в диапазоне B1:D58, как у вас. Кликаем по А2 и получаем рандомную строку из диапазона, а в А1 получаем адрес откуда взята строка.
Код макроса в модуле листа.[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Rnd3 As Long, Rnd58 As Long
If Target.Address(0, 0) = "A2" Then
Randomize
Rnd3 = Int(3 * Rnd + 2) 'генегатор номера столбца 2,3 или 4
Rnd58 = Int(58 * Rnd + 1) 'генератор номера строки от 1 до 58
Range("A2") = Cells(Rnd58, Rnd3) 'в А2 записываем значение
Range("A1") = Chr(Rnd3 + 64) & Rnd58 'адрес откуда взято значение
Range("A1").Select
End If
End Sub
[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Предполагаю, что без макроса не обойдётся
Вы правы. Можно без кнопки. Макрос срабатывает по событию двойной клик по ЛКМ.
Массив текстовых значений в диапазоне B1:D58, как у вас. Кликаем по А2 и получаем рандомную строку из диапазона, а в А1 получаем адрес откуда взята строка.
Код макроса в модуле листа.[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Rnd3 As Long, Rnd58 As Long
If Target.Address(0, 0) = "A2" Then
Randomize
Rnd3 = Int(3 * Rnd + 2) 'генегатор номера столбца 2,3 или 4
Rnd58 = Int(58 * Rnd + 1) 'генератор номера строки от 1 до 58
Range("A2") = Cells(Rnd58, Rnd3) 'в А2 записываем значение
Range("A1") = Chr(Rnd3 + 64) & Rnd58 'адрес откуда взято значение
Range("A1").Select
End If
End Sub
[/vba]

Автор - AlexM
Дата добавления - 12.04.2014 в 13:16
dsasda Дата: Суббота, 12.04.2014, 13:49 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Не вижу смысла давать файл, если написал все границы, контент не имеет значения в данном случае.
По поводу макроса, переделал его под кнопку:

[vba]
Код
Sub test()
Dim Rnd3 As Long, Rnd58 As Long
Randomize
Rnd3 = Int(3 * Rnd + 2)
Rnd58 = Int(58 * Rnd + 1)
Range("B59") = Cells(Rnd58, Rnd3)
Range("E59") = Chr(Rnd3 + 64) & Rnd58
Range("E59").Select
End Sub
[/vba]

Но, как видно в коде, то значение из диапазона B1:D58 записывается только в указанное место, т.е. B59, как переделать этот код, чтоб разные значения добавлялись в выделенный диапазон ? Как алтернативный вариант: "как вписать в код свой диапазон, куда добавлять" - Вместо B59 -> B59 : D70 ?

Сейчас читаю разные варианты и понял, что это можно сделать с циклом For Each, только вот как ?

Спасибо за помощь! Т.к. Часть кода ваша, выкладываю решение сюда, может кому и пригодиться!

[vba]
Код

Sub test2()
Dim Rnd3 As Long, Rnd58 As Long, SelCell As Range
For Each SelCell In Selection
Randomize
Rnd3 = Int(3 * Rnd + 2)
Rnd58 = Int(58 * Rnd + 1)
   SelCell.Value = Cells(Rnd58, Rnd3)
Next SelCell
End Sub
[/vba]


Сообщение отредактировал dsasda - Суббота, 12.04.2014, 14:29
 
Ответить
СообщениеНе вижу смысла давать файл, если написал все границы, контент не имеет значения в данном случае.
По поводу макроса, переделал его под кнопку:

[vba]
Код
Sub test()
Dim Rnd3 As Long, Rnd58 As Long
Randomize
Rnd3 = Int(3 * Rnd + 2)
Rnd58 = Int(58 * Rnd + 1)
Range("B59") = Cells(Rnd58, Rnd3)
Range("E59") = Chr(Rnd3 + 64) & Rnd58
Range("E59").Select
End Sub
[/vba]

Но, как видно в коде, то значение из диапазона B1:D58 записывается только в указанное место, т.е. B59, как переделать этот код, чтоб разные значения добавлялись в выделенный диапазон ? Как алтернативный вариант: "как вписать в код свой диапазон, куда добавлять" - Вместо B59 -> B59 : D70 ?

Сейчас читаю разные варианты и понял, что это можно сделать с циклом For Each, только вот как ?

Спасибо за помощь! Т.к. Часть кода ваша, выкладываю решение сюда, может кому и пригодиться!

[vba]
Код

Sub test2()
Dim Rnd3 As Long, Rnd58 As Long, SelCell As Range
For Each SelCell In Selection
Randomize
Rnd3 = Int(3 * Rnd + 2)
Rnd58 = Int(58 * Rnd + 1)
   SelCell.Value = Cells(Rnd58, Rnd3)
Next SelCell
End Sub
[/vba]

Автор - dsasda
Дата добавления - 12.04.2014 в 13:49
AlexM Дата: Суббота, 12.04.2014, 15:38 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Не вижу смысла давать файл, если написал все границы
Я вам дал проверенный, работающий код. Чтобы проверить мне пришлось по вашему описанию сделать файл. Проще получить от вас файл, чем делать его самому. Поэтому по правилам форума прикладывать файл необходимо, кроме тех случаев, когда вопрос не касается конкретно Вашего файла.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Не вижу смысла давать файл, если написал все границы
Я вам дал проверенный, работающий код. Чтобы проверить мне пришлось по вашему описанию сделать файл. Проще получить от вас файл, чем делать его самому. Поэтому по правилам форума прикладывать файл необходимо, кроме тех случаев, когда вопрос не касается конкретно Вашего файла.

Автор - AlexM
Дата добавления - 12.04.2014 в 15:38
  • Страница 1 из 1
  • 1
Поиск:

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