excel VBA -如何获得一个月中的所有星期一,然后乘以工作时间?

axr492tv  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(329)

我正在想办法算出一个月内星期一的总数,然后乘以工作时间。
这是我的示例代码,它的工作,但它计数错误的输出:

If UCase(val) Like "EVERY MONDAY" Then
   Dim numString As Integer
   Dim strDays() As String
   Dim wordCount As Long

   numString = 2

   strDays = VBA.Split(val, " ")
   wordCount = UBound(strDays)
   strWhEveryDay = ThisWorkbook.Sheets("Input").Cells(X, 4).Value
   strWhEveryDay = strWhEveryDay * var_month
   Debug.Print "Every = " & strWhEveryDay

说明:

  • 这取决于用户是否喜欢在文本框中输入。然而,计算取决于用户在文本框中输入的日期。
  • 我有文本框,这是目标月份,用户输入的日期格式如下:
    • 2023年1月或2月**
  • 我有这样一张table:

将此文本放入表格中,从B列第2行开始:

**every Monday**

将此文本放入表格D列第4行:

**1.2**
  • 我所需要的只是根据给定的月份和年份获得所有星期一的总数。一旦我将文本从"每个星期一"更改为"每个星期二",则"每个星期一"表中的天数计算将进行调整或自动知道计算天数的起止位置:
  • 预期计算示例:* * 每个星期一**(2023年1月= 5天)* 1.2因此,预期结果将为5。
    • 注意:**使用Debug. Print查看结果或输出
50few1ms

50few1ms1#

所以,使用networkdays.intl(),就像我在评论中建议的:

NETWORKDAYS.INTL($A$3,$A$33,"0111111",)

显示的结果为5,经检查是正确的,单元格A3:A33使用了长日期格式。
所以乘以1.2就是:

NETWORKDAYS.INTL($A$3,$A$33,"0111111",)*1.2

和5 * 1.2 = 6
此外,字符串“0111111”可以放在单元格F5中并引用,这样更容易编辑。

klr1opcd

klr1opcd2#

我所知道的识别一周中任何一天的最简单的方法如下:

=WEEKDAY(B2,2)

“2”表示计算工作日,从“星期一”开始为1,“星期二”为2,...
所以,如果你想知道你的约会是不是星期一,你可以用这个公式:

=IF(WEEKDAY(B2,2)=1,...)

使用标准的IF-子句可以很容易地将其转换为VBA。

相关问题