2015-12-23 182 views
0
If Range("D32").Value = 2 Then 
    If Range("D15").Value = 0 Then 
     Range("D15").Value = 1 
     Range("D32").Value = 1 
    End If 
End If 

我一直在想弄清楚如何把这些值放在每个循环中。For Each Loop Ranges VBA Excel宏

基本上如果D15-> AE15 = 2和D32-> AE32 = 0变化两个值的为1

我考虑重复上述嵌套IF语句为每个小区..但会采取一有点时间。

For Each c In Worksheets("sheet1").Range("D32:AE32").Value 

If Range("D32") = 2 Then 


Range("D15").Value = 1 
Range("D32").Value = 1 

End If 
Next c 

这适用于一个细胞。但是我难倒如何得到它来检查整个行,然后更改相应的列值15和32,当一个是2

+0

对不起,我应该阐述更多我编辑了我原来的问题。 – dan6657

+0

在你的每一行你需要给它一个集合。 '对于范围内的每个单元格(“D32:AE32”),“单元格”将为您提供该范围内的所有单元格。我会详细解答一个答案。 – Taelsin

+0

太棒了,但是如何获取整个行更新的值? – dan6657

回答

2

试试这个,你在正确的轨道上:

Sub ChgValues() 
    Dim c As Range, d As Range 

    For Each c In Range("D15:AE15") 
     Set d = c.Offset(17, 0) 
     If c.Value = 0 And d.Value = 2 Then 
      c.Value = 1 
      d.Value = 1 
     End If 
    Next c 
End Sub 

编辑:
对于从D到AE的所有列,上面的代码将检查行15中的0和行32中的2。如果值也可以(在第32行15列,0 2)周围的其他方法则需要一个额外的比较:

变化

If c.Value = 0 And d.Value = 2 Then 

If (c.Value = 0 And d.Value = 2) or (c.Value = 2 And d.Value = 0) Then 
+0

这似乎只改变列D.不是s(当s32是0,s15是2时)我会尽力与它合作! – dan6657

1

您需要给每个循环一个集合,然后检查值。

Dim cell As Range 
For Each cell In Range("D15:AE15").Cells 
    If cell.Value = 0 And cell.Offset(17).Value = 2 Then 
     cell.Value = 1 
     cell.Offset(17).Value = 1 
    End If 
Next cell