第一次发布海报。
以下VBA脚本每次都会中断工作宏。我尝试了不同的语法来修复,但得到了相同的结果。
代码应该查看L列中的所有数据单元格,查找字符串“ERROR”。如果找到,请将该单元格和右边的单元格复制到正确的“AX”列,然后清除L和M中的文本。
每次破坏的步骤是“Cells(i,50).Paste”行。
Set rng = Application.Range("L4:M" & lrow)
For i = rng.Rows.Count To 4 Step -1
If Cells(i, 12).Value = "ERROR" Then
Range("L" & i & ":M" & i).Copy
Cells(i, 50).Paste
Range("L" & i & ":M" & i).ClearContents
End If
If Cells(i, 21).Value = "ERROR" Then
Rows(i).Delete
End If
Next I
答案 0 :(得分:2)
df = pd.DataFrame(np.random.randint(1,6,100000), columns=['S'])
# First set response for time t
df['F'] = np.where(df['S'] == 5, 1, np.where(df['S'] == 1, -1, 0))
# Now loop to apply motelling
%%timeit # (OP's answer)
previousF = 0
for row in df.itertuples():
df.at[row.Index, 'F'] = np.where((row.S >= 4) & (previousF == 1), 1,
np.where((row.S <= 2) & (previousF == -1), -1, row.F))
previousF = row.F
1.11 s ± 27.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
不是Range
object可用的方法。 Paste
是Cells
个对象。 Ergo,“对象不支持此属性或方法”:)
你可以尝试:
Range
答案 1 :(得分:0)
正如@DavidZemens所说,你错过了正确的方法名称
此外,您的代码似乎在其中执行了不必要的工作:
它首先在当前i
行中执行某项操作If Cells(i, 12).Value = "ERROR"
检查返回True
然后如果后续If Cells(i, 21).Value = "ERROR" Then
再次返回True,它会删除相同的i行
最后,您没有使用任何PasteSpecial
功能,因此您可能希望使用普通Copy
一个
因此,我按照以下方式重构
Dim lrow As Long, i As Long
lrow = Cells(Rows.Count, "L").End(xlUp).Row
For i = lrow To 4 Step -1
If Cells(i, 21).value = "ERROR" Then
Rows(i).Delete
ElseIf Cells(i, 12).value = "ERROR" Then
Range("L" & i & ":M" & i).Copy Destination:=Cells(i, 50)
Range("L" & i & ":M" & i).ClearContents
End If
Next i