如果条件为真,如何复制/粘贴单元格值,如果在条件中查看的单元格不存在,如何输入“0”?

时间:2015-05-27 16:51:08

标签: excel excel-vba vba

我对VBA很新,但我还没弄清楚这一点。

如果列.Range("E" & i),我需要一个将单元格Sheets("CANmonitor").Range("C" & k)复制到单元格B = 1731的代码。

但是,如果.Range("C" & i)介于Sheets("CANmonitor").Range("C" & K) = 0之间,则需要查看.Range("C" & i)并设置61628之间{} 39

为了简化,列C上的值从6跳到16,从28跳到39。我需要代码输入0s以查找缺失值(例如:1731.6 =来自cell ("E" & i)的{​​{1}}的数据; DIC2 = 1731.7 )。这是我到目前为止所做的:

0

3 个答案:

答案 0 :(得分:2)

这是另一个版本。此代码预先声明所有对象,然后使用它。这样,如果以后需要更改工作表名称,则只能在一个地方进行更改。此代码(未经测试)也使用Select Case来简化。

Sub DIC2toCAN()
    Dim LR As Long, i As Long, k As Long
    Dim wsI As Worksheet, wsO As Worksheet

    '~~> Set your sheets here
    Set wsI = ThisWorkbook.Sheets("DIC2")
    Set wsO = ThisWorkbook.Sheets("CANmonitor")

    With wsI
        LR = .Range("B" & Rows.Count).End(xlUp).Row

        k = 1

        For i = 1 To LR
            '~~> Use Val to get the value
            If Val(.Range("B" & i).Value) = 1731 Then
                '~~> Use select case for simplicity
                Select Case Val(.Range("C" & i).Value)
                Case 6 To 16, 28 To 39
                    wsO.Range("C" & k).Value = 0
                Case Else
                    .Range("E" & i).Copy wsO.Range("C" & k)
                    k = k + 1
                End Select
            End If
        Next i
    End With
End Sub

答案 1 :(得分:1)

你非常非常接近。

改变这个:

If .Range("C" & i) is between 6 & 16 or is between 28 & 39 Then

If (.Range("C" & i) >= 6 and .Range("C" & i) <= 16) OR _
   (.Range("C" & i) >= 28 and .Range("C" & i) <=39) Then

另外,简化一下:

Sheets("DIC2").Range("E" & i).Copy Destination:=Sheets("CANmonitor").Range("C" & k)

到此:

Sheets("CANmonitor").Range("C" & k) = Sheets("DIC2").Range("E" & i)

它提供相同的结果,但需要更少的输入并且更容易阅读。

答案 2 :(得分:1)

我稍微清理了你的代码以纠正一些事情(格式化,丢失点,删除有问题的With语句),最重要的是,我添加了你需要的“之间”测试的语法。

Sub DIC2toCAN()

Dim LR As Long, i As Long, k As Long
With Sheets("DIC2")
    LR = .Range("B" & .Rows.Count).End(xlUp).Row
    k = 1
    For i = 1 To LR
        If .Range("B" & i).Value = "1731" Then
            Dim test As Variant
            test = .Range("C" & i).Value
            If (test >= 6 And test <= 16) Or (test >= 28 And test <= 39) Then
                Sheets("CANmonitor").Range("C" & k) = 0
            Else
                Sheets("DIC2").Range("E" & i).Copy Destination:=Sheets("CANmonitor").Range("C" & k)
                k = k + 1
            End If
         End If
     Next i
End With
End Sub