VBA - 如果初始值小于目标值,则使用其他值查找并替换值

时间:2016-05-19 09:19:02

标签: vba excel-vba excel

我是罗伯特,我是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

3 个答案:

答案 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)

  1. 您应该正确缩进代码,以便更容易阅读。
  2. 每个If语句都需要以End If
  3. 终止
  4. 您只能在Next循环中使用For语句来开始下一次迭代
  5. 你的主要问题看起来像是这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

前两个IfNext j之后关闭,如果这是错误的(很难从您的代码中判断出来),然后将它们进一步向上移动。