Sử dụng INDIRECT()
các công việc tuyệt vời để bảo vệ vị trí tuyệt đối của các tham chiếu sau khi các mục tiêu đã được sao chép và dán, nhưng vấn đề là nó cũng giữ được vị trí tuyệt đối khi công thức được sao chép, có nghĩa là bạn không thể dễ dàng mở rộng công thức để bao quát một công thức lớn phạm vi khi sử dụng nó.
Giải pháp là kết hợp INDIRECT()
với ROW()
, COLUMN()
và ADDRESS()
lập trình tạo vị trí của ô mục tiêu dựa trên ô của công thức.
Trong trường hợp đơn giản nhất, chẳng hạn như khi ô mục tiêu có một cột cố định và luôn ở cùng một hàng với công thức, điều này có thể được thực hiện như sau:
INDIRECT("A"&ROW())
Để giới thiệu độ lệch động từ ô công thức, bạn có thể sử dụng ADDRESS()
:
INDIRECT(ADDRESS(ROW()-1,COL()-4))
Trong ảnh chụp màn hình bên dưới, các công thức trong B1:E1
được mở rộng thành 16 hàng bên dưới, và sau đó chuỗi số trong A7:A10
được cắt và dán 6 ô xuống. Như bạn có thể thấy, các công thức đơn giản nhất được tự động điều chỉnh và đồng bộ hóa, trong khi việc sử dụng ngây thơ INDIRECT()
không ngoại suy trên tất cả các hàng một cách chính xác, nhưng hai công thức sử dụng INDIRECT()
cùng với truy xuất theo vị trí của hàng và cột có thể duy trì các tham chiếu của chúng: