【问题标题】:Comparing every cell in a range to another cell将范围内的每个单元格与另一个单元格进行比较
【发布时间】:2013-04-03 15:08:22
【问题描述】:

我正在尝试编写一个宏来查看一系列时间,将每个时间与基准时间进行比较,然后在每个比较时间旁边生成一个注释。当我运行宏时,它将对范围内的第一个单元格执行此操作,但不会对其余单元格执行此操作。

“ActivityData”工作表中的单元格 C8 是基准时间。 要比较的时间从“SIS”工作表的单元格 F12 开始,数量不同。

这里是完整的代码:

Sub TimeCalc()

Dim wb As Workbook
Dim SIS As Worksheet
Dim Act As Worksheet

Set wb = ActiveWorkbook
Set SIS = wb.Worksheets("SIS")
Set Act = wb.Worksheets("ActivityData")

'Navigate to start times
wb.Worksheets("SIS").Select
Range("f12").Select
SIS.Range(Selection, Selection.End(xlDown)).Select

'Compare start times
For Each rng In Selection
If Act.Range("C8").Value < rng.Value Then
    ActiveCell.Offset(0, -1).Range("A1").Value = "Missed " & Format(Act.Range("c8").Value, "Medium time") & " - " & Format((rng.Value - 0.000694444), "Medium Time")
    Else
    End If
    On Error Resume Next
    Next rng

End Sub

感谢您的帮助!

【问题讨论】:

  • 为什么是On Error Resume Next
  • 嗨 Siddharth,这只是我遇到问题的一部分代码。除了它之外还有其他东西,但它正在正常工作。
  • 我通常建议不要使用OERN 好的,我看到您的代码再次是一个建议,实际上可以帮助您识别错误。看到这个链接stackoverflow.com/questions/10714251/…所以修改你的代码并使用对象而不是selection这样你就可以调试它并查看代码是否循环通过该范围的每个单元格:)
  • 感谢您的建议。我将更改代码以反映更多的对象交互。

标签: excel foreach range vba


【解决方案1】:

假设您要将结果放在正在检查的数据左侧的列中:

Option Explicit

Sub TimeCalc()

    Dim wb As Workbook
    Dim SIS As Worksheet
    Dim Act As Worksheet
    Dim myBaseLineRng As Range
    Dim compareRng As Range
    Dim Rng As Range

    On Error GoTo 0

    Set wb = ActiveWorkbook
    Set SIS = wb.Worksheets("SIS")
    Set Act = wb.Worksheets("ActivityData")
    Set myBaseLineRng = Act.Range("C8")
    Set compareRng = SIS.Range(SIS.Range("F12"), SIS.Range("F12").End(xlDown))

    'Compare start times
    For Each Rng In compareRng.Cells
        If myBaseLineRng.Value < Rng.Value Then
            Rng.Offset(0, -1).Value = "Missed " & Format(myBaseLineRng.Value, "Medium time") & " - " & Format((Rng.Value - 0.000694444), "Medium Time")
        End If
    Next Rng

End Sub

【讨论】:

  • 做到了。谢谢你 Taliesin!
【解决方案2】:

您只是将基准列表中的值与活动列表中的第一个值进行比较,如 If 语句中所示。如果我理解您的问题,您将需要遍历您的活动列表以检查每一行

ie 循环遍历活动列表 对于活动列表中的每个值 l 循环通过你的基准时间来检查 活动列表中的下一个值。

除非我误解了你的问题。

【讨论】:

  • 是的,这就是我想要做的大卫。我正在比较 If 语句以围绕构建这些语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-06
  • 1970-01-01
相关资源
最近更新 更多