【问题标题】:VBA - find and replace a value with another value, if initial value is smaller than target valueVBA - 如果初始值小于目标值,则查找并用另一个值替换一个值
【发布时间】:2016-09-16 01:55:20
【问题描述】:

我是 Robert,我是 VBA 新手,我有以下任务要执行: 我有 2 行中的一系列数字。如果上排的数字小于 1.3,则应替换下排的相应值。

如果需要的话,数字应该两两比较和替换,这意味着如果上限值小于1.3,则上排的值应该替换下排的值n。

如果没有,则保留下一行中的值并继续前进。

我必须在 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

【问题讨论】:

  • 到目前为止你尝试了什么?有什么努力吗?
  • 是的,如果你想看代码,我可以给你excel文件!谢谢!
  • 您应该在问题中包含您当前的尝试。也可以观看stackoverflow.com/help/how-to-ask
  • 好的,我会发布我目前所做的,谢谢你的建议!
  • 我上传了我的代码,但请不要忘记我是 VBA 新手!

标签: vba excel


【解决方案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.3,则上排的值应替换下排的值”的要求,正如您在您的题。你有没有想过和你写的不一样?
  • 是的,我在你给我的东西上做了一些工作,但现在我在最后一部分遇到了问题,因为我使用了 Else 函数!我可以向您介绍这个问题吗?
  • 您最好编辑您的问题并更新您遇到问题的代码。但请考虑在我的代码中没有 final 部分:只要您的问题仍然存在 “如果上限值小于 1.3,则上排中的值应替换下排中的值" 而不是你只需要按原样运行它
  • :-) 等一下,因为编写代码的说明是用法语编写的,有时法语可能很难理解,尤其是当它们来自不了解 VBA 的人时......一秒……
【解决方案2】:
  1. 您应该正确缩进您的代码,以便于阅读。
  2. 每个If 语句都需要以End If 终止
  3. 您只能在For 循环中使用Next 语句来开始下一次迭代

您的主要问题看起来像是这 3 点的组合。

【讨论】:

    【解决方案3】:

    在不了解您要实现的目标以及应该将什么嵌套在哪里的情况下,您需要用End If 完成每个If

    您也不能在For j 循环中跳转到Next i。最好添加错误处理程序或其他内容以跳出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 之后关闭,如果这是错误的(从您的代码中很难判断),那么将它们移到代码的更上方。

    【讨论】:

    • 在尝试之前尝试理解它;)如果它把你推向正确的方向,请随意投票和/或接受!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2017-01-22
    • 2018-01-04
    相关资源
    最近更新 更多