根据以前的列数据

时间:2015-08-23 14:39:05

标签: sql excel vba excel-vba

只是一个免责声明:我对Excel和sql的经验有限......我基本上都是菜鸟,所以请耐心等待。

我有一个大的Excel电子表格,每天发送给我,我想操纵。

我想添加几个根据各自行创建值的列。

ID  Color   Brand   Indicator
1   Green   Vizio   TRUE
2   Yellow  Samsung FALSE
3   Blue    Samsung TRUE
4   Red     Sony    FALSE
5   Orange  Vizio   TRUE

在上面的示例中,指标列是我希望根据前一列中的值创建的列。如果Brand在其中包含单词Vizio,或者如果颜色为蓝色,则指示符应为true。我提到它必须包含vizio这个词,因为有些情况下它不仅仅是" vizio",但也许" vizio tv"。

我希望尽可能自动化这个过程,所以您认为最好使用Excel VBA宏或SQL吗?

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下Excel宏。

Public Sub AddIndicators()
    Const INDICATOR_1_COLUMN = 4
    Const INDICATOR_1_FORMULA = "=OR(IFERROR(SEARCH(""vizio"",C2),0),(B2=""blue""))"

    [a2:index(a:a,counta(a:a))].Offset(, INDICATOR_1_COLUMN - 1) = INDICATOR_1_FORMULA
End Sub

可以轻松扩展其他指标列。

要让这个宏可以在您收到每日工作簿时运行(并且无需将宏添加到传入的工作簿),只需将此宏添加到Personal Workbook

完成此操作后,只需确保您的日常工作簿已打开,并在执行宏之前在工作表上找到指示符。

如果您不希望公式保留在指标列中,则可以使用此版本的宏:

Public Sub AddIndicators()
    Const INDICATOR_1_COLUMN = 4
    Const INDICATOR_1_FORMULA = "=OR(IFERROR(SEARCH(""vizio"",C2),0),(B2=""blue""))"

    With [a2:index(a:a,counta(a:a))].Offset(, INDICATOR_1_COLUMN - 1)
        .Formula = INDICATOR_1_FORMULA
        .Value = .Value
    End With
End Sub

答案 1 :(得分:0)

您的要求非常简单。您不必使用VBscript,宏等。可以使用excel函数完成。

=OR(ISNUMBER(SEARCH("blue",B2)),(ISNUMBER(SEARCH("vizio",C2))))

假设:颜色在B列中,Brand在列c中,数据从第2行开始。第一行用于标题。