标题:求助下各位关于计算第几周对应的日期范围从几月几日到几月几日
只看楼主
lezhitian
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2022-11-21
结帖率:100%
已结贴  问题点数:20 回复次数:8 
求助下各位关于计算第几周对应的日期范围从几月几日到几月几日
在EXCEL中直接用两行公式就可以计算出第几周对应的日期范围从几月几日到几月几日,要用到VBA,不能脱离EXCEL使用.
于是乎,下载了VB,发现公式不能直接使用.
原公式如下:

通过自己在网上摸索,自己把代码改成:
Label14.Caption = Format((Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7 - 6, "yyyy-m-d")
Label15.Caption = Format((Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7, "yyyy-m-d")
发现出来的结果不一样,比如,2012年第5周用EXCEL公式计算,开始日期是2012-1-23,结束日期是2012-1-29,而我上面的公式在VB中计算出来的如果是


这里哪里有问题,在网上找了很久没找到原因,后来发现这里的VB论坛,请教下各位.
搜索更多相关主题的帖子: 范围 公式 Text 计算 日期 
2022-11-21 15:52
mrexcel
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:125
专家分:480
注 册:2022-11-3
得分:1 
试试
Label14.Caption = Format((Val(Text2.Text) - 1) - Weekday(Val(Text2.Text) - 1, 2) + Val(Text3.Text) * 7 - 6, "yyyy-m-d")
2022-11-21 21:06
l2002722145
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:21
注 册:2022-11-2
得分:1 
(Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7 - 6等于多少,看你图上也没text3啊
2022-11-21 21:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:15 
程序代码:
Private Sub Command1_Click()
    
Dim d1 As Date      '便于简化代码,定义了一个变量,主要需要多次使用元旦日期
d1 = CDate(Val(Text1.Text) & "-1-1")        '生成输入年份的元旦日期
Label1.Caption = d1 + (Val(Text2.Text) - 1) * 7 + 1 - Weekday(d1, 2)    '计算起始日期
Label2.Caption = CDate(Label1.Caption) + 6  '计算结束日期
    
End Sub

注意
1、VB6没有 max 函数和min函数,如果需要比较并反回其中一个值,可以使用 iif 函数。
IIf(判断条件, 真返回值, 假返回值)
2、vb6有日期型数据,需要使用 cdate 把字符串转为日期型数据,对应的就是你 EXCCEL公式里的 date 函数。
  VB6 虽然有date 函数,但功能不是这个。
3、对于日期型数据来说,可以直接使用 加法和减法,整数代表天数,

4、使用 dateadd 函数直接增加周
DateAdd("ww", Val(Text2.Text) - 1, d1 - Weekday(d1, 2) + 1)
 DateAdd("ww", :dateadd 日期作运算,ww 表示增加周
 Val(Text2.Text) - 1 跳过几周
 Weekday(d1, 2) 按周一第一天计算
 d1 - Weekday(d1, 2) + 1 ,计算出周一是哪一天



[此贴子已经被作者于2022-11-21 23:22编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2022-11-21 23:21
lezhitian
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2022-11-21
得分:0 
回复 2楼 mrexcel
谢谢 试了,还是跟我之前的代码出的结果一样不对.
2022-11-22 13:41
lezhitian
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2022-11-21
得分:0 
以下是引用l2002722145在2022-11-21 21:58:22的发言:

(Text2.Text - 1) - Weekday(Text2.Text - 1, 2) + Text3.Text * 7 - 6等于多少,看你图上也没text3啊

结果是2039,TEXT3是下面那个,上面是TEXT2.
2022-11-22 13:43
lezhitian
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2022-11-21
得分:0 
回复 4楼 风吹过b
非常感谢,代码完美使用运行,受益匪浅.
有查询了相关参数,确实虽然一样的函数,功能确不一样.
还是要从基础开始学VB.

对了,再请教下一个问题,通过日期计算是哪一周,比如2022-1-1.
我是直接用EXCEO的函数
Label6.Caption = WorksheetFunction.WeekNum(Text1.Text, 1)
这个可以直接用,但是每次点击按钮都要停顿个1秒左右,再在网上搜索发现有个DatePart,然后我就把代码改成
Label6.Caption = DatePart("ww", Text1.Text)
后面这个可以直接出结果,是不是后面这个直接是VB函数,所以直接用,而上面那个是EXCEL需要调用,才会导致使用时有1秒延时.
2022-11-22 14:01
mrexcel
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:125
专家分:480
注 册:2022-11-3
得分:3 
程序代码:
Private Sub Command1_Click()
Dim num&, y&, d(1)
y = 2021
num = 5
d(1) = DateSerial(y, 1, 7 * num + 1) - Weekday(DateSerial(y, 1, 0))
d(0) = d(1) - IIf(Year(d(1) - 6) < y, Day(d(1)) - 1, 6)
MsgBox Join(d, ""), , y & "年第" & num & ""
End Sub
2022-11-23 14:53
lezhitian
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2022-11-21
得分:0 
回复 8楼 mrexcel
谢谢回复.这相代码也可以达到.  吸收下.
2022-11-25 14:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510724-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.342193 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved