Как выбрать случайные ячейки в VBA? - PullRequest
0 голосов
/ 01 мая 2018

У меня вопрос о том, как разрешить VBA выбирать случайные числа из моего листа. У меня есть столбец «A» с идентификатором лица для учащихся с задержкой, столбец «B» с идентификатором лица для учащихся с задержкой, столбец «C» с идентификатором студента, столбец «D» сумма оценок для каждого идентификатора и столбца лица » E "с рядом попыток. Я хочу позволить VBA найти произвольный идентификатор человека, а затем выбрать другие столбцы из того же идентификатора.

ех. если VBA произвольно выбирает идентификатор человека для задержанных студентов: 285639, то он должен показать идентификатор студента и сумму оценок для этого конкретного идентификатора человека. и если он выбирает не задержанного человека, сообщение об ошибке должно быть показано пользователю.

До сих пор я использовал следующие коды, которые отлично работают, но я не знаю, как сообщить, чтобы найти конкретную информацию для этого идентификатора человека. Наконец, оно должно появиться в окне сообщения.

Надеюсь, кто-нибудь может помочь.

    Dim RNG As Range
    Set RNG = Range("A2:B5478")

    Dim randomCell As Long
        randomCell = Int(Rnd * RNG.Cells.Count) + 1

    With RNG.Cells(randomCell)
        .Select
        .Interior.Color = vbYellow
    End With


End Sub

1 Ответ

0 голосов
/ 01 мая 2018

Если я правильно понимаю, это будет

  • Выбор случайного идентификатора задержанного студента (столбец A) - устраняет необходимость в сообщении об ошибке
  • Найти идентификатор студента в столбце C
  • Активирует ячейку с задержкой студенческого билета
  • Выделите строку для этого конкретного идентификатора задержанного студента (столбцы C, D и E) желтым цветом
  • Отображение окна сообщения с идентификатором студента и суммой оценок для этого конкретного идентификатора человека

Option Explicit

Public Sub SelectDelayed1()
    Dim ws As Worksheet, delayedCol As Range, personIdCol As Range
    Dim rndCell As Range, foundId As Variant, msg As String

    Set ws = ActiveSheet    'Or: Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set delayedCol = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
    Set personIdCol = ws.Range("C1:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row)

    Do
        Set rndCell = delayedCol.Cells(Int(Rnd * delayedCol.Cells.Count) + 1)
        foundId = Application.Match(rndCell, personIdCol, 0)
    Loop While IsError(foundId)

    rndCell.Activate

    With personIdCol
        msg = .Cells(1) & ": " & rndCell.Value2
        With .Cells(foundId)
            msg = msg & ", " & personIdCol.Cells(1).Offset(, 1) & ": " & .Offset(, 1)
            Union(rndCell, ws.Range(.Cells, .Resize(, 3))).Interior.Color = vbYellow
        End With
        MsgBox msg, vbOKOnly, .Cells(1) & ": " & rndCell.Value2
    End With
End Sub

Результат

TestResult


Его можно изменить, чтобы выбрать случайный идентификатор студента из Col A или B , и показать ошибку, если это B

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...