【问题标题】:Excel Macro: Between Named Rows, Cell to Equal Zero if Another Cell = "c"Excel宏:在命名行之间,如果另一个单元格=“c”,则单元格等于零
【发布时间】:2020-12-05 02:59:38
【问题描述】:

我在两个命名行之间的 H、I 和 J 列中有数据,“BorderFirstRow”在顶部,“BorderLastRow”在底部。我正在使用命名行,因为它们之间的行数总是随着信息的添加或删除而变化。

我正在尝试创建一个宏,其中如果 AA 列中同一行的相关单元格 =“c”,则该部分在 H、I 和 J 单元格中设置为零值

我没有尝试过任何事情,因为我不知道从哪里开始,因为我不擅长波动的数据范围。过去,当我希望对数据进行排序但不确定它是否适用于解决方案时,我曾使用以下设置范围?

With .Range(.Cells(.Range("BorderFirstRow").Row + 1, "H"), _
         .Cells(.Range("BorderLastRow").Row - 1, "J"))

【问题讨论】:

  • 你没有在你的问题中解释太多。 “BorderLastRow”是工作表最后一行的命名单元格吗?我的意思是,在它的行之后没有任何其他填充的单元格。如果是,还有其他简单的方法来设置范围。那么,你想完成什么?如果 A:A 列中的一个单元格的值等于“c”,那么同一行 H:J 范围内的单元格是否应该为零?这是您的代码应该完成的唯一任务吗?

标签: excel vba


【解决方案1】:

命名行范围之间的范围

  • 这是个好主意。
  • 如有必要,只需调整工作簿和工作表名称即可。

守则

With ThisWorkbook.Worksheets("Sheet1")
    Dim i As Long
    For i = .Range("BorderFirstRow").Row + 1 To .Range("BorderLastRow").Row - 1
        If .Cells(i, "AA").Value = "c" Then
            .Columns("H:J").Rows(i).Value = 0
        End If
    Next
End With

【讨论】:

  • 哇哦,效果很好!谢谢!
【解决方案2】:

你没有回答我的澄清问题...

请检查下一个代码。如果我上述评论中的假设是真的,它将起作用:

Sub ChangeH_JValuesForCInAA()
 Dim sh As Worksheet, arr, i As Long
 
 Set sh = ActiveSheet
 arr = sh.Range(sh.cells(sh.Range("BorderFirstRow").row, "A"), sh.cells(sh.Range("BorderLastRow").row, "J")).Value
 For i = 1 To UBound(arr)
    If arr(i, 1) = "c" Then
        arr(i, 8) = 0: arr(i, 9) = 0: arr(i, 10) = 0
    End If
 Next i
 sh.cells(sh.Range("BorderFirstRow").row, "A").Resize(UBound(arr), UBound(arr, 2)).Value = arr
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多