我想在F列下存储值,然后根据以下条件将这些值与B列进行比较:
如果F列中的值为“2 - 高”,则将B列下相应单元格的值设置为“高”
如果F列中的值为“3 - 中”,则将B列下相应单元格的值设置为“中”
如果F列中的值为“4 - 低”,则将B列下相应单元格的值设置为“低”
如果F列中的值为“1 - 严重”,则将B列下相应单元格的值设置为“非常高”
如果F列中的值为'2 - 阻止',则将B列下相应单元格的值设置为'非常高'
我的代码是:
Sub ExcelMacro()
Dim ColumnFArray As Variant, ColumnB As Variant
ColumnFArray = Range("F5:F1000").Value
If Sheet1.Range("F5:F1000").Value = "2 - High" Then
Set ColumnB.Value = "High"
ElseIf ColumnF = "3 - Medium" Then
Set ColumnB.Value = "Medium"
ElseIf ColumnF = "4 - Low" Then
Set ColumnB.Value = "Low"
ElseIf ColumnF = "1 - Critical" Then
Set ColumnB.Value = "Very High"
Else
Set ColumnF.Value = "Very High"
End If
End Sub
我已附上以下图片以供参考
答案 0 :(得分:1)
您将收到错误,因为
ColumnF
的变量,该变量尚未声明,也未分配值.Value
属性(该属性不是对象,因此没有属性),ColumnB
数组的大小和Set
中尝试ColumnB
个值,但由于它不是对象,因此需要Let
(这是默认值)。您也没有执行任何类型的循环。
您的代码的重构版本,进行最小的更改,例如:
Sub ExcelMacro()
Dim ColumnFArray As Variant, ColumnB As Variant
Dim r As Long
ColumnFArray = Range("F5:F1000").Value
ReDim ColumnB(1 To UBound(ColumnFArray, 1), 1)
For r = 1 To UBound(ColumnFArray, 1)
If ColumnFArray(r, 1) = "2 - High" Then
ColumnB(r, 1) = "High"
ElseIf ColumnFArray(r, 1) = "3 - Medium" Then
ColumnB(r, 1) = "Medium"
ElseIf ColumnFArray(r, 1) = "4 - Low" Then
ColumnB(r, 1) = "Low"
ElseIf ColumnFArray(r, 1) = "1 - Critical" Then
ColumnB(r, 1) = "Very High"
Else
ColumnB(r, 1) = "Very High"
End If
Next r
Range("B5:B1000").Value = ColumnB
End Sub
但是,我认为你在这段代码中使用Variant
数组可能有些过分,所以我建议这样的事情:
Sub ExcelMacro()
Dim result As String
Dim r As Long
For r = 5 To 1000
Select Case Sheet1.Cells(r, "F").Value
Case "2 - High"
result = "High"
Case "3 - Medium"
result = "Medium"
Case "4 - Low"
result = "Low"
Case Else
result = "Very High"
End Select
Sheet1.Cells(r, "B").Value = result
Next
End Sub
请注意,我使用了Select Case
语句,而不是If
ElseIf
ElseIf
ElseIf
Else
End If
结构 - 在我看来,它似乎更容易阅读。
您可能还发现将1000
替换为Cells(Rows.Count, "F").End(xlUp).Row
非常有用 - 这意味着循环只会转到F列中的最后一个非空单元格。