Động rộng của mảng khi dùng Offset ? (1 người xem)

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

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

vumian

Mỗi bậc thang là mỗi Cell
Tham gia
12/3/07
Bài viết
267
Được thích
186
Nghề nghiệp
employee only, not a boss
Dear all,

Làm ơn xem giúp mình cái file này, mình suy nghĩ mãi mà chưa có ra, hichic
Trường hợp trong file, dộ rộng mảng >=3 là ra kết quả đúng, nếu cột A có dữ liệu thì dộ rộng mãng này sẽ bị thay dổi

Thanks,
vumian
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem file này và theo ý tưởng của bạn phát triển thêm nhé
 

File đính kèm

Bạn thay độ rộng (5) bằng ct:
=MATCH(9.99999999999999E+307,Sheet1!$E$8:$IV$8)
 

File đính kèm

@CaoManhSơn & @Salam

Mình đã xem qua cách giải quyết của 2 bác, cách giải quyết gần đúng rồi ,nhưng dữ liệu không nhất thiết bắt đầu bằng B6 hay B8, nếu B6 hay B8 mà rỗng thì côgn thức là 0 , hic
Vậy thì mình có giải pháp nào khác ?

Ô kết quả có thể đặt ở D7, hay D6, nhưng theo mình nghĩ là làm sao mình biết được vị trí bắt đầu và kết thúc trong vùng mảng ? Khi ấy chắc giải quyết được vấn đề

Thanks
 
Lần chỉnh sửa cuối:
Cũng khó hình dung quá! Bạn đang muốn giãi quyết chuyện gì? Có thể nói rõ hơn 1 chút không?
Bài toán chỉ có thể giãi quyết được nếu có dử liệu cụ thể và nhưng dấu hiệu nhận biết!
Bạn tham khảo về công thức độc đáo tại đây xem có giúp gì được không:
http://www.giaiphapexcel.com/forum/showthread.php?t=7669
Nếu cần phải xác định mãng nằm trên 1 dòng nào đó xuất phát từ điểm nào và kết thức tại điểm nào thì tôi nghĩ tốt nhất cột kết quả nên "né" ra chổ khác. Chứ chung đụng thế thì dể gây nhầm lẩn lắm!
 
Dear ndu,

- Mình đã xem các công thức độc đáo rồi, nhưng mình chưa có giải pháp
- Cái ô kết quả màu hồng là 0 là sai, phải là 2.1 mới đúng
- Cái cell kết quả có thể nằm trên, sao cho có thể fill nó xuống hoặc lên, vì cái dữ liệu bên phải là dạng như vậy,
- Mình up lại file để bác dễ hình dung nha, Cám ơn nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Dear ndu,

- Mình đã xem các công thức độc đáo rồi, nhưng mình chưa có giải pháp
- Cái ô kết quả màu hồng là 0 là sai, phải là 2.1 mới đúng
- Cái cell kết quả có thể nằm trên, mình up lại file để bác dễ hình dung nha, Cám ơn nhiều

xem lại kết quả đã đúng chưa?
 

File đính kèm

Boyxin ơi,
- Kết quả thì đúng, nhưng kéo lên hoặc kéo xuống thì kết quả lại sai,
- Vì là dạng dữ liệu cột mà, nên phải fill cái ô kết quả xuống

Mong xem giúp lần nữa, Cám ơn,
 
Boyxin ơi,
- Kết quả thì đúng, nhưng kéo lên hoặc kéo xuống thì kết quả lại sai,
- Vì là dạng dữ liệu cột mà, nên phải fill cái ô kết quả xuống

Mong xem giúp lần nữa, Cám ơn,
Khóa cell H2 lại, có nghĩa là sửa H2 thành $H$2
 
Boyxin ơi,
- Kết quả thì đúng, nhưng kéo lên hoặc kéo xuống thì kết quả lại sai,
- Vì là dạng dữ liệu cột mà, nên phải fill cái ô kết quả xuống

Mong xem giúp lần nữa, Cám ơn,

kéo lên xuông là thế nào? kéo fill lên cho mản ở trên à?
kết quả vẫn để ở dòng giữa (lấy dòng dưới trù dòng trên của dòng kết quả) thì sửa lại công thức trong ô kết quả
PHP:
=SUMPRODUCT(OFFSET(F11,,,1,$H$2)-OFFSET(F11,-2,,1,$H$2))

khi để H2 kéo fill lên xuông thì giá trị này thây đổi dẫn đến kết quả sai thôi mà
---------------
oài
ndu96081631
user_online.gif

10th Excel Member
gold.gif
gold.gif

nhanh tay ghê, trước mình tíc tắc
 
Lần chỉnh sửa cuối:
Ôi, 2 bác thật tuyệt, Cái vụ lấy địa chỉ tuyệt đối mà lại không để ý, bị sì trét quá rồi

Nhưng mà sao mình gộp công thức lại nó báo lỗi nhỉ ?, không muốn dùng ô phụ

Cám ơn 2 bác nhiều,
 
Lần chỉnh sửa cuối:
Ôi, 2 bác thật tuyệt, Cái vụ lấy địa chỉ tuyệt đối mà lại không để ý, bị sì trét quá rồi

Nhưng mà sao mình gộp công thức lại nó báo lỗi nhỉ ?, không muốn dùng ô phụ

Cám ơn 2 bác nhiều,
Bạn gộp thế nào? Và báo lổi thế nào?
Có thể đưa file lổi lên được không?
 
NDu ơi

Mình chép ct ở name er, rùi cho vào H2, chỉnh sửa địa chỉ thành tương đối, hôg hiểu sao nữa

Thanks,
 

File đính kèm

NDu ơi

Mình chép ct ở name er, rùi cho vào H2, chỉnh sửa địa chỉ thành tương đối, hôg hiểu sao nữa

Thanks,
Bạn chỉ cần sửa lại:
Mã:
MATCH(9.99999999999999E+307,Sheet1!$8:$8)-COLUMN(Sheet1!$E$8)
thành
Mã:
MATCH(9.99999999999999E+307,$8:$8)-5
Là hết lổi ngay!
 
Nói thêm 1 chút về lổi này:
Vì hàm COLUMN trả về giá trị mãng, cho dù bạn Enter hay Ctrl + Shift + Enter gì thì nó vẩn cứ là MÃNG
Thử nghiệm bằng cách gỏ hàm COLUMN() vào 1 cell nào đó, quét công thức trên thanh Formula rồi F9, bạn sẽ thấy xuất hiện dấu {}
Ví dụ hàm COLUMN() nằm tại cột E sẽ trả về giá trị ={5} chứ không phải =5
Vấn đề nằm ở chổ đó!
Tương tự thế với hàm ROW()
-----------------
Từ đây ta có 1 bài toán đặt ra là:
Làm cách nào để biến {5} thành 5 ,tức biến mãng 1 phần tử thành giá trị đơn bình thường
Vẫn chưa nghĩ ra được giãi pháp! Các bạn nghiên cứu thử xem!
???
 
Lần chỉnh sửa cuối:
Mình thêm nhiều dữ liệu vào, Hông hiểu nó vẫn lỗi , kỳ thiệt nha
Ah, Nếu dữ liệu ở dòng B khôg có, thì cái hàm MATCH sẽ trả về con số > thứ tự cột ô đầu tiên

Cụ thể là D13 chưa chính xác ??
 

File đính kèm

Lần chỉnh sửa cuối:
Mình thêm nhiều dữ liệu vào, Hông hiểu nó vẫn lỗi , kỳ thiệt nha
Ah, Nếu dữ liệu ở dòng B khôg có, thì cái hàm MATCH sẽ trả về con số > thứ tự cột ô đầu tiên

Cụ thể là D13 chưa chính xác ??

Kiểm tra lại xem còn sai nữa không nhé (chắc là hết sai rồi)
 

File đính kèm

Đúng là hết sai, nhưng còn 1 trường hợp mà dữ liệu dòng A và B đều rỗng , hihi, thì nó sẽ ra #REF đó, dù sao cũng có hướng cho mình đi rồi, cám ơn 2 bác nhiều
 
Đúng là hết sai, nhưng còn 1 trường hợp mà dữ liệu dòng A và B đều rỗng , hihi, thì nó sẽ ra #REF đó, dù sao cũng có hướng cho mình đi rồi, cám ơn 2 bác nhiều

xóa hết name thừa (chỉ để lại 3 name er, er_st, er_sbt)
sửa công thức tính như sau
PHP:
D7=IF(MOD(ROWS($7:7),3)=1,IF(er=0,"",SUMPRODUCT(OFFSET(F8,,,1,er)-OFFSET(F8,-2,,1,er))),"")
rồi kéo fill xuống
bi giờ chắc là không còn #REF
 

File đính kèm

Lần chỉnh sửa cuối:
Thế còn câu hỏi tại bài #15 thì sao nhỉ?
Tôi đưa lên thêm 1 file giã lập như thế này nhé:
-Dử liệu là number nằm ở A1:A10
-Dùng hàm =SUMPRODUCT(OFFSET($A$1,,,ROW($B$5),)) trả về lổi #VALUE
-Nếu dùng SUM(OFFSET($A$1,,,ROW($B$5),))thì giá trị trả về = 15 (chính xác)
Không hiểu
???
Thêm 1 chuyện hơi lạ:
-Quét đoạn công thức OFFSET($A$1,,,ROW($B$5),) trên thanh Formula rồi bấm F9 thì ta thấy giá trị tính toán được =1 (kỳ lạ)
-Nếu thay đoạn trên thành OFFSET($A$1,,,5,) rồi cũng quét nó trên thanh Formula và F9 thì giá trị tính toán được = {1;2;3;4;5} (cái này chính xác)
???
Các bạn xem file thử! Thật không hiểu nổi
 

File đính kèm

Thế còn câu hỏi tại bài #15 thì sao nhỉ?
Tôi đưa lên thêm 1 file giã lập như thế này nhé:
-Dử liệu là number nằm ở A1:A10
-Dùng hàm =SUMPRODUCT(OFFSET($A$1,,,ROW($B$5),)) trả về lổi #VALUE
-Nếu dùng SUM(OFFSET($A$1,,,ROW($B$5),))thì giá trị trả về = 15 (chính xác)
Không hiểu
???
Thêm 1 chuyện hơi lạ:
-Quét đoạn công thức OFFSET($A$1,,,ROW($B$5),) trên thanh Formula rồi bấm F9 thì ta thấy giá trị tính toán được =1 (kỳ lạ)
-Nếu thay đoạn trên thành OFFSET($A$1,,,5,) rồi cũng quét nó trên thanh Formula và F9 thì giá trị tính toán được = {1;2;3;4;5} (cái này chính xác)
???
Các bạn xem file thử! Thật không hiểu nổi

Với topic này Lổi kỳ lạ với hàm OFFSET thì chắc tạm ổn rồi nhỉ
 
Thế còn câu hỏi tại bài #15 thì sao nhỉ?
Tôi đưa lên thêm 1 file giã lập như thế này nhé:
-Dử liệu là number nằm ở A1:A10
-Dùng hàm =SUMPRODUCT(OFFSET($A$1,,,ROW($B$5),)) trả về lổi #VALUE
-Nếu dùng SUM(OFFSET($A$1,,,ROW($B$5),))thì giá trị trả về = 15 (chính xác)
Không hiểu
???
Thêm 1 chuyện hơi lạ:
-Quét đoạn công thức OFFSET($A$1,,,ROW($B$5),) trên thanh Formula rồi bấm F9 thì ta thấy giá trị tính toán được =1 (kỳ lạ)
-Nếu thay đoạn trên thành OFFSET($A$1,,,5,) rồi cũng quét nó trên thanh Formula và F9 thì giá trị tính toán được = {1;2;3;4;5} (cái này chính xác)
???
Các bạn xem file thử! Thật không hiểu nổi

NDU ơi,

Theo mình nghĩ, các đối số của SUMPRODUCT nên phải là mảng, sở dĩ SUMPRODUCT(OFFSET($A$1,,,ROW($B$5),)) của bác lỗi có lẽ là row(B5) chỉ đơn thuần không phải là dối số mảng, vì thế
- Muốn hết lỗi thì công thức phải là :
Mã:
SUMPRODUCT(OFFSET($A$1,,,ROWS(5:5),))
Công thức trên chỉ đúng về mặt công thức, nhưng về đáp số thì sai, vì rows() trả về số hàng của 1 mảng, còn rows(5:5) thì đương nhiên là 1 hàng. Vì thế kết quả lại sai
- muốn ra đáp số thì công thức phải thế này
Mã:
=SUMPRODUCT(OFFSET($A$1,,,ROWS(A1:A5),))
Mình lý luận thế này, bác có cao kiến gì thêm không

Regards,
vumian
 
Lỗi thế nào, tui lồng bên ngoài là hàm Sum và SumProduct có thấy lỗi thế nào đâu
File này không bị lổi là điều đương nhiên. Bạn xem file trong bài #20 ấy!
Bạn vumian đưa ra giãi pháp là đúng rồi, nhưng ý tôi không phải là tìm giãi pháp mà là tìm nguyên nhân!
Để ý cùng 1 biểu thức như nhau, nhưng khi lồng hàm SUM và thì bình thường trong khi với SUMPRODUCT thì lại báo lổi!
Cái tôi muốn các bạn quan tâm là ở chổ này đây!
Còn nữa nha: Tôi đang dùng ROW chứ không phải ROWS
 
Lần chỉnh sửa cuối:
xem file trong bài #20 ấy!
ý tôi không phải là tìm giãi pháp mà là tìm nguyên nhân!
Để ý cùng 1 biểu thức như nhau, nhưng khi lồng hàm SUM và thì bình thường trong khi với SUMPRODUCT thì lại báo lổi!
Cái tôi muốn các bạn quan tâm là ở chổ này đây!
Còn nữa nha: Tôi đang dùng ROW chứ không phải ROWS

Tài liệu tham khảo
  1. SUM và SUMPRODUCT khác nhau điểm nào trong trường hợp này?
  2. http://www.webketoan.vn/forum/showthread.php?t=11790#Scene 1
  3. http://webketoan.com/forum/showthread.php?p=32110#Scene 1
  4. http://www.google.com.vn/search?hl=vi&q=SUM+và+SUMPRODUCT&btnG=Tìm+với+Google&meta=lr=lang_vi
  5. ..........&.........
Em đọc mãi mà chưa tìm ra nguyên nhân của căn bệnh ở bài #20. ai biết thì chia sẻ để anh em học hỏi nha
 
Hai điểm mấu chốt mà tôi quan tâm là:
-Tại sao SUMPRODUCT bị lổi
-Quét chọn khối công thức OFFSET và F9 thì kết quả thu được hết sức kỳ lạ, thế mà SUM nó vẫn tính ra
 
Bác Ndu, Boyxin ơi,


Mình muón cout có bao nhiêu phần tử số thôi,
File mình bị lỗi mà cũng hông hiểu luôn, bác xem giúp

Thanks,
 

File đính kèm

Nếu bạn muốn đếm dòng 1 có bao nhiêu phần tử số thì làm vậy đâu có được!
COUNT($A$1&":"&H11) và COUNTA($A$1&":"&H11) chẳng có ý nghĩa gì cả. Ít nhất cũng phải:
=COUNT(INDIRECT("A1:"&$H$11))
 
Nếu thì mình đầu có fill down được, chắc phải dùng offset ?
 
Bác Ndu, Boyxin ơi,


Mình muón cout có bao nhiêu phần tử số thôi,
File mình bị lỗi mà cũng hông hiểu luôn, bác xem giúp

Thanks,
Công thức tại A2
PHP:
A2 =OFFSET($A1,,,1,COUNTA($A$1&":"&H11))
COUNTA($A$1&":"&H11) sai cấu trúc lệnh COUNTA
Sửa thành
PHP:
A2 =OFFSET(Sheet1!$A$1,,,1,COUNTA(Sheet1!$A$1:$H$11))
Rồi chép thành công thức của 1 name trong Insert\Name\Define... (VD: Name1)
Công thức tại A3
PHP:
A3 =OFFSET($A1,,,1,COUNT($A$1&":"&H11))
COUNT($A$1&":"&H11) sai cấu trúc lệnh COUNT
Sửa thành
PHP:
A3 =OFFSET(Sheet1!$A$1,,,1,COUNT(Sheet1!$A$1:$H$11))
Rồi chép thành công thức của 1 name trong Insert\Name\Define...(VD: Name2)

KIỂM TRA KẾT QUẢ LÀ THẤY LIỀN
 
Không hiểu:
COUNT(Sheet1!$A$1:$H$11)
COUNTA(Sheet1!$A$1:$H$11)
là COUNT cái gì vậy ta?
 
Ủa, hình như BoyXin lạc đề thì phải, mình đang bàn nhau về đếm 1 hàng thôi mà
 
COUNT và COUNTA thì đương nhiên hiểu. Nhưng tôi không hiểu ý nghĩa thật sự của hàm này trong cả công thức!
Ra kết quả =10 ===> vẩn không hiểu là cái gì
???
Vì thực chất ngay chổ:
A3 =OFFSET(Sheet1!$A$1,,,1,COUNT(Sheet1!$A$1:$H$11))
Đâu có gõ công thức này được!
Xin boyxin giãi thích thêm!
Còn bạn vumian: Có thể nói thêm về mục đích của bạn không? Bạn cần đếm các phần tử số trong 1 hàng uh? thế sao tại cell A2 bạn không gỏ: =COUNT(1:1) cho gọn? Sao phải OFFSET rồi tùm lum các thứ cả
 
Lần chỉnh sửa cuối:
COUNT và COUNTA thì đương nhiên hiểu. Nhưng tôi không hiểu ý nghĩa thật sự của hàm này trong cả công thức!
Ra kết quả =10 ===> vẩn không hiểu là cái gì
???
Vì thực chất ngay chổ:

Đâu có gõ công thức này được!
Xin boyxin giãi thích thêm!
Còn bạn vumian: Có thể nói thêm về mục đích của bạn không? Bạn cần đếm các phần tử số trong 1 hàng uh? thế sao tại cell A2 bạn không gỏ: =COUNT(1:1) cho gọn? Sao phải OFFSET rồi tùm lum các thứ cả

  1. Thì tại bạn vumian thắc mắc không biết tại sao bị lỗi, tui chỉ cho cách nhìn thấy lỗi, vậy thôi
  2. A2, A3 nằm trong vùng xác định bởi vùng đếm của COUNT và COUNTA để xác định làm 1 tham số của hàm OFFSET <=> LỖI
  3. Mình đoán ý đồ của bạn vumian định dùng hàm OFFSET động (thay đổi độ rộng vùng khi kéo fill ...)
 
Ý, Mình muốn đếm ngay từ trên đầu cell trờ về sau thôi, cho nên mói cái H11,

ví dụ số bắt đầu từ A3 - B3 - B3 .... .....
ngay a4 là kết quả của dòng 3
 
Đâu có, H11 là lấy ô cuối cùng của dòng mà, tính offset tới đó,
 
Ý, Mình muốn đếm ngay từ trên đầu cell trờ về sau thôi, cho nên mói cái H11,

ví dụ số bắt đầu từ A3 - B3 - B3 .... .....
ngay a4 là kết quả của dòng 3
Nhưng nếu đếm 1 hàng thì tại sao phải cần OFFSET?
Vì đàng nào khi bạn gỏ dử liệu ở đâu đó thì công thức tại H11 cũng sẽ lấy địa chỉ cell cuối cùng có dử liệu dạng số. Vậy cần gì OFFSET?
Ý tôi muốn nói tại sao tại A2 bạn không gỏ =COUNT(1:1) rồi fill xuống
Có gì khác nhau đâu? Bạn thử đưa 1 ví dụ về sự khác nhau giữa việc dùng hàm COUNT(1:1) của tôi và OFFSET của bạn xem nào?
 
PHP:
Ý tôi muốn nói tại sao tại A2 bạn không gỏ =COUNT(1:1) rồi fill xuống
vì phía trước cái form nó còn có những con số khác nữa, nên mới không dùng được cái count(1:1) ý mà
 
PHP:
Ý tôi muốn nói tại sao tại A2 bạn không gỏ =COUNT(1:1) rồi fill xuống
vì phía trước cái form nó còn có những con số khác nữa, nên mới không dùng được cái count(1:1) ý mà
Cũng không hiểu! Phía trước nào nữa ta? Cột A nằm tận cùng bên trái rồi, còn có cái nào nằm trước nửa chứ!
 
hihi, đó là cái ví dụ thôi mà, ngầm ý là mình muốn dùng offset(A1,...) ngay từ đầu mà
 
Đâu có, H11 là lấy ô cuối cùng của dòng mà, tính offset tới đó,
Cấu trúc hàm OFFSET thế này cơ mà, bạn xem lại phần tô đậm, đỏ
PHP:
=OFFSET(reference,rows,cols,[height],[width])
A2 =OFFSET($A1,,,1,COUNTA($A$1&":"&H11))
A3 =OFFSET($A1,,,1,COUNT($A$1&":"&H11)) thì
  1. reference = $A1
  2. rows = ,, = 0
  3. cols = ,, = 0
  4. [height] = 1
  5. [width] = COUNTA($A$1&":"&H11) ???
Như vậy thì sai và lỗi là đương nhiên
 
Lần chỉnh sửa cuối:
NDU

Gởi lên cái form có dữ liệu phía trơớc rồi

Boyxin,

Chính vì phần màu đỏ của bác nên nó bị lỗi, mà mình cũng hôg biết sửa làm sao luôn :(
 

File đính kèm

NDU

Gởi lên cái form có dữ liệu phía trơớc rồi

Boyxin,

Chính vì phần màu đỏ của bác nên nó bị lỗi, mà mình cũng hôg biết sửa làm sao luôn :(
Theo tôi thì:
Mã:
E2 =COUNT(F1:IV1)
Chỉ đơn giản vậy thôi
 
Đồng ý là count(F1:IV1) đơn giản, và mình cũng làm theo cách này rồi, nhưng suy nghĩ lại thì mảng tới đâu thì chỉ cần lấy range tới đó thôi, hông lấy nhiều
 
Gởi lên cái form có dữ liệu phía trơớc rồi
Các Anh bàn tán sôi nổi quá, tôi cũng xin đưa ra 1 file dùng offset chọn mảng vừa tới cell có dữ liệu cuối, chọn dòng có dữ liệu dài hơn làm chuẩn và fill theo ý vumian.
Bạn xem đúng ý chưa nhé, làm theo ý của bạn chứ theo tôi dùng sum dòng dưới trừ sum dòng trên là đơn giản nhất.
 

File đính kèm

Đồng ý là count(F1:IV1) đơn giản, và mình cũng làm theo cách này rồi, nhưng suy nghĩ lại thì mảng tới đâu thì chỉ cần lấy range tới đó thôi, hông lấy nhiều
Bạn ơi! Tùy theo chuyện mà tạo mãng động! Với dử liệu của bạn thì điều đó hoàn toàn không cần thiết. Vì công thức tính địa chỉ cuối cùng có dử liệu nó cũng đã đi xuyên qua cả dòng rồi còn gì!
Chúng ta sẽ làm mãng động trong những trường hợp khác như: Tính tổng nhiều điều kiện, phải thiết kế mãng động nhằm nâng tốc độ tính toán... Hoặc trong 1 số trường hợp riêng nào đó
Tóm lại: Giãi quyết yêu cầu này là quá dư thừa!
 

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

Back
Top Bottom