Nhờ giải thích ý nghĩa của hàm INDIRECT

Liên hệ QC

Phanhanhdai

Thành viên tiêu biểu
Tham gia
16/3/08
Bài viết
733
Được thích
1,876
Nghề nghiệp
Thiết kế công trình
+-+-+-+ Em thấy trong các ví dụ của các anh chị có rất nhiều ví dụ về hàm INDIRECT. Em cũng đã đọc rất nhiều excel rồi nhưng không hình dung được hàm đó có tác dụng gì. Các bác có thể giải thích giúp em được không?
 
Mình chưa hiểu tại sao trong ví dụ đó Indirect($A$4) = 10. Trong khi 10 là giá trị của ô B4. Mới lại bạn có biết tại sao công thức lại phức tạp theo kiểu Indirect("B";$A$5) mà không sao B (lại phải ở trong "B").
 
Bạn để ý là tác giả đã giải thích ở dưới là tác giả đã đặt tên cho ô B4 là George mà ( Tức là Insert --> Define name đấy) Nên công thức Indirect($A$4) = 10 có kết quả như vậy. Ứng dụng hàm Indirect sẽ làm cho công thức trở nên linh hoạt hơn bạn ạ
 
Lần chỉnh sửa cuối:
Hàm này dùng để ghép chuổi thành vị trí ô nên chuỗi phải đặt trong dấu ngoặc kép chứ!
Bạn hãy làm vài ví dụ đơn giản đi rồi sẽ quen với nó thôi!
Ví dụ 1:
Ở ô A1 (Sheet1) có số 10 (Tức là A1 = 10)
Ô B1 bạn gõ =INDIRECT("A1") thì kết quả là 10. Tiếp theo qua ô B2 bạn gõ =INDIRECT("A"&1) cũng cùng kết quả đúng không.
Ở ô C2 có viết chữ A1 thì bạn qua ô B3, bạn gõ =INDIRECT(C1)

Vậy bạn kết luận được gì?....
 
Sự cần thiết của hàm Indirect

Em đã đọc một số bài nói đến hàm Indirect rồi, em đã hiểu được cách dùng của nó, nhưng quả thật em không hiểu được hiết tầm quan trọng của nó (Ví nó tham chiếu gián tiếp) tại sao không dùng một số hàm trực tiếp khác như vlookup chẳng hạn...thay thế. Đến bây giờ em thấy các bài toán mình gặp có thể bỏ hàm Indirect mà có thể xử lý đơn giản hơn. Các bác có thể chỉ giúp em được sự cần thiết phải sử dụng nó trong một số trường hợp, mà thiếu nó sẽ khó khăn khi xử lý btoán không?
Em xin cảm ơn
 
Em đã đọc một số bài nói đến hàm Indirect rồi, em đã hiểu được cách dùng của nó, nhưng quả thật em không hiểu được hiết tầm quan trọng của nó (Ví nó tham chiếu gián tiếp) tại sao không dùng một số hàm trực tiếp khác như vlookup chẳng hạn...thay thế. Đến bây giờ em thấy các bài toán mình gặp có thể bỏ hàm Indirect mà có thể xử lý đơn giản hơn. Các bác có thể chỉ giúp em được sự cần thiết phải sử dụng nó trong một số trường hợp, mà thiếu nó sẽ khó khăn khi xử lý btoán không?
Em xin cảm ơn
Tôi thấy 1 tác dụng của INDIRECT: đó là khi bạn muốn đặt 1 name có tác dụng trên tất cả các sheet bạn sẽ thấy INDIRECT nó lợi hại thế nào!
Bạn thử thế này nhé: Hãy đặt tên 1 vùng là DS, tham chiếu đến A1:F100... Bạn hãy làm cách nào để ở bất cứ sheet nào, mổi khi bạn gọi tên DS lên thì nó hiểu đang nói A1:F100 của Active Sheet
Nếu không INDIRECT thì tôi không nghĩ ra có hàm nào khác có thể làm được điều này
Xem file thí nghiệm đây (Nếu bạn làm được 1 name DS mà không cần đến INDIRECT thì post lên cho tôi học hỏi với)
 

File đính kèm

  • Thinghiem_INDIRECT.xls
    22 KB · Đọc: 1,107
Em đã đọc một số bài nói đến hàm Indirect rồi, em đã hiểu được cách dùng của nó, nhưng quả thật em không hiểu được hiết tầm quan trọng của nó (Ví nó tham chiếu gián tiếp) tại sao không dùng một số hàm trực tiếp khác như vlookup chẳng hạn...thay thế. Đến bây giờ em thấy các bài toán mình gặp có thể bỏ hàm Indirect mà có thể xử lý đơn giản hơn. Các bác có thể chỉ giúp em được sự cần thiết phải sử dụng nó trong một số trường hợp, mà thiếu nó sẽ khó khăn khi xử lý btoán không?
Em xin cảm ơn

Về sự cần thiết phải dùng hàm Indirect thì có lẽ rất nhiều và tùy theo từng trường hợp nhất định.
Điều vượt trội đầu tiên của hàm này so với các hàm dò tìm khác là hàm này chỉ ngay đến ô chứa giá trị cần trả về trong tham số, còn hàm Index thì phải dò tìm ra vị trí của ô trả về là ở cột nào, hàng nào trong bảng dữ liệu. Nếu dữ liệu lớn thì hiển nhiên là chậm hơn so với Indirect rồi.
Để tạo ra mảng 1 chiều 10 phần tử từ 1 đến 10 thì ta dùng công thức sau :
Row(1:10)
Vậy làm sao để tạo ra mảng 1 chiều n phần tử với n là biến luôn thay đổi, Indirect ơi giúp em với.
Row(Indirect("1:"&n))
Bạn thấy hay không nào!
Bạn từ từ tìm hiểu tiếp nha
 
Tôi thấy 1 tác dụng của INDIRECT: đó là khi bạn muốn đặt 1 name có tác dụng trên tất cả các sheet bạn sẽ thấy INDIRECT nó lợi hại thế nào!
Bạn thử thế này nhé: Hãy đặt tên 1 vùng là DS, tham chiếu đến A1:F100... Bạn hãy làm cách nào để ở bất cứ sheet nào, mổi khi bạn gọi tên DS lên thì nó hiểu đang nói A1:F100 của Active Sheet
Nếu không INDIRECT thì tôi không nghĩ ra có hàm nào khác có thể làm được điều này
Xem file thí nghiệm đây (Nếu bạn làm được 1 name DS mà không cần đến INDIRECT thì post lên cho tôi học hỏi với)

Bác Ndu ,

Với cấu trúc giống nhau trên nhiều sheet, Không dùng INDIRECT tác dụng với nhiều sheet, Bác thử cách này xem sao

- Đặt name cho 1 vùng
- Copy cái sheet vừa đặt name ra làm nhiều sheet tùy ý (copy bằng Ctrl - chuột trái và kéo)
- Bác thử xem, hông biết có được hông

vumian,
 
Bác Ndu ,

Với cấu trúc giống nhau trên nhiều sheet, Không dùng INDIRECT tác dụng với nhiều sheet, Bác thử cách này xem sao

- Đặt name cho 1 vùng
- Copy cái sheet vừa đặt name ra làm nhiều sheet tùy ý (copy bằng Ctrl - chuột trái và kéo)
- Bác thử xem, hông biết có được hông

vumian,
Ý tôi đang nói đến việc: MỘT NAME CÓ TÁC DỤNG TRÊN MỌI SHEET CƠ MÀ
Cách của bạn đâu phải 1 name... Kiểm tra lại xem: Bao nhiêu sheet bấy nhiêu name
Ẹc... Ẹc...
 
Bác download xem thử có phải là 1 name hông ạ, không cần INDIRECT !
 

File đính kèm

  • Thinghiem_NO_INDIRECT.xls
    32 KB · Đọc: 160
Bác download xem thử có phải là 1 name hông ạ, không cần INDIRECT !
Tôi nói trong file này có 3 name đấy!
Có lẽ bạn nhìn nhầm rồi: 1 name toàn cục và 2 name cục bộ
Hỏng tin hỏi thử xem các cao thủ khác nói file này có mấy name
Ai bảo file này có 3 name thì giơ tay lên nè!
A di phò phò
 
Chà... chà... nói có sách mách có chứng (hong thôi bạn không tin)
Bạn chạy code này xem nó nói file bạn có mấy name nha:
PHP:
Sub DemName()
 Dim Ten As Names
 Set Ten = ThisWorkbook.Names
 MsgBox "File nay co " & Ten.Count & " Name"
End Sub
 

File đính kèm

  • DemName.xls
    38 KB · Đọc: 83
Bác download xem thử có phải là 1 name hông ạ, không cần INDIRECT !
Thông thường hay dùng Indirect() nhưng thấy cái Name này cũng lạ và chưa hiểu. Nhờ anh Vumian và Ndu chỉ cách tạo cái Name này ra sao, Name ở sheet nào là Name chính? Thanks.
 
Thông thường hay dùng Indirect() nhưng thấy cái Name này cũng lạ và chưa hiểu. Nhờ anh Vumian và Ndu chỉ cách tạo cái Name này ra sao, Name ở sheet nào là Name chính? Thanks.
Name mà bạn vumian tạo là name chỉ có tác dụng trong sheet hiện hành (ở sheet khác nhìn không thấy)
Cách tạo:
Thông thương ta tạo 1 name tên DS, Refer to = A1:A10 thì đơn giãn là ta cứ gõ tên rồi quét vùng tham chiếu
Nếu muốn tạo name cục bộ (chỉ có tác dụng trong sheet hiện hành) thì sau khi quét vùng tham chiếu xong, lúc gõ tên Name ta thêm tên sheet phía trước!
Ví dụ: Sheet1!DS
Thử xem
(Bạn mở file của vumian ra, nhìn vào name cũng thấy có tên sheet mà)
Nếu ta có 10 sheet và ta tạo 10 name theo kiểu trên thì khi vào Define name có thể ta sẽ lầm tưởng rằng file chỉ có 1 name (vì name nào cũa sheet nào thì sheet ấy nhìn thấy)
Loại name này người ta gọi là name cục bộ
 
Loại name này người ta gọi là name cục bộ
Giờ mới biết là có name cho từng sheet, cám ơn Anh Ndu nhiều, trước giờ chỉ biết tạo name cho toàn workbook. Giờ nếu tạo name riêng cho từng sheet tôi nghĩ sẽ cải thiện được tốc độ xử lý không biết đúng không, để thử xem. Anyway thanks.
 
Giờ mới biết là có name cho từng sheet, cám ơn Anh Ndu nhiều, trước giờ chỉ biết tạo name cho toàn workbook. Giờ nếu tạo name riêng cho từng sheet tôi nghĩ sẽ cải thiện được tốc độ xử lý không biết đúng không, để thử xem. Anyway thanks.
Không biết có cải thiện về tốc độ không nhưng ít nhất là gọn gàng hơn! Nhìn vào 1 file với khoảng vài chục name cũng thấy ngán!
Vậy nếu ta chắc chắn 1 name nào đó chỉ dùng trong sheet hiện hành thì nên dùng cách mà bạn vumian vừa làm ở trên!
(Nói thật, cái này không phải tôi nghiên cứu ra được, đó là Mr Okebab nói, tôi lượm được và bây giờ "nhiều chuyện" tí)
 
Ve su dung ham INDIRECT!

Sao trong bai ban viet su dung ham INDIRECT, nhung trong vi du ban lai lam ham Index???
 
file nay có 3 names!
 
Kính chào anh/ chị,

Em có file dữ liệu, em muốn nối cột A và B lại với nhau bằng cách sử dụng hàm INDIRECT. Mong các anh/ chị hướng dẫn và giúp đỡ cho em ạ.

Em cảm ơn
 

File đính kèm

  • VD MINH HOA.xlsx
    8.7 KB · Đọc: 31
Web KT
Back
Top Bottom