每个If Then循环的VBA表-重复文本

时间:2019-06-14 17:55:40

标签: vba if-statement foreach

我需要一个代码,该代码可以查看表中的一列,如果文本中有特定的字符串,则需要在另一列中输入新文本。

因此,请检查A列(服务子类型),然后在A列的基础上的B列(产品类别)中输入文本。

Dim productsubtype As Range

For Each productsubtype In Range("RawData[Service Sub Type]")
    If productsubtype.Value = "Training" Then
    Range("RawData[Product Category]").Value = "Education"

    End If

Next productsubtype

但是发生的是,无论B列中的内容是什么,它都只在B列的所有内容中填充了“教育”。

1 个答案:

答案 0 :(得分:0)

如Mathieu所建议的那样,您应尽可能使用查找表,而不要使用长的if语句。

if this then that可能并不总是那么简单,但是您应该能够使用查找表消除其中大多数的if语句,而仅根据其真正的意义使用一些if语句。

enter image description here

话虽如此,使用您的示例并添加了查找表(在我的示例中,我将其命名为lookupTable),这应该为您提供一个起点:

Option Explicit

Sub lookupValues()

Dim arrData As Variant: arrData = Range("RawData") 'declare and allocate your table to an array
Dim arrLookup As Variant: arrLookup = Range("lookupTable") 'declare and allocate your lookup table to an array
Dim R As Long, X As Long

For R = LBound(arrData) To UBound(arrData) 'for each row in your data
    For X = LBound(arrLookup) To UBound(arrLookup) 'for each row in the lookup table
        If arrData(R, 1) = arrLookup(X, 1) Then 'if there is a match
            arrData(R, 2) = arrLookup(X, 2) 'allocate the value to the array
            Exit For 'value found, check next
        End If
    Next X
Next R

Range("RawData") = arrData 'put the values back into the table

End Sub