2017-07-19 257 views
0

如何根据条件从数组中选择一个值并将其写入单元格中?excel vba - 搜索数组中的值

我有这样的:

Dim Material As Variant 

Dim Material1 As Variant 
Material1 = Array("16", "20", "26", "32", "40", "50", "63", "70") 

Dim Material2 As Variant 
Material2 = Array("12", "16", "22", "28", "34", "42", "58", "65") 

Dim Rows as Long 
For Rows = 9 to lastrow 

If Range("P"&Rows).Value <> 0 then 

If Range("W"&Rows).value = Material1 then 
Material = Material1 
'material can be Material2 also, but I would do the same IF 


If Range("Z"&Rows).Value > 2 then 
Range ("X"&Rows).value = ' this is where I fail, I want to write here a value from Material1 (looping through position 1, 2, etc...)that does the opposite to my condition, i.e. <2 (this is related with formulas in the sheet) 

我也没有忘记“结束”的国际单项体育联合会和移动到“下一行”

回答

0

您正在尝试与整个Material1比较单元格的值阵列的位置:

If Range("W"&Rows).value = Material1 then 

如果你想检查是否在列中的值“W”等于元素之一Material1,您可以使用Match功能:

If Not IsError(Application.Match(Range("W" & Rows).Value, Material1, 0)) Then 
+0

我明白了。但是,是的,我试图将一个单元格的内容与整个数组进行比较。如果单元格内容是“Material1”(文本),我希望它在名为“Material1”的数组内搜索一个值。 –

+0

@ZedA。不知道我明白,你想看看列“W”中的文本是否是“Material1”,然后做什么?在'Material1'数组中找到什么值? –

+0

是的,如果列“W”中的文本是“Material1”,我希望它在具有相同名称的数组中搜索一个值。该值必须满足我的条件,这与列Z有关。如果列Z <2,我希望它在该数组中搜索一个值,当它写入列X时,将列Z更改为<2。确定如果我清楚! –

0

只是遍历数组的:

For i = LBound(Materials1) To UBound(Materials1) 
    'check for value using Materials(i) 
Next i 
+0

我如何选择满足条件的值,然后在Range(“x”和“rows”)上进行说明? –

+0

编写代码来再次测试你的条件数组元素,然后写入'Range(“x”&rows)= Materials(i)'。 –