存储列值,然后根据存储的值在另一列中设置值

时间:2017-01-15 17:34:17

标签: excel-vba vba excel

我想在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

我已附上以下图片以供参考

Date

1 个答案:

答案 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列中的最后一个非空单元格。