公式法
首先,您可以使用 B1:B5 范围内的公式来做到这一点:
=IF(A:A>=60,"pass","fail")
或者您可以使用 VBA 编写该公式
Range("B1:B5").Formula = "=IF(A:A>=60,""pass"",""fail"")"
forumlas 的优势在于,它们会在每次分数变化时自动更新。如果您使用 VBA(不使用公式)执行此操作,结果将不会自动更新。
VBA方法
如果您仍想使用 VBA 进行此操作,则需要遍历您的数据并测试每个分数。使用数组执行此操作可能是使用 VBA 最快的方法。
Option Explicit
Public Sub TestResult()
Dim ScoresArr As Variant 'read values into an array
ScoresArr = Worksheets("Sheet1").Range("A1:A5").Value
Dim ResultArr As Variant 'create result array with same size
ReDim ResultArr(1 To UBound(ScoresArr, 1), 1 To UBound(ScoresArr, 2))
Dim iRow As Long
For iRow = 1 To UBound(ScoresArr, 1) 'loop through array
If ScoresArr(iRow, 1) >= 60 Then 'test each score
ResultArr(iRow, 1) = "pass"
Else
ResultArr(iRow, 1) = "fail"
End If
Next iRow
Worksheets("Sheet1").Range("B1:B5").Value = ResultArr 'write results array back to cells
End Sub
如果您想让用户选择分数范围,请使用Application.InputBox 和Type:=8,如下所示:
Option Explicit
Public Sub TestResult()
Dim ScoresRange As Variant
On Error GoTo CANCEL_TEST 'the next line will throw an error if cancel is pressed
Set ScoresRange = Application.InputBox(Prompt:="Select the scores", Title:="Test Result", Type:=8)
On Error GoTo 0 'always re-activate error reporting!!!
If ScoresRange.Columns.Count <> 1 Then 'test if only one column was selected
MsgBox "Only selection of one column is allowed."
Exit Sub
End If
Dim ScoresArr As Variant 'read values into an array
ScoresArr = ScoresRange.Value
Dim ResultArr As Variant 'create result array with same size
ReDim ResultArr(1 To UBound(ScoresArr, 1), 1 To UBound(ScoresArr, 2))
Dim iRow As Long
For iRow = 1 To UBound(ScoresArr, 1) 'loop through array
If ScoresArr(iRow, 1) >= 60 Then 'test each score
ResultArr(iRow, 1) = "pass"
Else
ResultArr(iRow, 1) = "fail"
End If
Next iRow
ScoresRange.Offset(ColumnOffset:=1).Value = ResultArr 'write results array back to cells
CANCEL_TEST:
End Sub