【问题标题】:Comparing and highlighting time values比较和突出显示时间值
【发布时间】:2015-11-03 02:10:24
【问题描述】:

我正在解析和分析大型数据集,并试图突出显示具有相同发生时间的行。这是一个较大宏的一小部分,目前是唯一不工作的部分(其余部分工作得相当好!)我试图将每个时间与它之前和之后的时间进行比较,以捕获所有事件。如果我只比较之前或之后的时间,您可能会看到这会错过很多值。代码:

'Hightlights trade structures via time

Do
DoEvents

row_number = row_number + 1

'row_color_tester is a proxy for testing trade time "structure principle"
row_color_tester = row_number
tradeTime = ActiveSheet.Range("B" & row_number)

If tradeTime = Range("B" & (row_color_tester + 1)) Or tradeTime = Range("B" & (row_color_tester - 1)) Then
    ActiveCell.EntireRow.Interior.ColorIndex = 8

End If
Loop Until row_number = lastRow + 1

样本数据:

16:01:30
15:37:56
15:08:38
15:08:38
14:40:56
14:29:36
14:28:10
14:28:10
14:23:48
14:21:49
14:21:49
14:21:49
14:21:49
14:21:49
14:21:49
14:20:01
14:20:01
14:20:01
14:20:01
14:20:01
14:20:01
14:19:52
14:19:52
14:19:52
14:19:52
14:19:52
14:19:52
14:19:43
14:18:57
14:18:43
14:18:34
14:17:50
14:17:50
14:17:46
14:17:46
14:17:13
14:16:50
14:16:50
14:16:50
14:16:50
14:16:50
14:16:50
14:14:59
14:14:59
14:14:59
14:14:59
14:14:59
14:14:59
14:12:38
14:11:27
14:10:11
14:10:11
14:07:17
13:56:46
13:55:16
13:55:16
13:55:16
13:51:59
13:51:59
13:51:59
13:51:59
13:51:59
13:51:59
13:51:39
13:51:39
13:51:39
13:51:39
13:51:39
13:51:39
13:50:45
13:50:45
13:50:45
13:50:45
13:50:45
13:50:45
13:46:49
13:46:49
13:45:12
13:45:12
13:44:31
13:44:31
13:44:31
13:44:31
13:44:31
13:44:31
13:43:32
13:43:32
13:43:32
13:43:32
13:43:32
13:43:32
13:41:58
13:35:46
13:35:46
13:35:46
13:35:46
13:35:46
13:35:46
13:35:25
13:35:25
13:35:19
13:35:19
13:35:07
13:35:07
13:35:07
13:35:07
13:35:07
13:35:07
13:27:57
13:27:57
13:20:40
13:20:40

【问题讨论】:

  • 如果答案中提供的条件格式不起作用,那么您需要解释一下,而不是“不起作用”。条件格式正是上面的代码试图做的。那么什么不起作用?它会抛出错误吗?它不做你想做的事吗?您需要更具体。
  • 我在回复下面的条件格式帖子时解释了它的问题所在。它不起作用,因为 A)它缺少应该突出显示的值 B)我无法旋转它突出显示的颜色。
  • 我希望它能奏效,因为它是迄今为止解决问题的最简单的方法。
  • 就是这样,您在原始帖子的描述中没有您希望颜色“旋转”的地方。编辑您的 OP 以描述所需的确切结果以及在您的代码中具体不起作用的内容。或者你会得到不符合你想要的答案的答案,一旦给出答案,网站上的人们就会觉得回答了他们不再寻找的问题。总之,我们无法读懂你的想法。

标签: excel vba


【解决方案1】:

至于为什么它不起作用,时间很棘手,它们本质上是一个格式化的数字。例如(0.598483796296296 到 0.598483796296300)将格式化为 14:21:49。这就是为什么你的方式有时行得通,有时行不通的原因。

要修复它,请将.text 添加到三个范围的末尾:

ActiveSheet.Range("B" & row_number).Text

这样你只是比较格式化的文本。

另外最好不要使用activecell。使用:

Rows(row_number).entirerow. Interior.colorindex = 8

【讨论】:

  • 谢谢斯科特。所以现在似乎发生的是代码正在寻找相似的时间戳,但它突出显示低于 4 个低点的行,然后卡住并且不再突出显示。我的想法是它与当前活动行或活动单元格有关吗?
  • @user1041958。请参阅编辑我在我的手机上可能有错别字但希望你能得到公正。
  • 我们在同一条链上思考!当您的通知弹出时,我刚刚尝试过。我仍然有一个错误,但你的解决方案修复了它。非常感谢您的时间和精力!非常感谢!
【解决方案2】:

过去我不得不多次这样做。我总是使用这里找到的代码:

http://www.cpearson.com/excel/findall.aspx

【讨论】:

    【解决方案3】:

    假设时间从第 2 行第 1 列开始,一个简单的解决方案可以通过以下条件格式获得:

    适用于以下范围:

    【讨论】:

    • 这个解决方案不起作用,因为它遗漏了很多值,我无法更改每个结构的颜色。我所说的结构是指每组拍号。
    • 很抱歉,该解决方案似乎不起作用。当我更仔细地查看您的代码时,我注意到时间在 B 列中,这将要求公式为 =AND(OR(B2=B1,B2=B3),NOT(LEN(B2)=0)) 并且范围为 $B:$B。当我在我这边测试它时,我没有缺失值,但是我会尝试提供一个包含您现有代码的解决方案。虽然有 2 个问题 - 1)您是说您的代码缺少某些值,如果是,是哪些值?和 2) 您希望如何更改分组格式? (例如每次将 ColorIndex 迭代 1)
    • 它缺少应该捕获的值。它们似乎是随机的,有些位于相似时间序列的中间,有些位于结束或开始。每次将 colorind 迭代 1 就可以了。
    • Demetri 现在看来运行良好。非常感谢您,我将使用此解决方案。感谢您的帮助。
    猜你喜欢
    • 2018-08-08
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2017-11-16
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多