如果另外两个单元格满足条件,则从单元格复制?

时间:2018-12-07 10:42:48

标签: vba input

对此有任何帮助。

如果列(R)的同一行中的单元格=“ Y”和列(B)的同一行=“月”中,我试图将列(G)中的单元格复制到另一个工作表中

我让它仅适用于“ Y”标准,但是一旦添加了“月”,此按钮便停止工作了?

这是我的代码;


ggplot(profile_results, aes(x=Question, group=Answer, fill=Answer, y=Value)) + 
    geom_bar( stat="identity") + 
    scale_fill_brewer(palette = "Set1") + 
    coord_flip() + 
    facet_grid(Profile~.)

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

至少,您忘记了一个End With和一个End If。但是无论如何,从逻辑上讲这是不正确的。

Dim LR As Long, i As Long
    With Sheets("Savings Q4")
        LR = .Range("R" & Rows.count).End(xlUp).Row
        For i = 1 To LR
            With .Range("R" & i)
                If .Value = "Y" Then
                    With .Range("B" & i)
                        If .Value = "January" Then
                            Sheets("Savings Q4").Range("G:G").Copy Destination:=Sheets("Cifas Loadings").Range("A:A")
                        End If
                    End With
                End If
            End With
        Next i
    End With

更容易使用,例如

if Range("R"& i).value="Y" and Range("B" & i).value = "Month"
     COPE CELLS
end if

答案 1 :(得分:0)

过多的“伴随”和“虚无”

规则

  
      
  • With条语句的数量必须等于End With条语句的数量。

  •   
  • If语句的数量必须等于End If语句的数量,除非存在“单行” If语句。 / p>

  •   

见解

Alexey C的解决方案使那些With-s和If-s一致,但是问题仍然存在。

在编写With .Range("R" & i)时,它指的是前Sheets("Savings Q4")条语句中的With,实际上是在缩短行数

With Sheets("Savings Q4").Range("R" & i)

确定

稍后您写With .Range("B" & i)时,它不是指Sheets("Savings Q4"),而是指.Range("R" & i),即您不是在缩短With Sheets("Savings Q4").Range("B" & i)行,而是

With Sheets("Savings Q4").Range("R" & i).Range("B" & i)

错误

Matteo NNZ正确地指出,可以使用If运算符将If语句缩短为一个And语句。

写作时

Sheets("Savings Q4").Range("G:G").Copy_
    Destination:=Sheets("Cifas Loadings").Range("A:A")

您要将整个G列复制到整个A列。由于这是一个循环(For i = 1 to LR),因此每次代码“遇到”“ 一月”和“ ”时,它都会复制 列。您极不可能尝试实现该功能。

变革计划

  
      
  • 摆脱“内部” With
  •   
  • 使用If减少And的使用。
  •   
  • COLUMN 范围G:GA:A更改为相应的 CELL 范围。
  •   
  • 摆脱Destination:=
  •   

代码

Sub WithIf()

    Dim LR As Long, i As Long

    With Sheets("Savings Q4")
        LR = .Range("R" & Rows.Count).End(xlUp).Row
        For i = 1 To LR
            If .Range("R" & i).Value = "Y" And _
                .Range("B" & i).Value = "January" Then
                .Range("G" & i).Copy Sheets("Cifas Loadings").Range("A" & i)
            End If
        Next i
    End With

End Sub

其余问题

另一个问题可能是您不希望将A列数据复制到G列数据的同一行中。如果是这种情况,您应该应用相同的LR = .Range("R" & Rows.Count).End(xlUp).Row逻辑并将其集成到参考“ Cifas Loadings”工作表的A列的代码中。