Trong bài viết này, chúng tôi sẽ tạo một macro để trích xuất các ngày trong tuần giữa hai ngày.

Trong ví dụ này, chúng ta phải chỉ định ngày bắt đầu và ngày kết thúc trước khi chạy macro. Macro chọn giá trị ngày bắt đầu từ ô J8 và giá trị ngày kết thúc từ ô J9. Sau khi chỉ định ngày bắt đầu và ngày kết thúc, macro có thể được thực thi bằng cách nhấn nút “Gửi” hoặc nhấn phím tắt Alt + F8.

ArrowMainSheet

Khi chạy macro, nó sẽ trả về các ngày trong tuần giữa hai ngày trên một trang tính mới. Trang tính mới được chèn chứa các ngày trong tuần trong cột A, tiếp theo là ngày tương ứng trong cột B. Ngày đầu ra trong cột B sẽ ở định dạng dd.mm.yy.

Mỗi Tuần sẽ được theo sau bởi một hàng trống để phân biệt giữa hai tuần liên tiếp.

ArrowAfterRunningMacro

Giải thích logic

Trong macro, chúng tôi đã sử dụng hàm Weekday để phân biệt giữa các ngày trong tuần và cuối tuần. Chức năng định dạng được sử dụng để hiển thị ngày ở định dạng cần thiết.

Chức năng trong tuần

Hàm Weekday trả về một giá trị số nguyên đại diện cho ngày trong tuần.

Cú pháp

Ngày trong tuần (Date_Value, [First_Day_Of_Week])

Date_Value chỉ định giá trị ngày mà bạn muốn tìm ngày trong tuần.

First_Day_Of_Week chỉ định ngày nào trong tuần được coi là ngày đầu tiên trong tuần. Nó nhận một giá trị số nguyên hoặc giá trị được chọn từ kiểu liệt kê FirstDayOfWeek làm đầu vào. Nếu không có giá trị nào được chỉ định, thì FirstDayOfWeek.Sunday được sử dụng làm giá trị mặc định.

Enumeration value

Integer value

Remarks

FirstDayOfWeek.System

0

First day of week specified in system

settings

FirstDayOfWeek.Sunday

1

Sunday (default)

FirstDayOfWeek.Monday

2

Monday

FirstDayOfWeek.Tuesday

3

Tuesday

FirstDayOfWeek.Wednesday

4

Wednesday

FirstDayOfWeek.Thursday

5

Thursday

FirstDayOfWeek.Friday

6

Friday

FirstDayOfWeek.Saturday

7

Saturday

Như đã thấy từ mã của macro, chúng tôi đã sử dụng Ngày trong tuần (i, 2) để chỉ định Thứ Hai là ngày đầu tiên trong tuần.

Chức năng định dạng

Hàm Định dạng nhận một biểu thức ngày tháng làm đầu vào và trả về nó dưới dạng một chuỗi được định dạng.

Cú pháp của hàm Format

Định dạng (Date_Value, format)

Date_Value chỉ định giá trị của kiểu dữ liệu ngày.

Định dạng sử dụng giá trị chuỗi để chỉ định loại định dạng ngày tháng được yêu cầu.

Bảng sau đây xác định một số ký tự phổ biến mà người ta có thể sử dụng để tạo các định dạng ngày / giờ cần thiết:

Character

Description

d

displays the day as a number without a leading zero (1–31)

dd

displays the day as a number with a leading zero (01–31)

ddd

displays the day as an abbreviation (Sun–Sat)

dddd

displays the day as a full name (Sunday–Saturday)

w

displays the day of the week as a number (1 for Sunday through 7 for

Saturday)

ww

displays the week of the year as a number (1–54)

m

displays the month as a number without a leading zero (1–12)

mm

displays the month as a number with a leading zero (01–12)

mmm

displays the month as an abbreviation (Jan–dec)

mmmm

displays the month as a full month name (January–december)

q

displays the quarter of the year as a number (1–4)

y

displays the day of the year as a number (1–366)

yy

displays the year as a 2-digit number (00–99)

yyyy

displays the year as a 4-digit number (100–9999)

h

displays the hour as a number without leading zeros (0–23)

hh

displays the hour as a number with leading zeros (00–23)

n

displays the minute as a number without leading zeros (0–59)

nn

displays the minute as a number with leading zeros (00–59)

s

displays the second as a number without leading zeros (0–59)

ss

displays the second as a number with leading zeros (00–59)

Để để lại một hàng trống vào cuối mỗi tuần, chúng tôi đã kiểm tra các ngày Chủ nhật bằng cách sử dụng hàm ngày trong tuần và tăng giá trị của biến “StartRow” lên 1 để hàng tiếp theo vẫn trống.

Như đã thấy trong đoạn mã của macro, chúng ta đã sử dụng hàm Định dạng hai lần theo những cách khác nhau. Thứ nhất, chúng tôi đã sử dụng Định dạng (i, “ddd”) để lấy ngày trong tuần và thứ hai, chúng tôi đã sử dụng Định dạng (i, “dd.mm.yy”) để lấy ngày ở định dạng dd.mm.yyyy.

Giải thích mã

Làm mờ NewWorksheet dưới dạng Worksheet Set NewWorksheet = Worksheets.Add Đoạn mã trên được sử dụng để khai báo tên đối tượng Worksheet là “NewWorksheet”.

Phương thức Worksheets.Add được sử dụng để thêm trang tính mới vào bộ sưu tập Trang tính. Câu lệnh set dùng để khởi tạo đối tượng đã khai báo với sheet mới được chèn vào.

For i = StartDate To EndDate Vòng lặp FOR được sử dụng để lặp từ ngày bắt đầu đến ngày kết thúc.

Nếu Weekday (i, 2) <6 Thì câu lệnh IF được sử dụng để kiểm tra điều kiện và thực thi mã dựa trên điều kiện. Điều kiện trên sẽ kiểm tra giá trị trả về bằng hàm Weekday. Nếu nó nhỏ hơn 6, điều kiện IF trả về true và mã bên trong câu lệnh IF sẽ thực thi. Nếu không, nó sẽ bị bỏ qua.

StartRow = 1 StartRow = StartRow + 1 biến StartRow được sử dụng để di chuyển qua các hàng trên trang tính. Khi bắt đầu, biến được khởi tạo ở hàng đầu tiên. Với mỗi lần thực hiện thành công câu lệnh IF, giá trị biến được tăng thêm 1, chuyển sang hàng tiếp theo trong trang tính.

Tế bào (StartRow, 1)

Thuộc tính Cells được sử dụng để tham chiếu đến một ô cụ thể trên trang tính.

Các ô (row_number, column_number) có thể được sử dụng để tham chiếu bất kỳ ô nào trên trang tính bằng cách nhập một số hàng và số cột cụ thể làm tham số. Trong mã Cells (StartRow, 1), 1 chỉ định cột đầu tiên và biến “StartRow” xác định số hàng.

Người ta có thể dễ dàng hiểu các mã vì tôi đã bao gồm các chú thích cùng với các mã trong macro.

Vui lòng theo dõi bên dưới để biết mã

Option Explicit

Sub ExtractWeekdays()

'Declaring two variables of Date data type

Dim StartDate As Date, EndDate As Date

'Declaring worksheet variable

Dim NewWorksheet As Worksheet

Dim StartingRow, i As Long



'Getting start date and end date values from worksheet

StartDate = Sheets("Macro").Range("J8").Value

EndDate = Sheets("Macro").Range("J9").Value

'Initializing the starting row number for output

StartingRow = 1

'Inserting new worksheet

Set NewWorksheet = Worksheets.Add

For i = StartDate To EndDate



'Using Weekday method to check whether it is Weekday or weekand

If Weekday(i, 2) < 6 Then



'Inserting value on newly inserted worksheet

'Format method is used for formatting the date value

NewWorksheet.Cells(StartingRow, 2) = Format(i, "dd.mm.yy")

NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd")



'Updating StartingRow variable value for moving to next row

StartingRow = StartingRow + 1

End If



'Inserting blank row for weekend

If Weekday(i, 2) = 7 Then

StartingRow = StartingRow + 1

End If

Next i

Set NewWorksheet = Nothing

End Sub

Nếu bạn thích blog này, hãy chia sẻ nó với bạn bè của bạn trên Facebook và Facebook.

Chúng tôi rất muốn nghe ý kiến ​​từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi [email protected]