我有一个关于如何让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
答案 0 :(得分:1)
如果我理解正确,这将
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
结果
可以修改它以从Col A或B 中选择一个随机学生ID,如果它是B
则显示错误