Excel vba - выбрать случайную ячейку из диапазона (кнопка) - PullRequest
0 голосов
/ 06 сентября 2018

Я новичок и пытаюсь сделать случайный выбор ячеек.

У меня есть список имен в столбце A - в ячейках с 1 по 10.

У меня есть кнопка налист - при нажатии он должен случайным образом выбрать 1 имя в списке и сделать его другим цветом

enter image description here Любые идеи, чтобы помочь мне?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

здесь вы идете

Sub random()

Dim ColumnA As Long
Dim StartRow As Long
Dim HeaderRow As Long
Dim LastRow As Long

ColumnA = 1
HeaderRow = 1  'this is redundant but to show you if you have header then your start row is 2
StartRow = 2
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(StartRow , ColumnA), Cells(LastRow, ColumnA)).Interior.Color = xlNone 'remove this line if you dont need resetting


Dim randomNum As Long
randomNum = WorksheetFunction.RandBetween(StartRow, LastRow)
Cells(randomNum, ColumnA).Interior.Color = RGB(255, 0, 0)
Cells(randomNum, ColumnA).Select



End Sub
0 голосов
/ 06 сентября 2018

Вы можете использовать функцию рабочего листа RandBetween. Он будет генерировать число от 1 до 10 и использовать его для выбора ячейки в диапазоне A1:A10. В приведенном ниже примере используется кнопка команды ActiveX на листе.

Option Explicit
Private Sub CommandButton1_Click()
    With ThisWorkbook.Worksheets("Sheet1").Range("A1:A10") '<==change to your sheet with data and button
        .ClearFormats
        .Cells(Application.WorksheetFunction.RandBetween(1, 10)).Interior.Color = vbRed
    End With
End Sub

Если вы хотите воспользоваться Randomize, для установки начальных значений, вы можете использовать следующую перезапись. Источник функции: wellsr.com (незначительная адаптация от меня).

Option Explicit
Private Sub CommandButton1_Click()
    With ThisWorkbook.Worksheets("Sheet1").Range("A1:A10")
        .ClearFormats
        .Cells(RndBetween(1, 10)).Interior.Color = vbRed
    End With
End Sub

Public Function RndBetween(ByVal Low, ByVal High) As Integer
   Randomize
   RndBetween = Int((High - Low + 1) * Rnd + Low)
End Function
...