Sao chép dữ liệu có ngày giữa hai ngày đã xác định sang trang tính mới bằng VBA
Trong bài viết này, chúng tôi sẽ tạo macro để trích xuất dữ liệu từ trang tính dữ liệu thô sang một trang tính mới, dựa trên phạm vi ngày được chỉ định.
Dữ liệu thô bao gồm ba cột. Cột đầu tiên chứa ngày tháng, cột thứ hai chứa tên đại lý và cột thứ ba chứa số lần bán hàng do đại lý thực hiện vào ngày cụ thể đó.
Trước khi chạy macro, người dùng cần có hai đầu vào. Người dùng phải xác định ngày bắt đầu và ngày kết thúc. Dựa trên các ngày được chỉ định, macro sẽ trích xuất dữ liệu giữa phạm vi ngày đã xác định sang một trang tính mới.
Sau khi chỉ định ngày bắt đầu và ngày kết thúc, người dùng phải nhấp vào nút “Gửi” để thực thi macro.
Khi chạy macro, nó sẽ sắp xếp dữ liệu trong trang tính “RawData”, dựa trên cột ngày tháng và trích xuất dữ liệu dựa trên phạm vi ngày được chỉ định vào trang tính mới được chèn.
Giải thích logic
Macro lấy đầu vào cho ngày bắt đầu và ngày kết thúc từ các ô J8 và J9, tương ứng. Macro này trước tiên sắp xếp dữ liệu trong trang tính “RawData”, dựa trên cột A theo thứ tự tăng dần. Chúng tôi đã sắp xếp dữ liệu theo các giá trị ngày để có thể sao chép dữ liệu trong một phạm vi duy nhất, sau khi áp dụng bộ lọc cho phạm vi đã xác định.
Sau khi sắp xếp dữ liệu, hãy áp dụng bộ lọc lên nó. Bộ lọc được áp dụng dựa trên hai điều kiện, điều kiện đầu tiên là giá trị trong cột A phải lớn hơn hoặc bằng ngày bắt đầu và điều kiện thứ hai là giá trị trong cột A phải nhỏ hơn hoặc bằng ngày kết thúc.
Sau khi áp dụng bộ lọc, trang tính mới sẽ được chèn và dữ liệu đã lọc được sao chép và dán vào đó.
Giải thích mã
Range (“A1”). CurrentRegion.Sort key1: = Range (“A1”), order1: = xlAscending, Header: = xlYes Mã trên được sử dụng để sắp xếp dữ liệu trong phạm vi đã xác định. Key1 chỉ định cột dựa trên dữ liệu nào sẽ được sắp xếp. Thứ tự sắp xếp được cung cấp bởi order1. Chúng tôi đã xác định thứ tự tăng dần. Để xác định thứ tự giảm dần, người ta có thể sử dụng hằng số xlDescending. Tiêu đề được sử dụng để chỉ định xem phạm vi dữ liệu có chứa tiêu đề hay không.
Phạm vi (“A1”). Trường CurrentRegion.AutoFilter: = 1, Criteria1: = “> =” & StartDate, Operator: = xlAnd, Criteria2: = “⇐” & EndDate Đoạn mã trên được sử dụng để áp dụng bộ lọc trên phạm vi dữ liệu . Field1 chỉ định số cột mà bộ lọc sẽ được áp dụng. Criteria1 và Criteria2 xác định các điều kiện dựa trên dữ liệu nào sẽ lọc.
Toán tử chỉ định toán tử, sẽ được sử dụng giữa hai điều kiện.
Worksheets.Add after: = Worksheets (Worksheets.Count)
Mã trên được sử dụng để chèn trang tính mới sau trang tính cuối cùng trong sổ làm việc.
Người ta có thể dễ dàng hiểu các mã, vì tôi đã đặt các nhận xét cùng với các mã trong macro.
Vui lòng theo dõi bên dưới để biết mã
Sub CopyDataBasedOnDate() 'Disabling screen updates Application.ScreenUpdating = False 'Declaring two variables of Date data type Dim StartDate, EndDate As Date 'Declaring variable for worksheet object Dim MainWorksheet As Worksheet 'Initializing the Date variables with starting date from cell J8 'and end date from cell J9 of "Macro" sheet StartDate = Sheets("Macro").Range("J8").Value EndDate = Sheets("Macro").Range("J9").Value 'Initializing worksheet object with "RawData" worksheet Set MainWorksheet = Worksheets("RawData") 'Activating the worksheet object MainWorksheet.Activate 'Sorting the data by date in column A in ascending order Range("A1").CurrentRegion.Sort _ key1:=Range("A1"), order1:=xlAscending, _ Header:=xlYes 'Filter the data based on date range between starting date and end date Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:= _ ">=" & StartDate, Operator:=xlAnd, Criteria2:="<=" & EndDate 'Copy the filter data ActiveSheet.AutoFilter.Range.Copy 'Inserting new worksheet after the last worksheet in the workbook Worksheets.Add after:=Worksheets(Worksheets.Count) 'Pasting the copied data ActiveSheet.Paste 'Auto adjusting the size of selected columns Selection.Columns.AutoFit Range("A1").Select 'Activating the "RawData" sheet MainWorksheet.Activate 'Removing filter from the worksheet which we applied earlier Selection.AutoFilter Sheets("Macro").Activate 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]