Gỡ rối hàm indirect(help me!!!)

Liên hệ QC

thanguct

Thành viên mới
Tham gia
8/9/06
Bài viết
9
Được thích
1
Tôi có một vùng dữ liệu ,tôi sử dụng cách đặt tên động cho dãy đó,giả sử là "MyRange".Sau đó tôi dùng Data/Validation để biểu hiện các dãy đặt tên động đó trong một ô ví dụ như ô A1.Sau đó tôi dùng hàm index để tìm kiếm nhưng vùng dữ liệu tìm kiếm tôi dùng hàm indirect để tham chiếu dãy đặt tên động đó
ví dụ =index(indirect(A1),...,...) nhưng kết quả lại không đúng.Trong khi đó nếu đặt tên cho vùng dữ liệu đó bằng cách đặt tên bình thường thì kết quả lại đúng.Mong các cô các bác giải thích cho "kẻ ngu muội" này được hiểu rõ ngọn nguồn! cảm ơn rất nhiều-\\/.
File của tôi:
http://www.yousendit.com/transfer.php?action=download&ufid=FB41FB0D24E24FAD
 
Lần chỉnh sửa cuối:
Bạn đưa công thức của bạn làm mà bị sai lên đây mọi người mới trả lời cụ thể cho bạn được.
 
Dear all,
-------
Theo em trong trường hợp này hàm INDIRECT vô tội (không có lỗi), mà lỗi này phát sinh là do tham chiếu không hợp lệ (#REF).

Cũng có một số vấn đề mà em vẫn chưa tìm hiểu được là:
- Tại sao nếu em định nghĩa một Name mà Reference To của Name đó có chứa công thức thì em không thể Import Data từ Name đó vào một Workbook khác được?
- Để ý rằng các Name thuộc dạng này không xuất hiện trong hộp Name Manager. Tại sao?
Theo em đây là một hạn chế trong việc dùng name động trong MSE.
 
Đào Việt Cường đã viết:
Dear all,
-------
Theo em trong trường hợp này hàm INDIRECT vô tội (không có lỗi), mà lỗi này phát sinh là do tham chiếu không hợp lệ (#REF).

Cũng có một số vấn đề mà em vẫn chưa tìm hiểu được là:
- Tại sao nếu em định nghĩa một Name mà Reference To của Name đó có chứa công thức thì em không thể Import Data từ Name đó vào một Workbook khác được?
- Để ý rằng các Name thuộc dạng này không xuất hiện trong hộp Name Manager. Tại sao?
Theo em đây là một hạn chế trong việc dùng name động trong MSE.
Bạn Đào Việt Cường thân mến nếu trong trường hợp này nếu chúng ta không thể giải thích được thì có lẽ chỉ có thể giải thích được rằng :Đó là hạn chế của hàm indỉect không hiểu được với dãy đặt tên động.Cảm ơn mọi người đã cho những nhận xét góp ý quí báu .Xin cảm ơn
 
Mình không rõ lắm nhưng các bạn có thể dùng cách khác để thực hiện được không? Ví dụ như tạo hàm trong VBA?
 
thanguct đã viết:
...có lẽ chỉ có thể giải thích được rằng: Đó là hạn chế của hàm indỉect không hiểu được với dãy đặt tên động
Dear thanguct,
---------------
Theo mình thì hàm INDIRECT không có hạn chế. Khi bạn tham chiếu đến một Name mà Refers To của nó không phải là tham chiếu địa chỉ thì bạn sẽ gặp những hạn chế như trong bài trước mình đã nêu. Trong trường hợp của bạn, hàm INDIRECT trả về lỗi #REF là do Name MyRange đã sử dụng tham chiếu như vậy.
Một minh hoạ để các bạn thấy rõ hơn về hạn chế này:
Giả sử bạn có một trên Sheet1, ô A1 có giá trị là 2005, bạn đặt một Name tham chiếu đến ô A1 và đặt tên là LastYear, đoạn code sau đây sẽ làm việc tốt với Name LastYear:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rgLastYear As Range
Debug.Print Range("LastYear").Value
Set rgLastYear = Range("LastYear")
Debug.Print rgLastYear.Value
End Sub
Bây giờ bạn thay đổi lại Refers To của LastYear là:
=Year(ToDay())-1
đoạn code nêu trên sẽ không thực thi được, Run-time error '1004' báo cho bạn biết phương thức Range không tồn tại trong Worksheet hiện hành (Methor 'Range' of object '_Worksheet' failed)
Như vậy chắc là bạn đã hiểu hàm INDIRECT vô tội?!
 
Đào Việt Cường đã viết:
Dear all,
-------
- Tại sao nếu em định nghĩa một Name mà Reference To của Name đó có chứa công thức thì em không thể Import Data từ Name đó vào một Workbook khác được?
- Để ý rằng các Name thuộc dạng này không xuất hiện trong hộp Name Manager. Tại sao?
Theo em đây là một hạn chế trong việc dùng name động trong MSE.

Cái này một lần anh đã nói bên Webketoan rồi. Vấn đề em nêu chỉ bị với Office2003 trở lên còn từ OfficeXP về trước thì không sao. Lỗi trên sảy ra khi [Reference To] trỏ tới một Workbook khác. Không hiểu sao gã khổng lồ MS này lại để những chuyện này sảy ra với Excel Version>=11?
 
thanguct đã viết:
Tôi có một vùng dữ liệu ,tôi sử dụng cách đặt tên động cho dãy đó,giả sử là "MyRange".Sau đó tôi dùng Data/Validation để biểu hiện các dãy đặt tên động đó trong một ô ví dụ như ô A1.Sau đó tôi dùng hàm index để tìm kiếm nhưng vùng dữ liệu tìm kiếm tôi dùng hàm indirect để tham chiếu dãy đặt tên động đó
ví dụ =index(indirect(A1),...,...) nhưng kết quả lại không đúng.Trong khi đó nếu đặt tên cho vùng dữ liệu đó bằng cách đặt tên bình thường thì kết quả lại đúng.Mong các cô các bác giải thích cho "kẻ ngu muội" này được hiểu rõ ngọn nguồn! cảm ơn rất nhiều-\\/.
File của tôi:
http://www.yousendit.com/transfer.php?action=download&ufid=FB41FB0D24E24FAD

Cú pháp của index
Dạng 1:
INDEX(array,row_num,column_num)
Hmà này lấy trong mảng array giá trị ở dòng row_num và ở cột column_num

Bạn hiểu là array và MyRange là cùng kiểu dữ liệu = mảng

Cú pháp của bạn =index(indirect(A1),...,...). Công thức này chỉ đúng khi thỏa mãn:
+ [1] Kết quả của đối số indirect(A1) phải =kiểu array
+ Nếu [1] đúng thì array phải trỏ tới vùng dữ liệu bạn cần tìm chứ không được "lạc" sang vùng khác. Bạn cần bắt chim thì phải trỏ tay vào tổ chim chứ lại trỏ tay vào tổ ong thì...sai rồi.

Khi bạn muốn thiết kế vùng "động" thì phải đảm bảo logic luôn luôn đi đúng luồng nếu không nó động đậy lung tung bạn không kiểm soát được là nguy hiểm lắm.
 
Chi mình hỏi, vùng động là sao? và có công dụng gì khi tạo một vùng động? cũng như tạo vùng động để làm gì, có lợi gì? và tạo một vùng động như thế nào?
 
Dear snoopy2004,
-----------------
Bạn qua đây tham khảo về tham chiếu động!
 
Web KT
Back
Top Bottom