Xác định “Kể từ cao nhất” hoặc “Kể từ khi thấp nhất” (Microsoft Excel)
Alex thường xuyên phân tích dữ liệu mới nhất của ngành xây dựng và cần viết các bài báo về dữ liệu. Thường xuyên, anh ta cần làm nổi bật một số phần dữ liệu mới, chẳng hạn như “xây dựng các tòa nhà công nghiệp là thấp nhất kể từ tháng 8 năm 2007.” Alex tự hỏi liệu có cách nào để tự động hóa kiểu tô sáng này không; nếu cột A chứa tháng và năm và cột B chứa các giá trị cho các khoảng thời gian đó, Alex muốn có một công thức trong cột C cho biết “giá trị này là cao nhất kể từ tháng 4 năm 2007” hoặc “giá trị này là thấp nhất kể từ tháng 11 năm 2004.”
Giả sử rằng tháng và năm được liệt kê trong cột A thực sự là một giá trị ngày tháng trong Excel (chứ không phải văn bản), bạn có thể dễ dàng tạo công thức để trả về thông tin mong muốn. Nếu bạn có hàng 1 có tiêu đề cho các cột của mình, hãy nhập nội dung sau vào ô C2:
=IF(ROW(B2)=2,"",IF(B2>MAX($B$1:B1), "this value is the highest since " & TEXT(INDEX($A$1:A1,MATCH(MAX( $B$1:B1),$B$1:B1,0)), "mmmm yyyy"), IF(B2<MIN($B$1:B1), "this value is the lowest since " & TEXT(INDEX($A$1:A1, MATCH(MIN($B$1:B1),$B$1:B1,0)), "mmmm yyyy"),"")))
Hãy nhớ rằng đây là một công thức duy nhất và phải được nhập tất cả trên một dòng. Bạn có thể sao chép công thức xuống nhiều hàng nếu cần trong cột C và nó sẽ cung cấp thông tin mong muốn. Nó chỉ tạo ký hiệu trong cột C nếu giá trị trong cột B lớn hơn giá trị tối đa hoặc nhỏ hơn giá trị tối thiểu của tất cả các giá trị nêu trên trong cột B.
Nếu bạn có khá nhiều dữ liệu trong trang tính của mình, bạn có thể nhận thấy rằng công thức dẫn đến thời gian tính toán lại lâu. Nếu đúng như vậy, thì bạn có thể muốn xem xét sử dụng macro sẽ thực hiện phân tích mong muốn và cung cấp thông tin thích hợp. Macro sau cung cấp có vẻ ngược thông qua thông tin trong cột B và cung cấp cả kết quả “thấp nhất kể từ” và “cao nhất kể từ” trong cột C và D.
Sub FindHiLow() Dim orig_cell As Range Dim orig_val As Integer Dim orig_row As Integer Dim rownum As Integer Dim newcell As Range Dim new_val As Integer Dim lowrow As Integer Dim hirow As Integer Set orig_cell = ActiveCell orig_row = ActiveCell.Row orig_val = orig_cell.Value ' find lowest lowrow = 0 For rownum = orig_cell.Row - 1 To 1 Step -1 Set newcell = Cells(rownum, 2) new_val = newcell.Value If orig_val >= new_val Then lowrow = rownum Exit For End If Next If lowrow = 0 Then lowrow = 1 Cells(orig_row, 3).Value = "Lowest since " & Cells(lowrow, 1) ' find highest hirow = 0 For rownum = orig_cell.Row - 1 To 1 Step -1 Set newcell = Cells(rownum, 2) new_val = newcell.Value If orig_val <= new_val Then hirow = rownum Exit For End If Next If hirow = 0 Then hirow = 1 Cells(orig_row, 4).Value = "Highest since " & Cells(hirow, 1) End Sub
_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 (3138) á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: