Khi phát triển một trang tính để theo dõi thông tin kinh doanh, bạn có thể cần phải xác định tất cả các Thứ Sáu trong một phạm vi ngày. Cách tốt nhất để làm điều này phụ thuộc vào dữ liệu trong trang tính của bạn và cách bạn muốn kết quả hiển thị.

Nếu bạn có danh sách ngày trong một cột, bạn có thể sử dụng một số hàm trang tính khác nhau để xác định xem những ngày đó có phải là Thứ Sáu hay không.

Hàm WEEKDAY trả về một số, từ 1 đến 7, tùy thuộc vào ngày trong tuần của ngày được sử dụng làm đối số:

=WEEKDAY(A2)

Cách sử dụng này trả về số 6 nếu ngày trong ô A2 là thứ sáu. Nếu công thức này được sao chép bên cạnh một cột ngày tháng, thì bạn có thể sử dụng tính năng Tự động lọc của Excel để chỉ hiển thị những ngày có ngày trong tuần là 6 (Thứ Sáu).

Bạn cũng có thể sử dụng tính năng định dạng có điều kiện của Excel để đánh dấu tất cả các ngày Thứ Sáu trong danh sách ngày. Làm theo các bước sau:

  1. Chọn danh sách ngày.

  2. Đảm bảo rằng tab Trang đầu của dải băng được hiển thị.

  3. Bấm vào công cụ Định dạng có Điều kiện trong nhóm Kiểu. Excel hiển thị một loạt các lựa chọn.

  4. Nhấp vào Quy tắc mới. Excel sẽ hiển thị hộp thoại Quy tắc Định dạng Mới.

(Xem Hình 1.)

  1. Trong khu vực Chọn loại quy tắc ở đầu hộp thoại, hãy chọn Sử dụng công thức để xác định ô cần định dạng. (Xem Hình 2.)

  2. Trong vùng công thức, hãy nhập công thức sau, thay thế A2 bằng địa chỉ của ô hiện hoạt đã chọn ở bước 1: = WEEKDAY (A2) = 6. Bấm Định dạng để hiển thị hộp thoại Định dạng Ô.

  3. Đặt các tùy chọn định dạng để đánh dấu các Thứ Sáu như mong muốn.

  4. Bấm OK để loại bỏ hộp thoại Định dạng Ô.

  5. Bấm OK.

Nếu bạn muốn xác định một loạt các Thứ Sáu dựa trên ngày bắt đầu và ngày kết thúc, bạn có thể thiết lập một loạt công thức để tìm ra chúng.

Giả sử rằng ngày bắt đầu là A2 và ngày kết thúc là A3, bạn có thể sử dụng công thức sau để tìm ra ngày của thứ sáu đầu tiên:

=IF(A2+IF(WEEKDAY(A2)<=6,6-WEEKDAY(A2),6)>A3, "",A2+IF(WEEKDAY(A2)<=6,6-WEEKDAY(A2),6))

Nếu bạn đặt công thức này trong ô C2 và sau đó định dạng nó thành một ngày, bạn có thể sử dụng công thức sau để xác định thứ sáu tiếp theo trong phạm vi:

=IF(C2="","",IF(C2+7>$A$3,"",C2+7))

Nếu bạn sao chép công thức này cho một loạt ô, bạn sẽ có một danh sách các ngày Thứ Sáu giữa bất kỳ phạm vi ngày nào được chỉ định bởi A2 và A3.

Nếu bạn thực sự muốn “kéo” các ngày Thứ Sáu vào một phạm vi ngày cụ thể, thì bạn sẽ cần sử dụng macro. Có một số cách bạn có thể làm về điều này. Macro đơn giản này sẽ kiểm tra tất cả các ngày trong phạm vi A2: A24.

Nếu chúng là Thứ Sáu, thì ngày được sao chép vào cột C, bắt đầu từ C2. Tất nhiên, kết quả là danh sách bắt đầu từ C2 sẽ chỉ chứa các ngày là Thứ Sáu.

Sub PullFridays1()

Dim dat As Range     Dim c As Range     Dim rw As Integer

Set dat = ActiveSheet.Range("A2:A24")

rw = 2     For Each c In dat         If Weekday(c) = vbFriday Then             Cells(rw, 3).Value = Format(c)

rw = rw + 1         End If     Next End Sub

Nếu muốn, bạn có thể thay đổi phạm vi được macro kiểm tra chỉ bằng cách thay đổi tham chiếu A2: A24 và bạn có thể thay đổi nơi ghi ngày tháng bằng cách thay đổi giá trị của rw (hàng) và giá trị 3 (cột) trong Chức năng của tế bào.

Nếu bạn muốn làm việc với ngày bắt đầu và ngày kết thúc, bạn có thể sửa đổi macro để nó chuyển qua các ngày. Macro sau giả định rằng ngày bắt đầu nằm trong ô A2 và ngày kết thúc nằm trong ô A3.

Sub PullFridays2()

Dim dStart As Date     Dim dEnd As Date     Dim rw As Integer

dStart = Range("A2").Value     dEnd = Range("A3").Value

rw = 2     While dStart < dEnd         If Weekday(dStart) = vbFriday Then             Cells(rw, 3).Value = dStart             Cells(rw, 3).NumberFormat = "m/d/yyyy"

rw = rw + 1         End If         dStart = dStart + 1     Wend End Sub

Macro vẫn kéo các Thứ Sáu từ phạm vi và đặt chúng vào một danh sách bắt đầu từ C2.

Một cách tiếp cận macro khác là tạo một hàm do người dùng xác định trả về các Thứ Sáu cụ thể trong một phạm vi. Sau đây chỉ làm điều đó:

Function PullFridays3(dStartDate As Date, _                       dEndDate As Date, _                       iIndex As Integer)

Dim iMaxDays As Integer     Dim dFirstday As Date

Application.Volatile     If dStartDate > dEndDate Then         PullFridays3 = CVErr(xlErrNum)

Exit Function     End If

dFirstday = vbFriday - Weekday(dStartDate) + dStartDate     If dFirstday < dStartDate Then dFirstday = dFirstday + 7     iMaxDays = Int((dEndDate - dFirstday) / 7) + 1

PullFridays3 = ""

If iIndex = 0 Then         PullFridays3 = iMaxDays     ElseIf iIndex <= iMaxDays Then         PullFridays3 = dFirstday + (iIndex - 1) * 7     End If End Function

Bạn sử dụng hàm này trong một ô trong trang tính của mình theo cách sau:

=PULLFRIDAYS3(A2,A3,1)

Đối số đầu tiên cho hàm là ngày bắt đầu và đối số thứ hai là ngày kết thúc. Đối số thứ ba cho biết thứ Sáu bạn muốn trả về trong phạm vi đã chỉ định. Nếu bạn sử dụng 1, bạn nhận được Thứ sáu đầu tiên, 2 trả về Thứ sáu thứ hai, v.v. Nếu bạn sử dụng 0 cho đối số thứ ba, thì hàm trả về số Thứ sáu trong phạm vi được chỉ định. Nếu ngày bắt đầu được chỉ định lớn hơn ngày kết thúc, thì hàm trả về lỗi #NUM.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (8147) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: