Excel VB - 如果列包含字符串则多个

时间:2015-06-22 17:15:27

标签: excel vba excel-vba

我已经看了很多像这样的问题,但我只找到了公式,并且VB示例似乎没有检查列中单元格的值。

我能够在Excel中导出以下公式:

=IF(AND(ISNUMBER(SEARCH("Cat",R2)),OR(ISNUMBER(SEARCH("5E",R2)),ISNUMBER(SEARCH("6",R2))), ISNUMBER(SEARCH("Patch",R2)), ISNUMBER(SEARCH("Cables",R2))), "CAT 5E Ethernet Cables")

问题是此公式仅检查500个可能值中的1个。这没有效果。另外,当我检查整行时,我必须使它成为一个大的公式,因为如果我不这样做,公式会覆盖前一个公式的结果......

所以,Visual Basic ......我想我可能会更好地编写某种 IF ELSE CASE 语句。我只是不明白如何在excel中这样做。我需要实现与上面的公式相同的东西,但不是检查一组条件,

我需要检查多个,并填充 S &根据每组条件的结果 T 列。

我发现这个网页刚刚提到Excel并显示了VB IF - ELSE 语句。如何使此语句检查Excel列?

我在this post中尝试了所选答案而没有运气:

    Private Sub UpdateCategories()
        Dim x As Long
        For x = 1 To 5000
            If InStr(1, Sheet1.Range("$B$" & x), "cat") > 0 And InStr(1, Sheet1.Range("$B$" & x), "5e") > 0 Then
                Sheet1.Range("$T$" & x) = Sheet1.Range("$T$" & x) & "CAT 5E Ethernet Cables (Test)"
            End If
        Next
    End Sub

感谢任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

假设您选择使用数据表格与您的字符串进行比较的路线。

你需要有一张这样的表格(也许这不是你想要的,因为我没有完全理解你的数据是怎样的,但这个想法仍然存在)。如果需要,您可以在第三列中拥有子类别以及类别。

列A | B栏

关键字|类别

CAT | ATX案例

5e | Mini-ITX案例

重要的话| MicroATX案例

...

这需要手动填写。我不确定您正在查看的数据量。如果您可以有效地复制/粘贴内容,这可能会非常迅速,具体取决于您的数据形式。

如果有,请使用此代码循环。我假设数据表在Sheet1的A列和B列中,值在Sheet2的A列中。

dim listLength as integer 'number of values to look at
dim i as integer
dim dataLength as integer 'number of keywords
dim j as integer
dim keyword as string
dim value as string

listlength = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row - 1 'assuming you start on row 2
datalength = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row - 1 'assuming you start on row 2


for i = 2 to listLength + 1
    value = Sheet2.Range("A")(i)
    for j = 2 to dataLength + 1
        keyword = Sheet1.Range("A")(j)  
        if instr(value, keyword) <> 0 then
 ' what happens when the keyword is present goes here
        end if
    next j
next i