Hàm indirect sử dụng như thế nào? (3 người xem)

  • Thread starter Thread starter linhb
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

linhb

Thành viên mới
Tham gia
5/1/08
Bài viết
8
Được thích
5
Tớ đã down file các hàm trong excel, tớ đang đọc cách sử dụng hàm indirect. Bây giờ tớ muốn ở sheet "TH" tổng hợp các giá trị từ ô C2 đến ô C10 của 3 sheet có tên là T1, T2, T3 và giả sử là tớ đã gõ T1, T2, T3 vào 3 ô là A1, A2, A3 của sheet TH rồi. Bây giờ tớ muốn kết hợp hàm Sum và Indirect nhưng hic chẳng biết làm thế nào cả. Nếu tổng hợp các giá trị từ ô C2 đến C10 của 1 sheet thì tớ đã biết làm!!$@!!
 
Có vài góp ý:

- Thứ nhất, bạn nên trình bày cái ví dụ này trong một file Excel, rồi ghi các yêu cầu trong đó, sau đó gửi lên diễn đàn. Ai có khả năng sẽ tải file của bạn về, nghiên cứu và trả lời. Chứ bạn nghĩ xem, cách bạn hỏi như trên, bắt người muốn trả lời phải tự tay làm một bảng tính ví dụ, vậy có phải là phiền cho họ không ?

- Thứ hai, bạn nên xem lại cách xưng hô trong diễn đàn. Nếu bạn không chắc mình lớn hay nhỏ hơn ai, tôi nghĩ bạn nên xưng là tôi. Đừng xưng tớ.

- Thứ ba, lần sau, bạn nên đặt tên tiêu đề cho rõ ràng, đừng viết tắt. Trong nội quy đã ghi rõ điều đó. Tôi hiểu "ntn" là cái gì, nhưng đâu phải ai cũng hiểu, phải không bạn.

Thân.
BNTT
 
Cám ơn bạn đã góp ý, tôi sẽ chú ý hơn lần sau! Tôi có down 1 file của Salam có sử dụng hàm indirect nhưng vẫn ko hiểu rõ lắm! Tôi xin gửi kèm theo file dưới đây! Bạn có thể giải thích giùm tôi không? Thanks U so much!
 

File đính kèm

Đây là bảng tính mà bạn gửi lên. Tôi để ở đây để vừa nhìn vừa nói nhé.
046.jpg
Công thức bạn muốn hỏi có phải là công thức của ô C6, ở trên thanh formulas không ?
=SUMPRODUCT(SUMIF(INDIRECT($G$1:$G$4&"!A8:A100"),A6,INDIRECT($G$1:$G$4&"!C8:C100")))
Dịch nôm na ra thì nó có nghĩa như sau:
Để tìm tổng số Nợ của tài khoản ở ô A6 (342), thì đi dò trong khối cell A8:A100 của các Sheet có tên trùng với tên trong khối cell G1:G4 (Thang1, Thang2, Thang3, Thang4), nếu thấy có tài khoản giống như ở A6, thì cộng hết số tiền nằm cùng hàng (với tài khoản giống như ở A6) trong khối cell C8:C100 trong các Sheet có tên trùng với tên trong khối cell G1:G4.​
Để coi A8:A100 và C8:C100 là cái gì, xem hình sau đây, nó là Sheet Thang1 (3 Sheet còn lại y chang như vậy):
047.jpg
Có lẽ bạn đã hiểu SUMIF() làm cái gì. Xin bỏ qua.

Cái hay của hàm này là dùng SUMPRODUCT kẹp bên ngoài của SUMIF, có tác dụng cộng hết những gì SUMIF tìm được ở mỗi Sheet.
Nếu không dùng SUMPRODUCT mà chỉ lấy phần trong của nó (từ chỗ SUMIF trở đi), và nhấn Ctrl-Shift-Enter để tạo công thức mãng, thì cái bạn nhận được chỉ là kết quả của cái SUMIF tìm được ở Sheet đầu tiên mà thôi (trong trường hợp này thì nó chỉ tìm ở Sheet Thang1, rồi dừng lại).

Bạn muốn hỏi về INDIRECT() phải không?
Hàm INDIRECT

Trả về một tham chiếu từ chuỗi ký tự. Tham chiếu được trả về ngay tức thời để hiển thị nội dung của chúng. Cũng có thể dùng hàm INDIRECT khi muốn thay đổi tham chiếu tới một ô bên trong một công thức mà không cần thay đổi công thức đó.
Cú pháp: = INDIRECT(ref_text [, a1])
ref_text là tham chiếu tới một ô (có thể là dạng A1 hoặc dạng R1C1), là tên định nghĩa của một tham chiếu, hoặc là một tham chiếu dạng chuỗi.
  • Nếu ref_text không hợp lệ, INDIRECT() sẽ báo lỗi #REF!
  • Nếu ref_text chứa tham chiếu đến một bảng tính khác thì bảng tính này phải đang mở, nếu không, INDIRECT() cũng báo lỗi #REF!
a1 là giá trị logic xác định dạng tham chiếu bên trong ref_text.
  • a1 = TRUE (hoặc là 1, hoặc không nhập) là kiểu tham chiếu A1
  • a1 = FALSE (hoặc là 2) là kiểu tham chiếu R1C1

Trong trường hợp cụ thể này, INDIRECT không dùng tham số a1, nghĩa là dùng kiểu tham chiếu A1.
Tôi giải thích một cái thôi, còn cái thứ hai thì bạn tự suy ra nhé:
INDIRECT($G$1:$G$4&"!A8:A100")
Vì nằm trong hàm SUMPRODUCT, nên công thức trên sẽ chạy như một công thức mãng, nó sẽ lần lượt thay thế cái nó tìm được ở khối cell G1:G4 với (dấu & có tác dụng ghép lại) cái ở trong cặp ngoặc kép (!A8:A100), cụ thể là:
INDIRECT($G$1:$G$4&"!A8:A100") khi chạy sẽ giống như chạy 4 hàm đơn:
  • INDIRECT($G$1&"!A8:A100") = Thang1!A8:A100
  • INDIRECT($G$2&"!A8:A100") = Thang2!A8:A100
  • INDIRECT($G$3&"!A8:A100") = Thang3!A8:A100
  • INDIRECT($G$4&"!A8:A100") = Thang4!A8:A100
Cái dấu chấm than (!) là ký hiệu để Excel biết rằng A8:A100 nằm trong Sheet nào.

Hay nói cách khác:
INDIRECT($G$1:$G$4&"!A8:A100") = {Thang1!A8:A100; Thang2!A8:A100; Thang3!A8:A100; Thang4!A8:A100}​
Sau đó công thức sẽ dùng cái INDIRECT đã thay thế này làm tham số cho SUMIF đi tìm tiếp.

Tới đây thì bạn hiểu rồi chứ ?
 
Hàm indirect

Đây là bảng tính mà bạn gửi lên. Tôi để ở đây để vừa nhìn vừa nói nhé.
=SUMPRODUCT(SUMIF(INDIRECT($G$1:$G$4&"!A8:A100"),A6,INDIRECT($G$1:$G$4&"!C8:C100")))
Dịch nôm na ra thì nó có nghĩa như sau:
Để tìm tổng số Nợ của tài khoản ở ô A6 (342), thì đi dò trong khối cell A8:A100 của các Sheet có tên trùng với tên trong khối cell G1:G4 (Thang1, Thang2, Thang3, Thang4), nếu thấy có tài khoản giống như ở A6, thì cộng hết số tiền nằm cùng hàng (với tài khoản giống như ở A6) trong khối cell C8:C100 trong các Sheet có tên trùng với tên trong khối cell G1:G4.​
Hiểu ý bác rõ ràng./.



Cái hay của hàm này là dùng SUMPRODUCT kẹp bên ngoài của SUMIF, có tác dụng cộng hết những gì SUMIF tìm được ở mỗi Sheet.
Nếu không dùng SUMPRODUCT mà chỉ lấy phần trong của nó (từ chỗ SUMIF trở đi), và nhấn Ctrl-Shift-Enter để tạo công thức mãng, thì cái bạn nhận được chỉ là kết quả của cái SUMIF tìm được ở Sheet đầu tiên mà thôi (trong trường hợp này thì nó chỉ tìm ở Sheet Thang1, rồi dừng lại).
Không hiểu vì em tách công thức với SUMIF ra riêng thì nó báo lỗi #Value. Bác giải thích thêm được không ạ mặc dù em hiểu rõ hàm SUMIF là thế nào!

Bạn muốn hỏi về INDIRECT() phải không?

Trong trường hợp cụ thể này, INDIRECT không dùng tham số a1, nghĩa là dùng kiểu tham chiếu A1.
Tôi giải thích một cái thôi, còn cái thứ hai thì bạn tự suy ra nhé:
INDIRECT($G$1:$G$4&"!A8:A100")
Vì nằm trong hàm SUMPRODUCT, nên công thức trên sẽ chạy như một công thức mãng, nó sẽ lần lượt thay thế cái nó tìm được ở khối cell G1:G4 với (dấu & có tác dụng ghép lại) cái ở trong cặp ngoặc kép (!A8:A100), cụ thể là:
INDIRECT($G$1:$G$4&"!A8:A100") khi chạy sẽ giống như chạy 4 hàm đơn:
  • INDIRECT($G$1&"!A8:A100") = Thang1!A8:A100
  • INDIRECT($G$2&"!A8:A100") = Thang2!A8:A100
  • INDIRECT($G$3&"!A8:A100") = Thang3!A8:A100
  • INDIRECT($G$4&"!A8:A100") = Thang4!A8:A100
Cái dấu chấm than (!) là ký hiệu để Excel biết rằng A8:A100 nằm trong Sheet nào.

Hay nói cách khác:
INDIRECT($G$1:$G$4&"!A8:A100") = {Thang1!A8:A100; Thang2!A8:A100; Thang3!A8:A100; Thang4!A8:A100}​
Sau đó công thức sẽ dùng cái INDIRECT đã thay thế này làm tham số cho SUMIF đi tìm tiếp.

Tới đây thì bạn hiểu rồi chứ ?
[/color]

Em thấy rất hay nhưng không hiểu được thế nào?

:-=:-=:-=:-=
 
Ai chà... trong này tuy ko thấy chổ nào là mãng, nhưng mà có sự tồn tại của mãng đấy!
Cái vụ mãng này khá trừu tượng... Hể hiểu dc thì.. hiểu.. còn ko thì... Hic... Hic... Ko biết giãi thích đến bao giờ...
Tốt nhất là làm nhiều, thí nghiệm nhiều.. dần dần sẽ hiểu...
Bạn có thể tham khảo thêm về mãng tại đây nhé:
http://www.giaiphapexcel.com/forum/showthread.php?t=7917
ANH TUẤN
 
Hiểu ý bác rõ ràng./.

Em thấy rất hay nhưng không hiểu được thế nào?

:-=:-=:-=:-=

Bạn đừng lo lắng nhiều. Kiến thức sẽ dần đến khi bạn chú tâm đến nó. Quả thực nói đến công thức mảng là phải nói đến sự tinh hoa và huyền bí. Nó như ma thuật vậy...và đòi hỏi cả tưởng tượng nữa.

Lúc đầu minh hoa mắt chóng mặt nhưng cứ cố gắng đọc và hỏi...dần dần mình cũng vỡ ra nhiều đấy bạn ạ.

Cố lên nhé
 
Hic, đúng là khó hiểu thật. Cái đoạn này là thấy khó hiểu nhất đấy:

INDIRECT($G$1:$G$4&"!A8:A100") khi chạy sẽ giống như chạy 4 hàm đơn:
  • INDIRECT($G$1&"!A8:A100") = Thang1!A8:A100
  • INDIRECT($G$2&"!A8:A100") = Thang2!A8:A100
  • INDIRECT($G$3&"!A8:A100") = Thang3!A8:A100
  • INDIRECT($G$4&"!A8:A100") = Thang4!A8:A100
Rõ ràng là ở công thức tổng toàn là các giá trị cố định mà sao nó lại có tác dụng cho 4 sheet được. Trìu tượng quá rùi hic hic
 
Hic, đúng là khó hiểu thật. Cái đoạn này là thấy khó hiểu nhất đấy:

INDIRECT($G$1:$G$4&"!A8:A100") khi chạy sẽ giống như chạy 4 hàm đơn:

* INDIRECT($G$1&"!A8:A100") = Thang1!A8:A100
* INDIRECT($G$2&"!A8:A100") = Thang2!A8:A100
* INDIRECT($G$3&"!A8:A100") = Thang3!A8:A100
* INDIRECT($G$4&"!A8:A100") = Thang4!A8:A100

Bạn mở file bài 3 lên, hoặc xem cái hình 1 bài 4, xem những ô tôi tô đỏ, chứa cái gì ở trong?
 
Cách sử dụng hàm indirect

Chào các Anh/chị

Để tính tổng tại các ô [A1] của các sheet t1 đến t4, tại sheet "th" tôi sử dụng công thức mãng sum(indirect()) thì kết quả chỉ lấy của sheet t1. Còn dùng hàm sumproduct(sum(indirect())) thì báo lỗi N/A. Nhờ mọi người sửa dùm.


Thân
XC3
 

File đính kèm

Chào các Anh/chị

Để tính tổng tại các ô [A1] của các sheet t1 đến t4, tại sheet th; tôi sử dụng công thức mãng sum(indirect()) thì kết quả chỉ lấy của sheet t1. Còn dùng hàm sumproduct(sum(indirect())) thì báo lỗi N/A. Nhờ mọi người sửa dùm.


Thân
XC3
Bạn dùng SUMPRODUCT chung với SUMIF và INDIRECT thì sẽ được:
=SUMPRODUCT(SUMIF(INDIRECT($F$1:$F$4&"!$a$1"),"<>0"))​
Nếu những ô A1 trong các Sheet từ t1 đến t4 mà khác 0, thì cộng chúng lại với nhau.
 
Chào các Anh/chị

Để tính tổng tại các ô [A1] của các sheet t1 đến t4, tại sheet &quot;th&quot; tôi sử dụng công thức mãng sum(indirect()) thì kết quả chỉ lấy của sheet t1. Còn dùng hàm sumproduct(sum(indirect())) thì báo lỗi N/A. Nhờ mọi người sửa dùm.


Thân
XC3
Bạn dùng ct dưới nhé.
Mã:
=SUMPRODUCT(N(INDIRECT($F$1:$F$4&"!$a$1")))
 
Bạn dùng ct dưới nhé.
Mã:
=SUMPRODUCT(N(INDIRECT($F$1:$F$4&"!$a$1")))
Hay thật. Mình cũng có ý định là đổi mấy giá trị do INDIRECT trả về thành giá trị thực, rồi mới SUMPRODUCT, nghĩ mãi hổng nhớ hàm N. Nên mới dựng lên cái chuyện dùng SUMIF để cộng những số khác 0.
 
Đây là bảng tính mà bạn gửi lên. Tôi để ở đây để vừa nhìn vừa nói nhé.
046.jpg
Công thức bạn muốn hỏi có phải là công thức của ô C6, ở trên thanh formulas không ?
=SUMPRODUCT(SUMIF(INDIRECT($G$1:$G$4&"!A8:A100"),A6,INDIRECT($G$1:$G$4&"!C8:C100")))
Dịch nôm na ra thì nó có nghĩa như sau:
Để tìm tổng số Nợ của tài khoản ở ô A6 (342), thì đi dò trong khối cell A8:A100 của các Sheet có tên trùng với tên trong khối cell G1:G4 (Thang1, Thang2, Thang3, Thang4), nếu thấy có tài khoản giống như ở A6, thì cộng hết số tiền nằm cùng hàng (với tài khoản giống như ở A6) trong khối cell C8:C100 trong các Sheet có tên trùng với tên trong khối cell G1:G4.​

Để coi A8:A100 và C8:C100 là cái gì, xem hình sau đây, nó là Sheet Thang1 (3 Sheet còn lại y chang như vậy):
047.jpg
Có lẽ bạn đã hiểu SUMIF() làm cái gì. Xin bỏ qua.

Cái hay của hàm này là dùng SUMPRODUCT kẹp bên ngoài của SUMIF, có tác dụng cộng hết những gì SUMIF tìm được ở mỗi Sheet.
Nếu không dùng SUMPRODUCT mà chỉ lấy phần trong của nó (từ chỗ SUMIF trở đi), và nhấn Ctrl-Shift-Enter để tạo công thức mãng, thì cái bạn nhận được chỉ là kết quả của cái SUMIF tìm được ở Sheet đầu tiên mà thôi (trong trường hợp này thì nó chỉ tìm ở Sheet Thang1, rồi dừng lại).

Bạn muốn hỏi về INDIRECT() phải không?

Trong trường hợp cụ thể này, INDIRECT không dùng tham số a1, nghĩa là dùng kiểu tham chiếu A1.
Tôi giải thích một cái thôi, còn cái thứ hai thì bạn tự suy ra nhé:
INDIRECT($G$1:$G$4&"!A8:A100")
Vì nằm trong hàm SUMPRODUCT, nên công thức trên sẽ chạy như một công thức mãng, nó sẽ lần lượt thay thế cái nó tìm được ở khối cell G1:G4 với (dấu & có tác dụng ghép lại) cái ở trong cặp ngoặc kép (!A8:A100), cụ thể là:
INDIRECT($G$1:$G$4&"!A8:A100") khi chạy sẽ giống như chạy 4 hàm đơn:
  • INDIRECT($G$1&"!A8:A100") = Thang1!A8:A100
  • INDIRECT($G$2&"!A8:A100") = Thang2!A8:A100
  • INDIRECT($G$3&"!A8:A100") = Thang3!A8:A100
  • INDIRECT($G$4&"!A8:A100") = Thang4!A8:A100
Cái dấu chấm than (!) là ký hiệu để Excel biết rằng A8:A100 nằm trong Sheet nào.

Hay nói cách khác:
INDIRECT($G$1:$G$4&"!A8:A100") = {Thang1!A8:A100; Thang2!A8:A100; Thang3!A8:A100; Thang4!A8:A100}​
Sau đó công thức sẽ dùng cái INDIRECT đã thay thế này làm tham số cho SUMIF đi tìm tiếp.

Tới đây thì bạn hiểu rồi chứ ?
[/COLOR]

vậy có cách nào khác mà không phải tạo thêm khối G1:G4 không hả thầy?
 
không biết hàm INDIRECT có làm được như vậy không?
INDIRECT('C:\Users\phpvnn\Desktop\FILE\[f1.xlsx]baitap_5'!$A3)
thông thường tôi chỉ thấy hàm INDIRECT chỉ link kết trong 1 file
còn liên kết tới file khác cho dù mình chỉ đường dẫn nó vẫn ra #REF
không biết có cách nào cho hàm INDIRECT lấy được dữ liệu từ những file khác không? xin được ý kiếm của các cao thủ, xin cảm ơn
 
không biết hàm INDIRECT có làm được như vậy không?
INDIRECT('C:\Users\phpvnn\Desktop\FILE\[f1.xlsx]baitap_5'!$A3)
thông thường tôi chỉ thấy hàm INDIRECT chỉ link kết trong 1 file
còn liên kết tới file khác cho dù mình chỉ đường dẫn nó vẫn ra #REF
không biết có cách nào cho hàm INDIRECT lấy được dữ liệu từ những file khác không? xin được ý kiếm của các cao thủ, xin cảm ơn
KHÔNG ĐƯỢC
INDIRECT không thể liên kết với file đang đóng đâu bạn à (cái này nói nhiều rồi)
 
không biết hàm INDIRECT có làm được như vậy không?
INDIRECT('C:\Users\phpvnn\Desktop\FILE\[f1.xlsx]baitap_5'!$A3)
thông thường tôi chỉ thấy hàm INDIRECT chỉ link kết trong 1 file
còn liên kết tới file khác cho dù mình chỉ đường dẫn nó vẫn ra #REF
#REF vì sử dụng hàm Indirect sai cách.
Cú pháp:
=Indirect(chuỗi)

dữ liệu chuỗi khác với tham chiếu.

Ngoài ra, khi file đang đóng cũng không lấy được.
 
Nếu tên Sheet có dấu cách thì dùng Indirect thế nào. Xin xem file đính kèm, Sheet cuối cùng

Cũng nhờ các anh chỉ cách hiện các cột của Sheet B 2.

Bạn sửa cell E5 thành vầy là được: ''a 1'!C2:D10
Chú ý chổ màu đỏ là 2 dấu nháy đơn chứ không phải 1 dấu nháy đôi nha
-------------
Nguyên tắc chung để viết 1 chuổi chứa tham chiếu là: 'Tên sheet'!Địa chỉ
Luôn luôn có cặp dấu nháy đơn bao đầu và cuối tên sheet thì khi đưa vào INDIRECT sẽ không bị lỗi
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom