【问题标题】:Input an if then command into a vba macros that will loop through a column将 if then 命令输入到将遍历列的 vba 宏中
【发布时间】:2017-04-24 07:37:20
【问题描述】:

我正在尝试创建一个宏来查看某一行中单元格的小时值,根据我的 if、then、else 标准对它们进行排序,并基于此生成一个循环我的列的结果。

因此,如果小时为 = 11,则结果为“午餐”。

我对 VBA 很陌生,但这是我目前所掌握的:

Sub Time_Sorter()

Dim i As Long
Dim result As String

For i = 1 To Rows.count            
    If Hour("J" & i) <= 15 And Hour("J" & i) >= 11 Then
        result = "Lunch"    
    ElseIf Hour("J" & i) <= 16 And Hour("J" & i) >= 17 Then
        result = "Pre-Dinner"    
    ElseIf Hour("J" & i) <= 18 And Hour("J" & i) >= 21 Then
        result = "Dinner"    
    ElseIf Hour("J" & i) <= 22 And Hour("J" & i) >= 23 Then
        result = "Late Night"
    Else
        result = "Other"    
    End If       
Next i

End Sub

我不断收到消息

运行时错误“13”:类型不匹配

而且我不确定如何解决它。

任何见解将不胜感激!

【问题讨论】:

  • “J”列中单元格的格式是什么?是日期和时间吗?你能分享你的数据样本吗?
  • 您好,j 列的格式为时间,格式为 24 小时制,因此数据 2012-07-30 12:13:00 PM 在单元格中显示为 12:13 :00
  • 所以试试我下面的代码,看看它是否能如你所愿

标签: vba excel


【解决方案1】:

我认为您正在寻找类似下面的代码。

我用构造的 Select Case 替换了您的多个 ElseIfs。

代码

Sub Time_Sorter()

Dim i As Long
Dim result As String

' loop from the first row until last row with data in column ""j"
For i = 1 To Cells(Rows.Count, "J").End(xlUp).Row
    Select Case Hour(Range("J" & i).Value)
        Case 11 To 15
            result = "Lunch"
        Case 16 To 17
            result = "Pre-Dinner"
        Case 18 To 21
            result = "Dinner"
        Case 22 To 23
            result = "Late Night"
        Case Else
            result = "Other"
    End Select
Next i

End Sub

【讨论】:

  • 成功了!!谢谢!因此,如果这样的话,Select case 会是一个更简单/更容易使用的选项吗?
  • @JennyMaily 对于您当前的任务,您可以轻松地将更多场景添加到Select Case
猜你喜欢
  • 2010-11-10
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多