如何在VBA中选择随机单元格?

时间:2018-04-30 21:48:42

标签: vba

我有一个关于如何让VBA从我的工作表中选择随机数的问题。我有一个专栏" A"与推迟学生的人员ID,列" B"与非延迟学生的人员ID," C"带有学生ID,列" D"每个人ID和列的等级总和" E"经过多次尝试。 我想让VBA找到一个随机的人ID,然后选择同一个人的其他列。

离。如果VBA随机选择延迟学生的人员ID:285639,则必须显示学生ID和该特定人员ID的等级总和。如果它选择了未延迟的人,则必须向用户显示错误消息。

到目前为止,我已经使用了以下代码,这些代码完美运行,但我不知道如何让它知道找到该人ID的具体信息。最后,它应该出现在消息框中。

我希望有人可以提供帮助。

    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 :(得分:1)

如果我理解正确,这将

  • 选择随机延迟学生ID(col A) - 消除了对错误消息的需求
  • 在C列中找到学生ID
  • 激活延迟学生ID单元格
  • 以黄色
  • 突出显示特定延迟学生ID(C,D和E列)的行
  • 显示具有学生ID和该特定人员ID的成绩总和的留言箱
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 中选择一个随机学生ID,如果它是B

则显示错误