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

Вход

Регистрация

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

 

= Мир MS Excel/Функция, которая возвращает случайный аргумент из списка - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Функция, которая возвращает случайный аргумент из списка (Макросы/Sub)
Функция, которая возвращает случайный аргумент из списка
Junk Дата: Воскресенье, 10.01.2016, 13:27 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте, напишите кто-нибудь функцию RANDFROM(arg1;arg2;...;argN) которая возвращает случайный аргумент из списка или подскажите вариант с встроенными функциями
Пример: =RANDFROM(2,4,5,12) возвращает 5
[moder]А с какого перепугу тема в разделе "Готовые решения"?
Давайте так - я тему перенесу, а Вы прочитайте Правила форума и выполните п.3 в части приложения примера. Нужно видеть, откуда берутся аргументы


Сообщение отредактировал Junk - Воскресенье, 10.01.2016, 14:50
 
Ответить
СообщениеЗдравствуйте, напишите кто-нибудь функцию RANDFROM(arg1;arg2;...;argN) которая возвращает случайный аргумент из списка или подскажите вариант с встроенными функциями
Пример: =RANDFROM(2,4,5,12) возвращает 5
[moder]А с какого перепугу тема в разделе "Готовые решения"?
Давайте так - я тему перенесу, а Вы прочитайте Правила форума и выполните п.3 в части приложения примера. Нужно видеть, откуда берутся аргументы

Автор - Junk
Дата добавления - 10.01.2016 в 13:27
Junk Дата: Воскресенье, 10.01.2016, 13:55 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
У меня нет примера, это просьба написать функцию на языке которым я не владею. В EXCEL есть встроенная функция RANDBETWEEN(start,finish) она подходит для частного случая, например RANDFROM(4,5,6,7,8,9) == RANDBETWEEN(4,9)

ПРИМЕР РЕШЕНИЯ НА JavaScript:

function randfrom() {
return arguments[Math.floor(Math.random()*arguments.length)]
}
randfrom(1,4,5,8) // возвратит, например, 4
[moder]Тема, кстати, тоже не по правилам названа. Переименуйте во что-то более конкретное.[/moder]


Сообщение отредактировал Manyasha - Воскресенье, 10.01.2016, 13:59
 
Ответить
СообщениеУ меня нет примера, это просьба написать функцию на языке которым я не владею. В EXCEL есть встроенная функция RANDBETWEEN(start,finish) она подходит для частного случая, например RANDFROM(4,5,6,7,8,9) == RANDBETWEEN(4,9)

ПРИМЕР РЕШЕНИЯ НА JavaScript:

function randfrom() {
return arguments[Math.floor(Math.random()*arguments.length)]
}
randfrom(1,4,5,8) // возвратит, например, 4
[moder]Тема, кстати, тоже не по правилам названа. Переименуйте во что-то более конкретное.[/moder]

Автор - Junk
Дата добавления - 10.01.2016 в 13:55
Manyasha Дата: Воскресенье, 10.01.2016, 14:22 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 1974
Репутация: 817 ±
Замечаний: 0% ±

Excel 2010, 2016
Junk, плохо переименовали...
Цитата
давайте теме название, отражающее суть Вашей проблемы

Используйте фразу из тела поста
функцию... которая возвращает случайный аргумент из списка


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеJunk, плохо переименовали...
Цитата
давайте теме название, отражающее суть Вашей проблемы

Используйте фразу из тела поста
функцию... которая возвращает случайный аргумент из списка

Автор - Manyasha
Дата добавления - 10.01.2016 в 14:22
Manyasha Дата: Воскресенье, 10.01.2016, 14:54 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 1974
Репутация: 817 ±
Замечаний: 0% ±

Excel 2010, 2016
Junk, udf:
[vba]
Код
Function randfrom(args)
    Dim ind As Integer
    Randomize
    ind = Int((UBound(args) + 1) * Rnd)
    randfrom = args(ind)
End Function
Sub primer()
    Debug.Print randfrom(Array(1, 9, 5, 4, 2))
End Sub
[/vba]
можно формулой, как-то так
Код
=ИНДЕКС(A1:A6;СЛУЧМЕЖДУ(1;6))
К сообщению приложен файл: randfrom.xlsm(14Kb)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеJunk, udf:
[vba]
Код
Function randfrom(args)
    Dim ind As Integer
    Randomize
    ind = Int((UBound(args) + 1) * Rnd)
    randfrom = args(ind)
End Function
Sub primer()
    Debug.Print randfrom(Array(1, 9, 5, 4, 2))
End Sub
[/vba]
можно формулой, как-то так
Код
=ИНДЕКС(A1:A6;СЛУЧМЕЖДУ(1;6))

Автор - Manyasha
Дата добавления - 10.01.2016 в 14:54
_Boroda_ Дата: Воскресенье, 10.01.2016, 15:03 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11332
Репутация: 4677 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Для произвольно расположенных аргументов формулой можно так
Код
=ИНДЕКС((A1;A5;D4;C7;F11);;;СЛУЧМЕЖДУ(1;СЧЁТЗ(A1;A5;D4;C7;F11)))

я потому и написал
Нужно видеть, откуда берутся аргументы
К сообщению приложен файл: 68179871.xlsx(8Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДля произвольно расположенных аргументов формулой можно так
Код
=ИНДЕКС((A1;A5;D4;C7;F11);;;СЛУЧМЕЖДУ(1;СЧЁТЗ(A1;A5;D4;C7;F11)))

я потому и написал
Нужно видеть, откуда берутся аргументы

Автор - _Boroda_
Дата добавления - 10.01.2016 в 15:03
Udik Дата: Воскресенье, 10.01.2016, 15:03 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 191 ±
Замечаний: 0% ±

Excel 2016 х 64
нечто такое
[vba]
Код

Public Sub test()
Dim arrSet(1 To 5) As Integer
Dim i As Integer
    
For i = 1 To 5
    arrSet(i) = i
Next i
Randomize
i = arrSet(Int((5 * Rnd) + 1))
Debug.Print i 'отладка выводится в окошко Immediate
End Sub

[/vba]
К сообщению приложен файл: 6387650.xlsm(17Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениенечто такое
[vba]
Код

Public Sub test()
Dim arrSet(1 To 5) As Integer
Dim i As Integer
    
For i = 1 To 5
    arrSet(i) = i
Next i
Randomize
i = arrSet(Int((5 * Rnd) + 1))
Debug.Print i 'отладка выводится в окошко Immediate
End Sub

[/vba]

Автор - Udik
Дата добавления - 10.01.2016 в 15:03
Nic70y Дата: Воскресенье, 10.01.2016, 15:11 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4084
Репутация: 872 ±
Замечаний: 0% ±

Excel 2013
откуда берутся аргументы
я подумал, что отсюда:
Код
=ИНДЕКС({4;5;6;7;8;9};СЛУЧМЕЖДУ(1;6))
ну может ошибаюсь конечно


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)
 
Ответить
Сообщение
откуда берутся аргументы
я подумал, что отсюда:
Код
=ИНДЕКС({4;5;6;7;8;9};СЛУЧМЕЖДУ(1;6))
ну может ошибаюсь конечно

Автор - Nic70y
Дата добавления - 10.01.2016 в 15:11
Junk Дата: Воскресенье, 10.01.2016, 15:20 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Manyasha, спасибо, но когда я пишу в excel =randfrom(1;2;3) или =randfrom(array(1,2,3)) выскакивает ошибка, простите, за глупые на ваш взгляд, вопросы, но что мне вписать в ячейку чтобы пользоваться вашей функцией

P.S. Вариант с индексом вполне меня устраивает, но данная функция была бы пределом совершенства )
 
Ответить
СообщениеManyasha, спасибо, но когда я пишу в excel =randfrom(1;2;3) или =randfrom(array(1,2,3)) выскакивает ошибка, простите, за глупые на ваш взгляд, вопросы, но что мне вписать в ячейку чтобы пользоваться вашей функцией

P.S. Вариант с индексом вполне меня устраивает, но данная функция была бы пределом совершенства )

Автор - Junk
Дата добавления - 10.01.2016 в 15:20
Junk Дата: Воскресенье, 10.01.2016, 15:26 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Nic70y, вот то что я хотел
Код
=INDEX({4;5;6;7;8;9};RANDBETWEEN(1;6))

Спасибо всем что помогли мне
 
Ответить
СообщениеNic70y, вот то что я хотел
Код
=INDEX({4;5;6;7;8;9};RANDBETWEEN(1;6))

Спасибо всем что помогли мне

Автор - Junk
Дата добавления - 10.01.2016 в 15:26
Manyasha Дата: Воскресенье, 10.01.2016, 15:44 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 1974
Репутация: 817 ±
Замечаний: 0% ±

Excel 2010, 2016
что мне вписать в ячейку

Код
=randfrom({4;5;6;7;8;9})

Саму функцию поправила
[vba]
Код
Function randfrom(args)
    Dim ind As Integer
    Randomize
    ind = Int((UBound(args) - LBound(args) + 1) * Rnd + LBound(args))
    randfrom = args(ind)
End Function
[/vba]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение
что мне вписать в ячейку

Код
=randfrom({4;5;6;7;8;9})

Саму функцию поправила
[vba]
Код
Function randfrom(args)
    Dim ind As Integer
    Randomize
    ind = Int((UBound(args) - LBound(args) + 1) * Rnd + LBound(args))
    randfrom = args(ind)
End Function
[/vba]

Автор - Manyasha
Дата добавления - 10.01.2016 в 15:44
_Boroda_ Дата: Воскресенье, 10.01.2016, 15:48 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11332
Репутация: 4677 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Такой вариант
[vba]
Код
Function Proizvol(ParamArray Mas())
    Application.Volatile
    Proizvol = Mas(Fix((UBound(Mas) + 1) * Rnd))
End Function
[/vba]
К сообщению приложен файл: 68179871_1.xlsm(13Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТакой вариант
[vba]
Код
Function Proizvol(ParamArray Mas())
    Application.Volatile
    Proizvol = Mas(Fix((UBound(Mas) + 1) * Rnd))
End Function
[/vba]

Автор - _Boroda_
Дата добавления - 10.01.2016 в 15:48
Gustav Дата: Воскресенье, 10.01.2016, 16:53 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1410
Репутация: 541 ±
Замечаний: 0% ±

начинал с Excel 4.0...
А ещё можно прямо Жаву ввинтить в макрос:
[vba]
Код
Function randfrom(ParamArray Mas())
    With CreateObject("ScriptControl")
        .Language = "JScript"
        .AddCode "function randfrom() {return arguments[Math.floor(Math.random()*arguments.length)]} " & _
                 "function x() {return randfrom(" & Join(Mas, ",") & ")}"
        randfrom = .Run("x")
    End With
End Function
[/vba]
Вызов в коде:
[vba]
Код
randfrom(1,4,5,8)
[/vba]
Вызов в ячейке:
Код
=randfrom(1;4;5;8)

или
Код
=randfrom(A1;B1;C1;D1)


Мой tip box - яд 41001663842605
 
Ответить
СообщениеА ещё можно прямо Жаву ввинтить в макрос:
[vba]
Код
Function randfrom(ParamArray Mas())
    With CreateObject("ScriptControl")
        .Language = "JScript"
        .AddCode "function randfrom() {return arguments[Math.floor(Math.random()*arguments.length)]} " & _
                 "function x() {return randfrom(" & Join(Mas, ",") & ")}"
        randfrom = .Run("x")
    End With
End Function
[/vba]
Вызов в коде:
[vba]
Код
randfrom(1,4,5,8)
[/vba]
Вызов в ячейке:
Код
=randfrom(1;4;5;8)

или
Код
=randfrom(A1;B1;C1;D1)

Автор - Gustav
Дата добавления - 10.01.2016 в 16:53
МВТ Дата: Воскресенье, 10.01.2016, 17:05 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 136 ±
Замечаний: 0% ±

Excel 2007
Мне кажется, удобнее диапазоном передавать
UPD вариант для одно- и двумерных диапазонов
[vba]
Код
Function tt(Rng As Range) As Double
    Dim arr: arr = Rng.Value
    Dim i As Long, j As Long
    i = Application.WorksheetFunction.RandBetween(1, UBound(arr))
    j = Application.WorksheetFunction.RandBetween(1, UBound(arr, 2))
    tt = arr(i, j)
End Function
[/vba]


Сообщение отредактировал МВТ - Воскресенье, 10.01.2016, 17:23
 
Ответить
СообщениеМне кажется, удобнее диапазоном передавать
UPD вариант для одно- и двумерных диапазонов
[vba]
Код
Function tt(Rng As Range) As Double
    Dim arr: arr = Rng.Value
    Dim i As Long, j As Long
    i = Application.WorksheetFunction.RandBetween(1, UBound(arr))
    j = Application.WorksheetFunction.RandBetween(1, UBound(arr, 2))
    tt = arr(i, j)
End Function
[/vba]

Автор - МВТ
Дата добавления - 10.01.2016 в 17:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Функция, которая возвращает случайный аргумент из списка (Макросы/Sub)
Страница 1 из 11
Поиск:

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