Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1916|回复: 7

[已解决]填写日期时同时填写日期对应的周次

[复制链接]
发表于 2016-4-8 08:31 | 显示全部楼层 |阅读模式
如题,如何实现附件中创建工作表填写日期、星期时同时在C列填写周次。用weeknum函数调试了,不行,求助
最佳答案
2016-4-8 08:55
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, i%, j%
  4. Sheets("设置").Activate
  5. arr = [b2:b13]: y = [a2]
  6. Application.ScreenUpdating = False
  7. Application.DisplayAlerts = False
  8. For Each sh In Sheets
  9.     If sh.Name <> "设置" Then sh.Delete
  10. Next
  11. For i = 1 To UBound(arr)
  12.     If Sheets("" & arr(i, 1)) Is Nothing Then
  13.         With Sheets.Add(after:=Sheets(Sheets.Count))
  14.             d = Day(DateSerial(y, i + 1, 0))
  15.             .Cells(2, 1) = "日期": .Cells(2, 2) = "星期"
  16.             For j = 1 To d
  17.                 rq = DateSerial(y, i, j)
  18.                 .Cells(j + 2, 1) = rq
  19.                 .Cells(j + 2, 2) = "星期" & Replace(Application.Text(Weekday(rq, 2), "[dbnum1]"), "七", "日")
  20.                 .Cells(j + 2, 3) = DatePart("ww", rq, 2) '每周周一为开始
  21.             Next
  22.             .Columns.AutoFit
  23.             .Name = arr(i, 1)
  24.         End With
  25.     End If
  26. Next
  27. Application.DisplayAlerts = True
  28. Application.ScreenUpdating = True
  29. End Sub
复制代码

11.rar

17.72 KB, 下载次数: 35

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-4-8 08:55 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, i%, j%
  4. Sheets("设置").Activate
  5. arr = [b2:b13]: y = [a2]
  6. Application.ScreenUpdating = False
  7. Application.DisplayAlerts = False
  8. For Each sh In Sheets
  9.     If sh.Name <> "设置" Then sh.Delete
  10. Next
  11. For i = 1 To UBound(arr)
  12.     If Sheets("" & arr(i, 1)) Is Nothing Then
  13.         With Sheets.Add(after:=Sheets(Sheets.Count))
  14.             d = Day(DateSerial(y, i + 1, 0))
  15.             .Cells(2, 1) = "日期": .Cells(2, 2) = "星期"
  16.             For j = 1 To d
  17.                 rq = DateSerial(y, i, j)
  18.                 .Cells(j + 2, 1) = rq
  19.                 .Cells(j + 2, 2) = "星期" & Replace(Application.Text(Weekday(rq, 2), "[dbnum1]"), "七", "日")
  20.                 .Cells(j + 2, 3) = DatePart("ww", rq, 2) '每周周一为开始
  21.             Next
  22.             .Columns.AutoFit
  23.             .Name = arr(i, 1)
  24.         End With
  25.     End If
  26. Next
  27. Application.DisplayAlerts = True
  28. Application.ScreenUpdating = True
  29. End Sub
复制代码
回复

使用道具 举报

发表于 2016-4-8 09:32 | 显示全部楼层
Sub test1()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Call test2
    Call test3
End Sub

Sub test2()
    Dim i
    For i = Sheets.Count To 2 Step -1
        Sheets(i).Delete
    Next i
End Sub

Sub test3()
    Dim A, y, d, s, i, j
    y = Sheets(1).Range("a2")
    s = VBA.DateSerial(y, 1, 1)

    For i = 1 To 12
        With Sheets.Add(after:=Sheets(i))
            .Name = i & "月"
            .Range("a:a").NumberFormat = "yyyy/mm/dd"
            .Range("a:a").ColumnWidth = 11
        End With

        d = Day(VBA.DateSerial(y, i + 1, 0))
        ReDim A(1 To d, 1 To 3)
        For j = 1 To UBound(A)
            A(j, 1) = s
            A(j, 2) = VBA.WeekdayName(VBA.Weekday(s, vbMonday), , 2)
            A(j, 3) = "第" & Format(s, "ww") & "周"
            s = s + 1
        Next j
        [a3].Resize(UBound(A), UBound(A, 2)) = A
    Next i
End Sub


2.rar (31.61 KB, 下载次数: 10)
回复

使用道具 举报

 楼主| 发表于 2016-4-8 11:51 | 显示全部楼层
dsmch 发表于 2016-4-8 08:55

谢谢,目标达到了
回复

使用道具 举报

 楼主| 发表于 2016-4-8 11:52 | 显示全部楼层
爱疯 发表于 2016-4-8 09:32
Sub test1()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

谢谢,感谢版主答复。
回复

使用道具 举报

 楼主| 发表于 2016-4-10 19:54 | 显示全部楼层
dsmch 发表于 2016-4-8 08:55

你好,如果想把创建的日期中含有星期六、星期日的单元格填充红色,怎么实现
回复

使用道具 举报

发表于 2016-4-10 20:46 | 显示全部楼层
Sub Macro1()
On Error Resume Next
Dim arr, i%, j%
Sheets("设置").Activate
arr = [b2:b13]: y = [a2]
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sh In Sheets
    If sh.Name <> "设置" Then sh.Delete
Next
For i = 1 To UBound(arr)
    If Sheets("" & arr(i, 1)) Is Nothing Then
        With Sheets.Add(after:=Sheets(Sheets.Count))
            d = Day(DateSerial(y, i + 1, 0))
            .Cells(2, 1) = "日期": .Cells(2, 2) = "星期"
            For j = 1 To d
                rq = DateSerial(y, i, j)
                .Cells(j + 2, 1) = rq
                .Cells(j + 2, 2) = "星期" & Replace(Application.Text(Weekday(rq, 2), "[dbnum1]"), "七", "日")
                If Weekday(rq, 2) = 6 Or Weekday(rq, 2) = 7 Then .Cells(j + 2, 2).Interior.ColorIndex = 3   
*           .Cells(j + 2, 3) = DatePart("ww", rq, 2) '每周周一为开始
            Next
            .Columns.AutoFit
            .Name = arr(i, 1)
        End With
    End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-4-10 20:57 | 显示全部楼层
dsmch 发表于 2016-4-10 20:46
Sub Macro1()
On Error Resume Next
Dim arr, i%, j%

谢谢,明白了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:48 , Processed in 0.416417 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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