Code vba điền ngày thứ 2 và ngày thứ 6 trong tuần tương ứng là ngày nào trong 26 tuần (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Thuyanhanoi

Thành viên thường trực
Tham gia
15/10/12
Bài viết
304
Được thích
154
Nghề nghiệp
Nhân viên
Mong các anh chị giúp cho code vba tự động điền ngày như sau:
Khi chọn năm tại ô [AO1]; tháng bắt đầu tại ô [AO2]; ngày thứ 2 (tức mồng 3 tại ô [AO3]); ngày thứ 6 (tức mồng 7 tại ô [AO4]). Thì code sẽ tự điền nốt cho em ngày thứ 2 và ngày thứ 6 đó là ngày bao nhiêu của các tuần kế tiếp (gồm 26 tuần)
Em đã làm thủ công kết quả như trong file đính kèm. Rất mong được các anh , chị và các bạn giúp đỡ.
Em xin cảm ơn!.
 

File đính kèm

Mong các anh chị giúp cho code vba tự động điền ngày như sau:
Khi chọn năm tại ô [AO1]; tháng bắt đầu tại ô [AO2]; ngày thứ 2 (tức mồng 3 tại ô [AO3]); ngày thứ 6 (tức mồng 7 tại ô [AO4]). Thì code sẽ tự điền nốt cho em ngày thứ 2 và ngày thứ 6 đó là ngày bao nhiêu của các tuần kế tiếp (gồm 26 tuần)
Em đã làm thủ công kết quả như trong file đính kèm. Rất mong được các anh , chị và các bạn giúp đỡ.
Em xin cảm ơn!.
Bạn xem thử cách này:
Mã:
Public Sub AAA()
Dim i As Long, ThuHai As Date, KQ(1 To 2, 1 To 26)
ThuHai = DateSerial([AO1], [AO2], 1)
ThuHai = ThuHai + ((8 - Weekday(ThuHai, vbMonday)) Mod 7)
For i = 1 To 26
    KQ(1, i) = ThuHai + (i - 1) * 7
    KQ(2, i) = KQ(1, i) + 4
Next
Range("AO3") = ThuHai
Range("AO4") = ThuHai + 4
Range("L10").Resize(2, 26) = KQ
End Sub
 
Upvote 0
Xin mời bạn tham khảo thêm trong file
 

File đính kèm

Upvote 0
Bạn xem thử cách này:
Mã:
Public Sub AAA()
Dim i As Long, ThuHai As Date, KQ(1 To 2, 1 To 26)
ThuHai = DateSerial([AO1], [AO2], 1)
ThuHai = ThuHai + ((8 - Weekday(ThuHai, vbMonday)) Mod 7)
For i = 1 To 26
    KQ(1, i) = ThuHai + (i - 1) * 7
    KQ(2, i) = KQ(1, i) + 4
Next
Range("AO3") = ThuHai
Range("AO4") = ThuHai + 4
Range("L10").Resize(2, 26) = KQ
End Sub
Cảm ơn bạn nhiều. Code cho kết quả ok rồi ạ!.
 
Upvote 0
Xin mời bạn tham khảo thêm trong file
Cảm ơn chị HYen17 đã giúp em ạ. Cách của chị rất hay không cần xem trước ngày nào là thứ 2 mà chỉ cần chọn ngày là biết thứ mấy. Chị ơi nhưng em kiếm tra kết quả ở tuần thứ 26 thì kết quả lại chưa chính xác. Chỉ xem giúp em vơi!.
 
Upvote 0
Cảm ơn chị HYen17 đã giúp em ạ. Cách của chị rất hay không cần xem trước ngày nào là thứ 2 mà chỉ cần chọn ngày là biết thứ mấy. Chị ơi nhưng em kiếm tra kết quả ở tuần thứ 26 thì kết quả lại chưa chính xác. Chỉ xem giúp em vơi!.

1/ HYen17 "hổng phải" Chị. Bạn có thể gọi bằng Anh (Hí hi....)
2/ Chỉ cần nhập Năm AO1, và Tháng vào AO2, rồi chạy thử code này:
PHP:
Public Sub GPE()
Dim dArr(1 To 2, 1 To 26), Ngay As Long, I As Long
Ngay = DateSerial([AO1], [AO2], 1)
For I = 0 To 6
    If Weekday(Ngay + I) = 2 Then
        dArr(1, 1) = Ngay + I
        dArr(2, 1) = Ngay + I + 4
        Exit For
    End If
Next I
For I = 2 To 26
    dArr(1, I) = dArr(1, I - 1) + 7
    dArr(2, I) = dArr(2, I - 1) + 7
Next I
[L14:L15].Resize(, 26) = dArr
End Sub
3/ Format vùng kết quả là "d" hay "d/m" tuỳ bạn. (Vì dữ liệu vùng kết quả là Date)
 
Lần chỉnh sửa cuối:
Upvote 0
. . . Chị ơi nhưng em kiếm tra kết quả ở tuần thứ 26 thì kết quả lại chưa chính xác. Chỉ xem giúp em vơi!.
Trong macro sự kiện:
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [Ao3]) Is Nothing Then
    Dim Dat As Date
    
    [m10].Resize(2, 25).ClearContents
    If Weekday([ap2]) = 2 Then
        Dat = [ap2].Value
        Dim J As Long
        For J = 7 To 26 * 7 Step 7
            [aL10].End(xlToLeft).Offset(, 1).Value = Dat + 7
            [aL10].End(xlToLeft).Offset(1).Value = Dat + 11
            Dat = Dat + 7
        Next J
    End If
 End If
End Sub
Đã sai là sai hết toàn bộ số liệu;
Làm gì có chuyện sai 1 cặp số cuối trong vòng lặp đó được chứ?
 
Upvote 0
1/ HYen17 "hổng phải" Chị. Bạn có thể gọi bằng Anh (Hí hi....)
2/ Chỉ cần nhập Năm AO1, và Tháng vào AO2, rồi chạy thử code này:
PHP:
Public Sub GPE()
Dim dArr(1 To 2, 1 To 26), Ngay As Long, I As Long
Ngay = DateSerial([AO1], [AO2], 1)
For I = 0 To 6
    If Weekday(Ngay + I) = 2 Then
        dArr(1, 1) = Ngay + I
        dArr(2, 1) = Ngay + I + 4
        Exit For
    End If
Next I
For I = 2 To 26
    dArr(1, I) = dArr(1, I - 1) + 7
    dArr(2, I) = dArr(2, I - 1) + 7
Next I
[L14:L15].Resize(, 26) = dArr
End Sub
3/ Format vùng kết quả là "d" hay "d/m" tuỳ bạn. (Vì dữ liệu vùng kết quả là Date)
Em cảm ơn Thầy Ba Tê ạ!. Thầy ơi giúp em thêm một (tí tẹo nữa ạ) hì hì... Thầy cho em chút màu mè để em nhìn vào và phân biệt được các tháng với.
Em xin cảm ơn Thầy Ba Tê và các Anh chị nhiều!.
p/s: HYen17 (Em tạm đánh vần là "Hải Yến" nên gọi chị!. --=0)
 
Upvote 0
Em cảm ơn Thầy Ba Tê ạ!. Thầy ơi giúp em thêm một (tí tẹo nữa ạ) hì hì... Thầy cho em chút màu mè để em nhìn vào và phân biệt được các tháng với.
Em xin cảm ơn Thầy Ba Tê và các Anh chị nhiều!.
p/s: HYen17 (Em tạm đánh vần là "Hải Yến" nên gọi chị!. --=0)

Màu mè thì có CF, lấy nó mà xài.
 

File đính kèm

Upvote 0
Nếu "uýnh vần" như vậy thì có thể hiểu Hải Yến hay Hoàng Yến..., 17 tuổi, ----> gọi là "EM" mới đúng chứ.
Dzọt...........................
Em cảm ơn Thầy Ba Tê và các Anh chị đã giúp em ạ!.
Hiện giờ em về quê ăn tết, không mang theo máy tính nên không xem được. Em chỉ viết trả lời được qua điện thoại, không mở file chạy code được. Khi nào xem được em sẽ (la lên) sau ạ!.
Mong Thầy Ba Tê, các anh chị và các bạn tạm gác lại (chuyện code cet) không quên chuẩn đầy đủ cho những ngày tết, để cùng gia đình nhâm nhi ly rượu, đón xuân trong an lành, hạnh phúc.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom