Здравствуйте! Мне нужна такая функция, что бы выводила текст в рандомном порядке с таблицы, допустим, B1 : D58. После вывода этого рандомного текста, который находится в таблице B1 : D58 он больше не менялся.
Довольно глупая, но как умел на это время. Проблемы две: 1) если я изменю или нажму на на информацию в поле, куда сохранилась эта функция она снова рандомно сменит все данные. 2) Мне нужно реализовать так, что бы выделил поля, куда засунуть эту формулу и нажать кнопку (Shape / фигуру). Предполагаю, что без макроса не обойдётся.
Будьте добры, помогите это реализовать как можно скорее.
Здравствуйте! Мне нужна такая функция, что бы выводила текст в рандомном порядке с таблицы, допустим, B1 : D58. После вывода этого рандомного текста, который находится в таблице B1 : D58 он больше не менялся.
Довольно глупая, но как умел на это время. Проблемы две: 1) если я изменю или нажму на на информацию в поле, куда сохранилась эта функция она снова рандомно сменит все данные. 2) Мне нужно реализовать так, что бы выделил поля, куда засунуть эту формулу и нажать кнопку (Shape / фигуру). Предполагаю, что без макроса не обойдётся.
Будьте добры, помогите это реализовать как можно скорее. dsasda
Вы правы. Можно без кнопки. Макрос срабатывает по событию двойной клик по ЛКМ. Массив текстовых значений в диапазоне 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
Вы правы. Можно без кнопки. Макрос срабатывает по событию двойной клик по ЛКМ. Массив текстовых значений в диапазоне 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]
Код
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]
Не вижу смысла давать файл, если написал все границы, контент не имеет значения в данном случае. По поводу макроса, переделал его под кнопку:
[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
Не вижу смысла давать файл, если написал все границы
Я вам дал проверенный, работающий код. Чтобы проверить мне пришлось по вашему описанию сделать файл. Проще получить от вас файл, чем делать его самому. Поэтому по правилам форума прикладывать файл необходимо, кроме тех случаев, когда вопрос не касается конкретно Вашего файла.
Не вижу смысла давать файл, если написал все границы
Я вам дал проверенный, работающий код. Чтобы проверить мне пришлось по вашему описанию сделать файл. Проще получить от вас файл, чем делать его самому. Поэтому по правилам форума прикладывать файл необходимо, кроме тех случаев, когда вопрос не касается конкретно Вашего файла.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.