如何基于多个列表条件从另一个Excel工作表中获取单元格值

时间:2019-03-06 09:01:43

标签: excel vba if-statement

对于作为新手查询遇到的问题,我深表歉意,但是一段时间以来,我对此深感困惑。

我正在为员工构建一个excel电子表格,以便能够根据同一工作簿中不同工作表中包含的参考数据轻松自动地比较库存清单。

困难之处在于我想基于从我创建的总共6个条件下拉列表中选择的值来提取此参考数据。

根据所选内容,工作表1上的值将自动显示工作表2中的相关值(即,如果更改了列表选项之一,则“结果”将自动使用相关数据更新)。

我尝试使用查找函数,数组和嵌套的if函数,但是由于无法自己了解这种类型的编码,我无法使其正常工作。因此,我正在寻找有关编写此功能要求的最佳方法的建议。

我要尝试的格式是这样:

第1张-“ GUI” 该工作表具有下拉列表和“显示结果”部分

dd1 - State (6 options)
dd2 - Product Type (4 options)
dd3 - Product Brand (3 options)
dd4 - Product variation 1 (eg model) (say, 2 options)
dd5 - Product variation 2 (eg colour) (5 options)
dd6 - Product variation 3 (eg size) (3 options)

第2张-参考数据

Table 1 - ACT products and variations
Table 2 - VIC products and variations 
Table 3 - NSW products and variations etc and so on...

基于上述Sheet1中的选择,我希望在下面的单元格中列出产品和价格。目前,我有条件函数根据对上一个列表的正确选择来列出可用选项。

我需要它,以便:

IF dd1 = "ACT" AND dd2 = "Mobile" AND dd3 = "Apple" AND dd4 = "iPhone" AND dd5 = "white" AND dd6 = "128Gb"

然后

结果单元格,例如Sheet1!C10,将基于Sheet2中的数据列表表反映商品的价格(例如,列出的值在Sheet 2中,单元格A5)

但是,如果说列表选择发生了变化,例如dd3更改为“ Samsung”,则列表将由于条件格式而自动更新;但是我然后希望相应地更新结果(例如,基于新选择列出的价格将反映在Sheet2!B3中)。

由于有很多选择和变化,因此工作表2中有很多表可供参考,因此涵盖所有这些选项的'IF'语句将是庞大而复杂的。

是否有相对简洁的方法来编写适合该功能的vb代码?

我在worksheet_change子目录下的当前代码

    If Range("D10").Value = "ACT" And (Range("D11").Value = "Mobile" And (Range("D13").Value = "Samsung" And (Range("D14").Value = "S7") And (Range("D15").Value = "Black") And (Range("D16").Value = "128"))))) Then

    Sheets("Sheet2").Range("F20").Value = Sheets("Sheet4").Range("C5").Value2

    Sheets("Sheet2").Range("F29").Value = Sheets("Sheet4").Range("C6").Value2

ElseIf Range("D10").Value = "ACT" And (Range("D11").Value = "Mobile" And (Range("D13").Value = "Samsung" And (Range("D14").Value = "S7") And (Range("D15").Value = "Black") And (Range("D16").Value = "256"))))) Then

    Sheets("Sheet2").Range("F21").Value = Sheets("Sheet4").Range("C8").Value2

    Sheets("Sheet2").Range("F22").Value = Sheets("Sheet4").Range("C9").Value2

    Sheets("Sheet2").Range("F29").Value = Sheets("Sheet4").Range("C10").Value2

”,依此类推。有了所有的变体,大约有20多个elseif语句。

End If

仅出于此请求的目的粘贴了2x部分。我可以将其复制下来或针对每个选项相应地调整代码。

我以前没有使用过(也没有写过数组)(所以也没有),所以我不知道/这是否是更好的方法,但是我之前已经为基本功能和宏编写了vba;但我愿意学习。

0 个答案:

没有答案