ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6802|回复: 7

VBA日期比较问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-6-30 09:45 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
望前辈帮忙指教:请查看附件,要实现以下功能,基础数据在sheet2中,点击查询安钮能将接单日介于 sheet1中开始 时间和截止时间之间的吨位统计 出来,请查看附件代码,估计是If arr1(ii, 5) >= tt1 And arr1(ii, 5) < tt2 Then,这句代码出错,好像无法进行日期比较,将这句 去掉其余代码就能执行了,谢谢。

组合框联动.rar

133.26 KB, 下载次数: 52

TA的精华主题

TA的得分主题

发表于 2015-6-30 10:11 | 显示全部楼层
你的数据源中是标准的日期格式,但是你的变量tt1和tt2是文本格式,当然无法进行比较了

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-30 13:09 | 显示全部楼层
wudixin96 发表于 2015-6-30 10:11
你的数据源中是标准的日期格式,但是你的变量tt1和tt2是文本格式,当然无法进行比较了

请问前辈怎样将其格式转换为日期格式?

TA的精华主题

TA的得分主题

发表于 2015-6-30 13:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
试试 cdate等内置函数

TA的精华主题

TA的得分主题

发表于 2015-7-2 14:00 | 显示全部楼层
我的办法是,将两个要比较的日期都转成Int 型 也可以解决,如 Int(date1)<=int(date2).
而且在vsto,date类型的变量也不可以做for循环的变量,如 for date1 =startDate to endDate(vba可以) ,对于这种我都是转换成int型来比的。for int(date1) =int(startDate )to int(endDate)
不知道有没有更好的办法?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-17 17:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-10-23 09:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
食言而肥120 发表于 2015-7-2 14:00
我的办法是,将两个要比较的日期都转成Int 型 也可以解决,如 Int(date1)

对于日期类型的比较最近总结了新的方法:
Date.Compare(Date, Date) As Integer =1,0,-1
可以判断两个日期谁大谁小

对于for循环,循环变量不能用date类型的数据,所以需要把for循环改为while循环
dim i as integer=0
While (DateTime.Compare(dtStart.AddDays(i), dtEnd) <= 0)

    i=i+1
end while

TA的精华主题

TA的得分主题

发表于 2022-12-30 08:33 | 显示全部楼层
dd.jpg


  1. Sub del1()
  2.    Dim Rng As Range, oRng As Range
  3.    Dim Rng1 As Range, Rng2 As Range
  4.    Dim Rr, Str
  5.    Dim Num1, Num2, Num, oNum
  6.        With Sheet1
  7.            For jj = 1 To 2
  8.                Set Rng = .Range(.Cells(1, jj).Formula)
  9.                RelationData Rng.Areas(1), Rng.Areas(2)
  10.            Next jj
  11.        End With
  12. End Sub

  13. Function RelationData(oRng1 As Range, oRng2 As Range)
  14.       Dim Rng As Range, oRng As Range
  15.       Dim Rng1 As Range, Rng2 As Range
  16.       Dim Rr, Str, Num, Num1, Num2
  17.            Num = 5
  18.            Debug.Print oRng1.Address, oRng2.Address
  19.            For Each Rng1 In oRng1
  20.                Rr = 1
  21.                For Each Rng2 In oRng2
  22.                     If Rng2 > 0 Then
  23.                          oNum = Num
  24.                     ElseIf Rng2 < 0 Then
  25.                          oNum = -Num
  26.                     End If
  27.                     ''
  28.                     If Rng2 > 0 And Rng2 < 1 Then
  29.                          Str = Application.WorksheetFunction.Ceiling(Rng2, oNum / 1440)
  30.                          If Format(Rng1, "hh:mm") = Format(Str, "hh:mm") Then
  31.                               If Rr = 1 Then
  32.                                    Set oRng = Rng2
  33.                               Else
  34.                                   Set oRng = Union(oRng, Rng2)
  35.                               End If
  36.                               Rr = Rr + 1
  37.                           End If
  38.                        Else
  39.                             Str = Application.WorksheetFunction.Ceiling(Rng2, oNum)

  40.                             If Val(Rng1) = Val(Str) Then
  41.                                 'Debug.Print Rr, Str, Rng1
  42.                                 If Rr = 1 Then
  43.                                     Set oRng = Rng2
  44.                                 Else
  45.                                     Set oRng = Union(oRng, Rng2)
  46.                                 End If
  47.                                 Rr = Rr + 1
  48.                             End If
  49.                        End If
  50.                Next Rng2
  51.                'Stop
  52.                If Not oRng Is Nothing Then
  53.                    Rng1(, 3) = "=" & oRng.Address(0, 0)
  54.                    Set oRng = Nothing
  55.                End If
  56.                'Debug.Print Rng1(, 3).Address
  57.            Next Rng1
  58. End Function
复制代码


Book2.zip

51.59 KB, 下载次数: 6

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-16 17:48 , Processed in 0.046004 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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