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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос: выбор случайной ячейки из заданного диапазона - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Макрос: выбор случайной ячейки из заданного диапазона
javzier987 Дата: Среда, 11.08.2021, 20:35 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Добрый вечер!

Я пытаюсь создать макрос, который будет выбирать случайную ячейку из заданного диапазона, копировать её в другую ячейку + выводить содержимое выбранной ячейки через MsgBox.
Какие исходные данные:

-есть Лист1 и Лист2;
-на Листе1 находится параметр "Выбранное событие". Для примера пусть данные будут появляться в ячейке B3;
-на Листе2 находится список возможных событий. Для примера пусть это будет диапазон B3:B12.

Мне, нужно, чтобы при активации макроса:

1) случайно выбиралась ячейка из диапазона B3:B12 на Листе2;
2) текстовое значение случайно выбранной ячейки копировалось в выделенную ячейку из диапазона B3:B12 на Листе1;
3) через MsgBox выводилось текстовое значение случайно выбранной ячейки

При повторном активации макроса - нужно, чтобы пункты 1),2),3) выполнялись заново.

Пока что мой макрос не работает, и выглядит он так:

[vba]
Код
Sub test()
For Each cell In Intersect(Selection, Range("B3:12"))
With cell
.Formula = "=INDIRECT( ADDRESS( ROW(Лист2!RC) + RANDBETWEEN(0, ROWS(Лист2!RC:R[9]C)-1), COLUMN(Лист2!RC) ))"
    .Value = .Value
End With
MsgBox = "Здесь должен отобразиться текст случайно выбранного события"
End Sub
[/vba]

Помогите пожалуйста с макросом. Какой макрос должен получиться в итоге?
К сообщению приложен файл: tablitsa.xlsm (18.0 Kb)
 
Ответить
СообщениеДобрый вечер!

Я пытаюсь создать макрос, который будет выбирать случайную ячейку из заданного диапазона, копировать её в другую ячейку + выводить содержимое выбранной ячейки через MsgBox.
Какие исходные данные:

-есть Лист1 и Лист2;
-на Листе1 находится параметр "Выбранное событие". Для примера пусть данные будут появляться в ячейке B3;
-на Листе2 находится список возможных событий. Для примера пусть это будет диапазон B3:B12.

Мне, нужно, чтобы при активации макроса:

1) случайно выбиралась ячейка из диапазона B3:B12 на Листе2;
2) текстовое значение случайно выбранной ячейки копировалось в выделенную ячейку из диапазона B3:B12 на Листе1;
3) через MsgBox выводилось текстовое значение случайно выбранной ячейки

При повторном активации макроса - нужно, чтобы пункты 1),2),3) выполнялись заново.

Пока что мой макрос не работает, и выглядит он так:

[vba]
Код
Sub test()
For Each cell In Intersect(Selection, Range("B3:12"))
With cell
.Formula = "=INDIRECT( ADDRESS( ROW(Лист2!RC) + RANDBETWEEN(0, ROWS(Лист2!RC:R[9]C)-1), COLUMN(Лист2!RC) ))"
    .Value = .Value
End With
MsgBox = "Здесь должен отобразиться текст случайно выбранного события"
End Sub
[/vba]

Помогите пожалуйста с макросом. Какой макрос должен получиться в итоге?

Автор - javzier987
Дата добавления - 11.08.2021 в 20:35
bmv98rus Дата: Среда, 11.08.2021, 21:25 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4115
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
ну то что вы не поняли, как работает часть конструкции - это факт. Обрабатывается набор выделенных ячеек, которые попадают в диапазон Range("B3:12") а не одна ячейка. если нужна только одна, то это скорее всего ActiveCell
Далее, нет смысла использовать формулы листа, как и в том примере.
[vba]
Код

Sub test()
    If Not Intersect(ActiveCell, Range("B3:B12")) Is Nothing Then
        With Worksheets("Лист2").Range("b3:b12")
            Randomize
            ActiveCell = .Cells(Rnd() * (.Count) + 1)
        End With
        MsgBox ActiveCell
    End If
End Sub
[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Среда, 11.08.2021, 21:25
 
Ответить
Сообщениену то что вы не поняли, как работает часть конструкции - это факт. Обрабатывается набор выделенных ячеек, которые попадают в диапазон Range("B3:12") а не одна ячейка. если нужна только одна, то это скорее всего ActiveCell
Далее, нет смысла использовать формулы листа, как и в том примере.
[vba]
Код

Sub test()
    If Not Intersect(ActiveCell, Range("B3:B12")) Is Nothing Then
        With Worksheets("Лист2").Range("b3:b12")
            Randomize
            ActiveCell = .Cells(Rnd() * (.Count) + 1)
        End With
        MsgBox ActiveCell
    End If
End Sub
[/vba]

Автор - bmv98rus
Дата добавления - 11.08.2021 в 21:25
javzier987 Дата: Среда, 11.08.2021, 21:35 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

bmv98rus, не судите строго. Я совсем "зелёный" в этом деле - мне всё это еще изучать и изучать.
И спасибо большое за помощь - уже второй раз за вечер :)
 
Ответить
Сообщениеbmv98rus, не судите строго. Я совсем "зелёный" в этом деле - мне всё это еще изучать и изучать.
И спасибо большое за помощь - уже второй раз за вечер :)

Автор - javzier987
Дата добавления - 11.08.2021 в 21:35
  • Страница 1 из 1
  • 1
Поиск:

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