Vấn đề định nghĩa:ROW() chức năng cư xử khác nhau bên trong SUM() và SUMPRODUCT()
Nhập bất kỳ số lượng trong tế bào A1
. Bây giờ hãy thử các công thức sau ở bất kỳ đâu trên hàng đầu tiên.
=SUM(INDIRECT("A"&ROW()))
và
=SUMPRODUCT(INDIRECT("A"&ROW()))
Công thức đầu tiên đánh giá, điều thứ hai đưa ra một lỗi #VALUE. Điều này là do chức năng ROW()
hoạt động khác nhau bên trong SUMPRODUCT()
.
Trong công thức đầu tiên, ROW()
trả về 1
. Trong công thức thứ hai, hàng trả về {1}
(mảng có độ dài một chiều), mặc dù công thức chưa được nhập dưới dạng công thức CSE.
Tại sao điều này lại xảy ra?
nền
tôi cần phải đánh giá một công thức của các loại
=SUMPRODUCT(INDIRECT(*range formed by concatenation and using ROW()*)>1)
này đang làm việc ra một lỗi. Như một giải pháp cho vấn đề này, bây giờ tôi tính toán ROW()
trong một ô khác (trong cùng một hàng, rõ ràng) và nối nó bên trong INDIRECT()
của tôi. Ngoài ra, tôi cũng đã cố gắng đóng gói nó bên trong một hàm tổng hợp, như SUM(ROW())
và cũng hoạt động như vậy.
Tôi chắc chắn sẽ đánh giá cao nếu ai đó có thể giải thích (hoặc chỉ cho tôi tài nguyên có thể giải thích) tại sao ROW()
trả về một mảng bên trong SUMPRODUCT()
mà không cần nhập CSE.
+1 nghiên cứu thú vị! –
+1 Đây chính xác là những gì tôi cần. Khả năng 'dereferencing' của các hàm 'N()' và 'T()' làm tôi ngạc nhiên. Trong thực tế, trong công thức '= SUMPRODUCT (N (INDIRECT (" A "& ROW())))', hàm 'N()' thực sự giải quyết lỗi #VALUE (như đã thấy trong Công thức đánh giá, Excel 2003). Điều này là cực kỳ tốt để biết. Ngoài ra thông tin về các kiểu đối số R/U và P/Q dường như là một lời giải thích tốt. Việc xử lý các phần tử 'xlTypeNil' cho các kiểu P/Q có vẻ phù hợp với hành vi của' SUMPRODUCT() '. Cảm ơn một câu trả lời tuyệt vời. Sẽ không bao giờ biết Google làm gì. Xứng đáng một +10 !! – playercharlie
Vui mừng điều này đã giúp - Laurent Longre đã tìm ra hành vi này ban đầu và cho thấy cách bạn có thể sử dụng hàm CALL với tham chiếu đến xlcall.h cho các hàm trang tính: http://www.cpearson.com/excel/Call.htm. Trong VBA, điều này vẫn có thể được truy cập thông qua: 'ExecuteExcel4Macro'. –