INDIRECT làm việc với tham số mảng? Tất nhiên rồi

Thông thường khi ta viết hàm INDIRECT, chẳng hạn như =INDIRECT(“A1”), hàm sẽ trả về kết quả là giá trị tại ô A1. Điều này rất dễ hiểu phải không nào? Tuy nhiên, khi sử dụng INDIRECT làm việc với tham số mảng với ví dụ =INDIRECT({“A1″;”A2”}), kết quả trả về sẽ là lỗi #VALUE! Rất nhiều người đã mặc định rằng, INDIRECT không làm việc được với tham số mảng. Nhưng điều đó có chính xác không, hãy cùng Học Excel Online tìm hiểu trong bài viết này nhé.

INDIRECT với mảng

Hãy nhìn hình dưới để có một hình dung cụ thể hơn:

Indirect trả về #VALUE! khi làm việc với tham số mảng

Tuy nhiên, nếu ta đặt thêm một số hàm, chẳng hạn như hàm CELL với công thức =CELL(“address”,INDIRECT({“A1″;”A2”})), ta sẽ nhận được kết quả đúng.

Hàm CELL sẽ trả về thông tin liên quan tới tham chiếu như địa chỉ ô, nội dung trong ô, độ rộng cột, vị trí hàng…

Tới đây chắc hẳn nhiều bạn sẽ thắc mắc tại sao kết quả của CELL với #VALUE! lại ra được giá trị đúng. Để làm rõ hơn, ta sẽ đi vào từng bước thực thi hàm INDIRECT.

Đầu tiên, khi tính toán với 1 mảng {“A1″;”A2”}, Excel sẽ truyền và tính toán từng giá trị trong mảng vào trong tham số hàm. Trong phiên bản Office 365, với Dynamic array, ta có thể dễ dàng nhìn thấy kết quả đã được tự mở rộng sang ô bên dưới – nói cách khác, hàm INDIRECT đã được thực thi 2 lần bao gồm =INDIRECT(“A1”) và =INDIRECT(“A2”).

Tuy nhiên, kết quả mà hàm INDIRECT trả về không phải là giá trị. Hay nói cách khác, việc trả về giá trị là công việc của Excel, còn hàm INDIRECT thực thi công việc trả về tham chiếu (tương tự với hàm OFFSET sẽ được nói ở bên dưới).

Vậy, mảng mà INDIRECT trả về trông ra sao?

Mảng đối tượng

Bởi Office không phải là phần mềm mã nguồn mở, nên không có cách nào để biết chính xác. Tuy nhiên, nếu biết một chút về lập trình, ít nhiều ta sẽ nghe tới array object. Nếu ta coi mỗi ô là một object, thì kết quả trả về của hàm =INDIRECT({“A1″;”A2”}) có thể được biểu diễn như sau:

{[object_1];[object_2]}

Trong đó, mỗi object sẽ biểu thị 1 ô và gồm một vài cặp thuộc tính – giá trị chẳng hạn như:

{
"address":$A$1,
"contents":1,
"row_num":1,
"row_height":3,
...
}

Nếu ta hiểu theo cách này, có thể giả định rằng khi duyệt trả giá trị trong mảng, Excel chỉ trả về được giá trị nếu đó là một mảng giá trị 2 chiều chứ không thể trả về đối tượng (vì không biết nhìn vào thuộc tính nào chăng?). Và đồng thời, trong Excel ta có những hàm sẽ đọc thuộc tính đối tượng như hàm CELL. Từ suy luận này, ta có thêm một số hàm khác như hàm ROW hay COLUMN.

Có bao giờ bạn thắc mắc khi hàm ROW hoạt động, làm thế nào để hàm này biết được dòng bao nhiêu chưa?

Mở rộng bài toán, ta đến với trường hợp OFFSET. Theo tài liệu Microsoft, OFFSET sẽ trả về tham chiếu tới vùng, nên ta hoàn toàn có thể tạo ra một mảng gồm nhiều vùng và hiển thị thông tin bằng việc đặt vào trong hàm CELL.

Vậy kết luận lại, ta có thể nói rằng: INDIRECT có làm việc với tham số mảng, chỉ là Excel không hiển thị được kết quả như mong muốn mà thôi.


Nếu bạn muốn học thêm những kiến thức về tin học văn phòng cũng như lập trình phục vụ công việc, hãy tham khảo đường link sau: Các khoá học

Tìm hiểu thêm những bài viết liên quan:

Hàm INDIRECT trong Excel kèm ví dụ: https://blog.hocexcel.online/ham-indirect-trong-excel.html


Tác giả: Minhlai

· · ·

Khóa học mới xuất bản