我是罗伯特,我是VBA的新手,我有以下任务要执行: 我有两行中的一系列数字。如果上一行中的数字小于1.3,则应替换下一行中的相应值。
如果需要,应该比较和替换数字,并且如果需要两个,则意味着如果上限值小于1.3,则上一行中的值应替换下一行中的值。
如果没有,请将值保留在较低的行中并继续前进。
我必须在VBA中编写一个自动执行此检查的代码。
你有没有在VBA中看到/编写过这样的代码?
非常感谢您的时间!
这是我到目前为止所做的:
Dim i As Integer
Dim j As Integer
For i = 1 To 12
If Cells(60, 8 + i) < 1.3 Then
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecialext Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Cells(60, 8 + i) > 1.3 Then
For j = 1 To 10
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Cells(60, 8 + i) < 1.3 Then
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next i
If Cells(60, 8 + i) = Cells(61, 8 + i) Then Next i
Else
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Cells(60, 8 + i) < 1.3 Then
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next j
Next i
Next i
End Sub
答案 0 :(得分:1)
已编辑以符合OP的进一步规范
可能是你想要的东西如下:
Sub main()
Dim cell As Range
For Each cell In Worksheets("Feuil1").Range("A1:D1") '<~~ change "Feuil1" as per your actual sheet name
If cell.Value > 1.3 Then cell.Offset(1).Value = cell.Value
Next cell
End Sub
答案 1 :(得分:0)
If
语句都需要以End If
Next
循环中使用For
语句来开始下一次迭代你的主要问题看起来像是这3点的组合。
答案 2 :(得分:0)
如果不了解您要实现的目标,以及应该嵌套在哪里,则需要使用If
完成每个End If
。
此外,您无法在Next i
循环内跳转至For j
。最好添加一个错误处理程序或其他东西跳出For j
循环,如下所示:
Dim i As Integer
Dim j As Integer
For i = 1 To 12
If Cells(60, 8 + i) < 1.3 Then
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecialext Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Cells(60, 8 + i) > 1.3 Then
For j = 1 To 10
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
If Cells(60, 8 + i) < 1.3 Then
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
If Cells(60, 8 + i) = Cells(61, 8 + i) Then
GoTo ErrHandler:
Else
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
If Cells(60, 8 + i) < 1.3 Then
Cells(60, 8 + i).Select
Selection.Copy
Cells(61, 8 + i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next j
End If
End If
ErrHandler
Next i
End Sub
前两个If
在Next j
之后关闭,如果这是错误的(很难从您的代码中判断出来),然后将它们进一步向上移动。