Kéo tất cả các ngày thứ sáu (Microsoft Excel)
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:
-
Chọn danh sách ngày.
-
Chọn Định dạng có Điều kiện từ menu Định dạng. Excel sẽ hiển thị hộp thoại Định dạng có Điều kiện.
-
Sử dụng menu thả xuống Điều kiện để chọn Công thức Là. (Xem Hình 1.)
-
Trong vùng công thức, ở bên phải danh sách thả xuống được sử dụng ở bước 3, 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:
-
Bấm Định dạng để hiển thị hộp thoại Định dạng Ô.
-
Đặt các tùy chọn định dạng để đánh dấu các Thứ Sáu như mong muốn.
-
Bấm OK để loại bỏ hộp thoại Định dạng Ô. Định dạng bạn đã chỉ định trong bước 6 bây giờ sẽ xuất hiện trong khu vực xem trước cho điều kiện.
-
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 (2930) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: