只有列A和B符合我的标准时,如何才能返回C列中的值?

所以当我试图帮助别人的时候就开始了,被困住了。 所以基本上我有列B,C和D中的值。如果在H2和I2中有我的标准,当我在H2和I2中的标准匹配B和C时,则在D中有相应的答案来填充J2。 基本上是一个2标准的查找。 我有这样的事情

Sub test() Dim rngCrit1 As Range Dim rngCrit2 As Range Dim rngAnswer As Range Dim strTarget As String Set rngCrit1 = Range("H2") Set rngCrit2 = Range("I2") Set rngAnswer = Range("J2") Range("B2").Select strTarget = ActiveCell.Value Do While strTarget <> "" With ActiveCell If strTarget = rngCrit1 Then If .Offset(0, 1).Value = rngCrit2 Then rngAnswer.Value = .Offset(0, 2) Else .Offset(1, 0).Select strTarget = ActiveCell.Value End If End If End With Loop End Sub 

现在这个东西只是崩溃,没有debugging或任何东西。 我是自学的,所以我确定我在这里搞了一个小狗。

*请注意,这只是为了满足我自己的兴趣并不重要,所以如果花费超过5分钟,请帮助其他需要我的人。

 Val1 Val2 Val3 Crit1 Crit2 Answer ar 12 gv 22 br 14 cs 15 ds 16 et 18 ft 19 gy 20 gv 22 

样本数据

你很想改善你的VBA技能。 我会build议的第一件事情,这将改善你写的任何macros,是避免使用。select。 直接使用范围对象。 例如:

 Range("B2").Select strTarget = ActiveCell.Value 

 strTarget = Range("B2").Value 

此外,通常,检查“空”值而不是""时,使用vbNullStringLen(variable)=0 。 至于为什么你的程序崩溃了,可能是你用的With 。 像Select ,应该避免在大多数情况下(绝对在这一个)。 尽pipe你更新了ActiveCell ,但它在With语句的范围之内,所以一旦你closures了它( End With ), ActiveCell这些改变就会被撤消(我build议单步执行macros并观察strTargetActiveCell的值)。 这可能并非如此,但我知道它适用于其他variables,这就是为什么我避免With (并避免在With语句中重新赋值)

无论如何,我会添加下面的代码,并重写如下所示的循环:

 Dim r as range set r = Range("B2") 'keep in mind this range is on the ActiveSheet, so you're better 'off explicitly naming the Sheet eg Sheet1.Range("B2") strTarget1 = Range("B2").Value strTarget2 = Range("C2").Value Do While Len(strTarget) <> 0 If strTarget1 = rngCrit1 Then If strTarget2 = rngCrit2 Then rngAnswer.Value = r.Offset(0,2) Exit Do End If End If set r = r.Offset(1,0) strTarget1 = r.Value strTarget2 = r.Offset(0,1).Value Loop 

请记住,您也可以使用一个Long计数器i循环,然后调用Sheet1.Cells(i,1).ValueSheet1.Cells(i,2).Value等等以获得不同列的值该行(而不是使用范围对象和.Offset

编辑:运行你的代码后,崩溃的原因是由于你的If语句。 无论你想要去下一个单元格。 删除Else并将Select End If语句放在Select之前。 因为如果你的两列满足条件,你想停止循环,那么在第二个赋值语句之后添加一个Exit Do Do。 我已经更新了我的代码,以显示这一点。

INDEXMATCHSUMPRODUCT往往适合于此。 前者的一个例子:

 http://support.microsoft.com/kb/59482 

如果你能保证val1和val2是唯一的(例如当searchg&v时,g和v只有1行),那么你可以使用sumifs
我把val1,val2和val3放在A,B,C列中,然后search到E,F和G中的答案,并提出这个公式
=SUMIFS(C2:C9,A2:A9,E2,B2:B9,F2)
当然,如果val3不是数字,或者你正在查找的字母有超过1行,这会失败