Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động tạo chuỗi STT duy nhất theo từng cột dữ liệu

Hướng Quý Nam 28/03/2026 17:40 105 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình hay phải làm việc với các bảng dữ liệu lớn, và thường xuyên gặp phải vấn đề làm sao để tạo một chuỗi số thứ tự (STT) duy nhất cho từng nhóm dữ liệu mà không bị trùng lặp. Ví dụ, mình có một danh sách các sản phẩm và người bán, mình muốn đánh STT cho từng sản phẩm, và STT này sẽ tự động reset về 1 khi gặp một sản phẩm mới.

Mình đã thử dùng IF(B2B1,1,STT_TRUOC+1) nhưng cách này chỉ hiệu quả khi dữ liệu đã được sắp xếp theo cột cần nhóm. Nếu dữ liệu chưa sắp xếp thì công thức này không hoạt động đúng.

Gần đây, mình có tìm hiểu và phát hiện ra một cách kết hợp hàm SUMPRODUCTCOUNTIF để giải quyết vấn đề này một cách khá gọn gàng, ngay cả khi dữ liệu chưa được sắp xếp. Công thức như sau:

=SUMPRODUCT(--(B$2:B2=B2),--(ROW(B$2:B2))) - SUMPRODUCT(--(B$2:B2=B2),--(ROW(B$2:B2)-1))

Trong đó:

  • B$2:B2 là vùng chứa dữ liệu bạn muốn nhóm (ví dụ: cột Tên sản phẩm). Dấu $ ở dòng 2 là cố định để khi kéo công thức xuống, nó luôn bắt đầu từ dòng 2.
  • B2 là ô chứa giá trị hiện tại của cột nhóm.
  • ROW(B$2:B2) trả về một mảng các số thứ tự của các dòng từ 2 đến dòng hiện tại.

Công thức này về cơ bản sẽ đếm số lần xuất hiện của giá trị hiện tại từ đầu danh sách đến dòng hiện tại, sau đó trừ đi tổng các số thứ tự trước đó của các lần lặp lại. Kết quả là bạn sẽ có một chuỗi STT duy nhất cho từng nhóm.

Cách này rất tiện lợi khi bạn cần đánh STT theo các nhóm khác nhau mà không cần phải sắp xếp lại dữ liệu. Hy vọng chia sẻ này hữu ích cho mọi người!

Có ai có cách nào khác hay hơn không, chia sẻ cùng mình nhé!

0

Chào bạn,

Vấn đề bạn gặp phải khá phổ biến khi làm việc với dữ liệu lớn. Công thức IF(B2B1,1,STT_TRUOC+1) đúng là chỉ hoạt động tốt khi dữ liệu đã được sắp xếp.

Để xử lý trường hợp dữ liệu chưa sắp xếp, bạn có thể thử dùng kết hợp SUMPRODUCTCOUNTIF. Ví dụ, nếu cột nhóm là B và bạn muốn đánh STT ở cột A, bạn có thể dùng công thức này ở ô A2 và kéo xuống:

``excel =SUMPRODUCT(--($B$2:B2=B2),--(ROW($B$2:B2))) - SUMPRODUCT(--($B$2:B2=B2),--(ROW($B$2:B2)-1)) `

Tuy nhiên, công thức này có thể hơi nặng với file quá lớn. Một cách khác, mà mình thấy hiệu quả hơn và dễ hiểu hơn là dùng INDEX kết hợp với MATCH để tìm vị trí xuất hiện đầu tiên của nhóm đó, rồi dùng COUNTIF` để đếm số lần xuất hiện của nhóm đó cho đến dòng hiện tại.

Bạn có thể chia sẻ thêm về cấu trúc file của bạn không? Ví dụ, bạn muốn đánh STT dựa trên cột nào và dữ liệu của bạn có bao nhiêu dòng? Biết thêm chi tiết sẽ giúp mình đưa ra giải pháp tối ưu hơn.

3

Chào bạn,

Cảm ơn bạn đã chia sẻ cách làm bằng SUMPRODUCT và COUNTIF, nghe có vẻ rất hay đó! Mình cũng hay dùng INDEX-MATCH nhưng chưa nghĩ đến việc kết hợp nó để giải quyết trường hợp này.

Bạn có thể giải thích rõ hơn một chút về cách dùng INDEX-MATCH để tìm vị trí xuất hiện đầu tiên của nhóm không? Mình tò mò muốn biết làm sao để "đếm số lần xuất hiện của nhóm đó cho đến dòng hiện tại" bằng công thức đó.

Chắc chắn với dữ liệu lớn thì hiệu suất là yếu tố quan trọng. Mong là có nhiều cách để tối ưu!

3

Chào bạn,

Vấn đề bạn gặp phải khá phổ biến khi làm việc với dữ liệu lớn. Công thức IF(B2B1,1,STT_TRUOC+1) đúng là chỉ hoạt động tốt khi dữ liệu đã được sắp xếp.

Để xử lý trường hợp dữ liệu chưa sắp xếp, bạn có thể thử dùng kết hợp SUMPRODUCTCOUNTIF. Ví dụ, nếu cột nhóm là B và bạn muốn đánh STT ở cột A, bạn có thể dùng công thức này ở ô A2 và kéo xuống:

=SUMPRODUCT(--($B$2:B2=B2),--(ROW($B$2:B2))) - SUMPRODUCT(--($B$2:B2=B2),--(ROW($B$2:B2)-1))

Tuy nhiên, công thức này có thể hơi nặng với file quá lớn. Một cách khác, mà mình thấy hiệu quả hơn và dễ hiểu hơn là dùng INDEX kết hợp với MATCH để tìm vị trí xuất hiện đầu tiên của nhóm đó, rồi dùng COUNTIF để đếm số lần xuất hiện của nhóm đó cho đến dòng hiện tại.

Bạn có thể chia sẻ thêm về cấu trúc file của bạn không? Ví dụ, bạn muốn đánh STT dựa trên cột nào và dữ liệu của bạn có bao nhiêu dòng? Biết thêm chi tiết sẽ giúp mình đưa ra giải pháp tối ưu hơn.

2

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký