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

我对VBA很陌生,我还没有弄清楚。

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

如果.Range("C" & i)6之间,则Sheets("CANmonitor").Range("C" & K) = 0162839之间。

为了简化,列C上的值从6跳到16和从28跳到39 。 我需要代码为缺失的值input0s (例如: 1731.6 =来自cell ("E" & i)数据cell ("E" & i)DIC2 ; 1731.7 = 0 )。 以下是我到目前为止:

 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 With .Range("B" & i) If .Value = "1731" Then If .Range("C" & i) is between 6 & 16 or is between 28 & 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 End With Next i End With End Sub 

我清理你的代码只是为了纠正一些事情(格式化,缺less点,删除有问题的语句),最重要的是,我添加了你需要的“之间”testing的语法。

 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 

这是另一个版本。 这段代码事先声明所有的对象,然后使用它。 这样,如果以后您需要更改工作表名称,则只能在一个地方执行。 这个代码( 未testing )也使用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 

你非常非常亲密

改变这个:

 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) 

它给出了相同的结果,但需要更less的打字和更容易阅读。