我对VBA很新,但我还没弄清楚这一点。
如果列.Range("E" & i)
,我需要一个将单元格Sheets("CANmonitor").Range("C" & k)
复制到单元格B = 1731
的代码。
但是,如果.Range("C" & i)
介于Sheets("CANmonitor").Range("C" & K) = 0
之间,则需要查看.Range("C" & i)
并设置6
。 16
或28
之间{} 39
。
为了简化,列C
上的值从6
跳到16
,从28
跳到39
。我需要代码输入0s
以查找缺失值(例如:1731.6
=来自cell ("E" & i)
的{{1}}的数据; DIC2
= 1731.7
)。这是我到目前为止所做的:
0
答案 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