Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: homebaby2013

VBA代码出问题!不知道错在哪

[复制链接]
发表于 2014-1-4 10:27 | 显示全部楼层
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2014-1-4 17:09 | 显示全部楼层
zjdh 发表于 2014-1-3 21:41
正常啊

这结果也不对啊,源数据有一部分丢失了...
回复

使用道具 举报

发表于 2014-1-4 18:33 | 显示全部楼层
不可能丢失!而且我也验证了,一个都没少!!
回复

使用道具 举报

 楼主| 发表于 2014-1-4 19:19 | 显示全部楼层
zjdh 发表于 2014-1-4 18:33
不可能丢失!而且我也验证了,一个都没少!!

这样吧,你就看一下源数据和结果两个工作表中的34-39行,你对比一下,数据明显丢失了...而且好像代码得运行两次才能得到你那样的结果
回复

使用道具 举报

发表于 2014-1-4 21:53 | 显示全部楼层
噢,的确是丢失了,那是你输入数据的格式出了问题,所有的时间直接引用都>TimeValue("13:30:00"),最后一个数据覆盖了前面所有数据,再次填入后实际数据已经变了,第二次运行就正确了,但已丢失了一些数据,你自己调试一下就明白啦,所以要修改宏如下:
Sub test()
    Dim i As Integer, arr, my_val
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        arr = Range("F" & i & ":I" & i).Value
        Range("F" & i).Resize(1, 4).Clear
        For Each my_val In arr
            If my_val <> "" Then
                If TimeValue(my_val) < TimeValue("11:30:00") Then
                    Cells(i, "F") = Format(my_val, "hh:mm")
                ElseIf TimeValue(my_val) > TimeValue("13:30:00") Then
                    Cells(i, "I") = Format(my_val, "hh:mm")
                Else
                    Cells(i, "H") = Format(my_val, "hh:mm")
                End If
            End If
        Next
    Next
End Sub
回复

使用道具 举报

发表于 2014-1-4 21:55 | 显示全部楼层
出勤明细表.rar (29.71 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2014-1-5 08:31 | 显示全部楼层
你再看看你的原件,所有的时间都是文本格式,而非时间格式(尽管单元格设置为时间格式),所以出错!
回复

使用道具 举报

 楼主| 发表于 2014-1-5 10:03 | 显示全部楼层
zjdh 发表于 2014-1-4 21:53
噢,的确是丢失了,那是你输入数据的格式出了问题,所有的时间直接引用都>TimeValue("13:30:00"),最后一个 ...

用timevalue会出现类型不匹配,我用了CDate就可以了,不过真的感谢你,帮了大忙...
  1. Sub test()
  2.     Dim i As Integer, arr, my_val
  3.     For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
  4.         arr = Range("F" & i & ":I" & i).Value
  5.         Range("F" & i).Resize(1, 4).Clear
  6.         For Each my_val In arr
  7.             If my_val <> "" Then
  8.                 If CDate(my_val) < TimeValue("11:30:00") Then
  9.                     Cells(i, "F") = Format(my_val, "hh:mm")
  10.                 ElseIf CDate(my_val) > TimeValue("13:30:00") Then
  11.                     Cells(i, "I") = Format(my_val, "hh:mm")
  12.                 Else
  13.                     Cells(i, "H") = Format(my_val, "hh:mm")
  14.                 End If
  15.             End If
  16.         Next
  17.     Next
  18. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-29 19:32 , Processed in 0.327671 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表