Xin tìm nguyên nhân sai STT

Liên hệ QC

longlt08

Thành viên thường trực
Tham gia
23/3/08
Bài viết
321
Được thích
400
Xin chào các anh, chị GPE !
Tôi có file đánh số thứ tự (STT) làm theo cách của bạn huuthang hướng dẫn. Nếu áp dụng cho danh sách ngắn thì cho STT đúng, còn áp dụng cho danh sách dài, nhiều cột cần lọc thì STT lại không đúng. Nhờ các anh, chị giúp đỡ. Thanks !
 

File đính kèm

Ý của bạn là muốn STT sắp xếp sau khi đã lọc phải không. Với trường hợp dữ liệu liên tục như của bạn, bạn thử xem file đính kèm được chưa nhé!

Mình không tải được file lên, tại ô B3 bạn gõ công thức: =SUBTOTAL(103,$C$3:C3)
sau đó kéo cho các ô còn lại. bạn thử xem nhé!
 
Lần chỉnh sửa cuối:
1. Tại cột B (cột STT) Bạn dùng công thức này =IF(C3<>C2;COUNTIF(C$3:C3;C3)+MAX(B$2:B2);"") khỏi dùng cột phụ, khỏi dùng SUBTOTAL(3;C4).
2. Bạn đánh STT theo điều kiện cột C thì có liên quan gì đến đến cột F nhỉ ? nếu cột F sai thì là sai so bạn sort chứ đâu phải do STT sai; Bạn kiểm tra lại nhé.
 
1. Tại cột B (cột STT) Bạn dùng công thức này =IF(C3<>C2;COUNTIF(C$3:C3;C3)+MAX(B$2:B2);"") khỏi dùng cột phụ, khỏi dùng SUBTOTAL(3;C4).
2. Bạn đánh STT theo điều kiện cột C thì có liên quan gì đến đến cột F nhỉ ? nếu cột F sai thì là sai so bạn sort chứ đâu phải do STT sai; Bạn kiểm tra lại nhé.

Chào ban Trung Chinh !
Yêu cầu việc đánh số TT của mình là:
1/ Trước khi lọc, STT được điền (cột B) như trong file mình đã gửi
2/ Sau khi lọc theo yêu cầu của cột E hoặc cột F thì STT được đánh lại theo danh sách đã lọc
3/ Khi không lọc thì STT (cột B) lại trả về như ban đầu như khi không lọc
Vì yêu cầu này mà bạn huuthang đã nghĩ ra cách tạo cột phụ. Tuy nhiên cách đó chỉ đúng khi có danh sách ngắn thôi, còn với danh sách như file mình gửi lên thì không đúng. Mình đã thử mò mãi mà vẫn chưa tìm ra
Công thức của bạn mình thấy chỉ đúng khi chưa lọc. Khi lọc theo cột E hoặc cột F thì chưa đúng( STT sai, không theo ý muốn. Bạn giúp mình thêm nhé. Cảm ơn bạn !
 
Xin chào các anh, chị GPE !
Tôi có file đánh số thứ tự (STT) làm theo cách của bạn huuthang hướng dẫn. Nếu áp dụng cho danh sách ngắn thì cho STT đúng, còn áp dụng cho danh sách dài, nhiều cột cần lọc thì STT lại không đúng. Nhờ các anh, chị giúp đỡ. Thanks !
Bạn thử file đính kèm xem sao nhé.
 

File đính kèm

Lần chỉnh sửa cuối:
To Salam: File của bạn không đạt rồi.
Ngay khi không AutoFilter gì hết, thì ở cột STT đã sai. Bạn xem hình nhé:
000-1413.jpg
Công trình TĐ A Lưới được xếp STT đến 3 lần
Công trình TĐ Ankhê-Kanak được xếp STT đến những 6 lần
Lẽ ra cứ mỗi công trình chỉ có 1 số thứ tự mà thôi.
 
Bài toán này ko còn đơn giản là đánh STT sau khi Filter nữa mà có thể quy thành: COUNIF SAU KHI FILTER
Tôi xin gữi lên giải pháp dùng name ko cột phụ
1> Đăt name:
PHP:
CT =OFFSET($B$3,,,COUNTA($B$3:$B$1000),)
PHP:
Temp =IF(SUBTOTAL(103,OFFSET(CT,ROW(INDIRECT("1:"&ROWS(CT)))-1,,1,)),CT,"")
2> Công thức: (gõ vào cell A3)
PHP:
=IF(INDEX(Temp,ROWS($1:1),)="","",IF(ROWS($1:1)=MATCH($B3,Temp,0),MAX($A$2:$A2)+1,""))
kéo fill xuống
Vì dùng công thức mãng (Tại name Temp) nên sẽ ảnh hưởng nhiều đến tốc độ, nhất là đối với file có dử liệu lớn! Các bạn hãy cân nhắc
 

File đính kèm

Bài toán này ko còn đơn giản là đánh STT sau khi Filter nữa mà có thể quy thành: COUNIF SAU KHI FILTER
Tôi xin gữi lên giải pháp dùng name ko cột phụ
1> Đăt name:
PHP:
CT =OFFSET($B$3,,,COUNTA($B$3:$B$1000),)
PHP:
Temp =IF(SUBTOTAL(103,OFFSET(CT,ROW(INDIRECT("1:"&ROWS(CT)))-1,,1,)),CT,"")
2> Công thức: (gõ vào cell A3)
PHP:
=IF(INDEX(Temp,ROWS($1:1),)="","",IF(ROWS($1:1)=MATCH($B3,Temp,0),MAX($A$2:$A2)+1,""))
kéo fill xuống
Vì dùng công thức mãng (Tại name Temp) nên sẽ ảnh hưởng nhiều đến tốc độ, nhất là đối với file có dử liệu lớn! Các bạn hãy cân nhắc

Xin chào bạn anhtuan1066 ! rất cảm ơn bạn về cách đánh STT mà bạn vừa giúp. Tôi thấy cách của bạn có hơi chậm 1 chút nhưng bù lại sau khi lọc có thể copy và in luôn, khỏi phải gõ lại STT. File Excel của tôi có hơn 100 sheet, tôi muốn hỏi bạn thêm một chút về cách tổ chức file. Mong bạn vui lòng giúp thêm:
1/ Để cho dữ liệu được cập nhật thường xuyên, tôi thường copy và paste link ra các sheet . Về nguyên tác các link này có thể tự mất đi không ? ngoại trừ virut
2/ Bạn giải thích giúp tôi công thức mà bạn vừa làm được không ?
Chân thành cảm ơn bạn !
 
Xin chào bạn anhtuan1066 ! rất cảm ơn bạn về cách đánh STT mà bạn vừa giúp. Tôi thấy cách của bạn có hơi chậm 1 chút nhưng bù lại sau khi lọc có thể copy và in luôn, khỏi phải gõ lại STT. File Excel của tôi có hơn 100 sheet, tôi muốn hỏi bạn thêm một chút về cách tổ chức file. Mong bạn vui lòng giúp thêm:
1/ Để cho dữ liệu được cập nhật thường xuyên, tôi thường copy và paste link ra các sheet . Về nguyên tác các link này có thể tự mất đi không ? ngoại trừ virut
2/ Bạn giải thích giúp tôi công thức mà bạn vừa làm được không ?
Chân thành cảm ơn bạn !
1> Tôi chưa hiểu lắm về ý của bạn! Vậy có lẽ bạn nên đưa lên 1 file ví dụ để hiểu thêm nhé
2> Bạn hãy tìm các bài viết về trích lọc duy nhất cùng các bài viết liên quan đến công thức mãng. Bạn "dợt" vài lần tự nhiên sẽ hiểu ngay công thức của tôi!
Có thể nói vắn tắt như sau:
CT: Là name dùng để xác định vùng có dử liệu tại cột B
Temp: Là name xác định các cell đang "hiện", bỏ qua các cell đang ẩn (do Filter). Cái này duy nhất chỉ có hàm SUBTOTAL mới làm dc
Công thức: Bao hàm nội dung của công thức trích lọc duy nhất (IF(ROWS($1:1)=MATCH($B3,Temp,0).... )
Bạn cố gắng down các file trên diển đàn về mà "dợt" từ thấp lên cao, nhất là file có chủ đề về TRÍCH LỌC... Vì ko ai có thể giúp bạn nếu bạn ko tự mình "khổ luyện" và rút kinh nghiệm
 
Lần chỉnh sửa cuối:
Xin chào các anh, chị GPE !
Tôi có file đánh số thứ tự (STT) làm theo cách của bạn huuthang hướng dẫn. Nếu áp dụng cho danh sách ngắn thì cho STT đúng, còn áp dụng cho danh sách dài, nhiều cột cần lọc thì STT lại không đúng. Nhờ các anh, chị giúp đỡ. Thanks !
Lúc đó dữ liệu còn ít tôi chưa lường hết các trường hợp, chỉnh lại công thức một chút, dùng Sumproduct() thay vì Count().
 

File đính kèm

lúc đó dữ liệu còn ít tôi chưa lường hết các trường hợp, chỉnh lại công thức một chút, dùng sumproduct() thay vì count().

PHP:
=if(sumif($c$3:c55;c55;$a$3:a55)=1;sumproduct(--($a$2:a54=1);--isnumber($b$2:b54))+1;"")

hai dấu gạch "--" trong công thức là gì vậy, trước đây tôi đã thấy trên GPE có bài dùng công thức kiểu này nhưng tôi không hiểu. bạn nào biết giải thích giùm tí nha. Thanks!
 
PHP:
=if(sumif($c$3:c55;c55;$a$3:a55)=1;sumproduct(--($a$2:a54=1);--isnumber($b$2:b54))+1;"")
hai dấu gạch "--" trong công thức là gì vậy, trước đây tôi đã thấy trên GPE có bài dùng công thức kiểu này nhưng tôi không hiểu. bạn nào biết giải thích giùm tí nha. Thanks!
Cột phụ tôi dùng để đánh dấu những row hiện khi AutoFilter. Những dòng hiện sẽ có giá trị 1, dòng ẩn có giá trị 0.

Công thức đánh số thứ tự:
Mã:
=IF(SUMIF($C$3:C3,C3,$A$3:A3)=1,SUMPRODUCT(--($A$2:A2=1),--ISNUMBER($B$2:B2))+1,"")
SUMIF($C$3:C3,C3,$A$3:A3)=1 Những công trình nào xuất hiện đầu tiên khi AutoFiter sẽ trả về True, ngược lại thì False.
SUMPRODUCT(--($A$2:A2=1),--ISNUMBER($B$2:B2))+1 Đếm xem có bao nhiêu dòng đã được đánh số thứ tự mà giá trị tương ứng ở cột phụ bằng 1 (Dòng hiện).

Khi sử dụng Sumproduct() thì các tham số trong hàm phải là kiểu số (Number). Mà đoạn công thức ISNUMBER($B$2:B2) sẽ trả về giá trị True, False. Vì vậy thêm -- vào để đổi thành kiểu số có giá trị tương ứng 1, 0.
 
Web KT

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

Back
Top Bottom