Tạo số thứ tự theo khối trong Excel

Liên hệ QC

donghung1512

Thành viên hoạt động
Tham gia
15/7/11
Bài viết
121
Được thích
67
Xin chào cả nhà. Nhà mình giúp em công thức trong excel để có thể tăng số thứ tự như trong mẫu với ah.
1716388233367.png
 
Nếu là 5 cột, tại vị trí đầu tiên
B3 =(ROW(A1)-1)*5+COLUMN(A1)
kéo sang phải thêm 4 cột, kéo xuống tùy ý

1716388756133.png
 
Nếu là Excel 365 thì dùng hàm Sequence, 1 ô duy nhất

1716389067100.png
 
Có lẽ em đi sai hướng, cả nhà xem file giúp em được không ah.
Chuyển dữ liệu từ vùng Data sang vùng Đích nếu thỏa mãn điều kiện lớn hơn bằng cột Min và nhỏ hơn bằng cột max.
 

File đính kèm

  • Hoi GPE.xlsx
    12.2 KB · Đọc: 13
Thêm một cách khác. .
=COLUMN(A1)+(ROW(A1)-1)*4
...
Bài này chỉ là ứng dụng của con toán tính dòng cột của một phần tử trong mảng 2 chiều.
Con tính này là con toán căn bản của mảng, cho nên cách nào gần căn bản hơn thì đúng hơn.

Về hiệu quả thì phải biết Excel lập mảng theo cột-dòng (colunm-wise) hay dòng-cột (row-wise) mới tối ưu hóa được.
 
Về hiệu quả thì phải biết Excel lập mảng theo cột-dòng (colunm-wise) hay dòng-cột (row-wise) mới tối ưu hóa được.
Hiện tượng:
Trong VBA nếu dùng For Each Cll In Range("A1:E20") thì code chạy hết 1 dòng rồi mới sang dòng khác
Trong 1 range nếu vùng dữ liệu đã format as table, đứng tại ô đầu tiên và nhấn tab liên tục (không enter), thì sẽ chạy hết dòng rồi tự động xuống ô đầu tiên của dòng kế. Nếu là ô cuối của dòng cuối sẽ tự động tạo thêm dòng cho table.
Vậy gọi là colunm-wise hay row-wise?
Cái này là tôi hỏi thiệt vì không biết nghĩa của thuật ngữ chính thức.
 
Nếu tôi nhớ không lầm thì VBA dùng column-wise. Trong bộ nhớ array được ghi hết các rows trước khi sang dòng khác:

1716396712548.png
Một số người cho rằng vì vậy ghi/đọc theo column-wise nhanh hơn. Một số không màng bới vì bộ nhớ bây giờ có cache rất lớn, cách biệt rất nhỏ.
Phương pháp mà nhiều người ở GPE này hay dùng (vòng lặp j bên trong i) chính là cách truy cập column-wise cho nên các bạn ở đây không cần phải xem lại code mình.

Tôi không rõ trong bảng tính, Excel có đổi lại cách đọc/ghi hay không. Tôi đoán là có, bởi vì code sau đây cho ra khác.

Trong vòng lặp thứ nhất. Excel đọc range theo quy luật đọc container Cells: nếu range 2 chiều, cell thứ hai là phần tử đứng kề bên phải phần tử thứ nhất, chứng tỏ khi gộp tên cells, container Cells đã ghi chúng theo row-wise.
Trong vòng lặp thứ hai, VBA gặp truy cập range qua thuộc tính Value. Thuộc tính này chuyển range thành mảng 2 chiều cho nên nó tùy tiện theo luật mảng của nó.
(bạn có nhớ muốn Value trả về mảng 1 chiều thì phải dùng hàm Application.Transpose?)


1716397935081.png

Chú thích cho các bạn thích tìm hiểu về LTHĐT:
Thuật ngữ For Each là một ngữ pháp đổi mới theo tinh thần HĐT. Nó tùy theo kiểu của biểu thức đi ngay sao từ khóa IN mà quyết định duyệt cái 'container' trong biểu thức đó.
Trong code trên, nó tự biết [a1:c2] là một range, và [a1:c2].Value là một mảng.
 
Lần chỉnh sửa cuối:
Có lẽ em đi sai hướng, cả nhà xem file giúp em được không ah.
Chuyển dữ liệu từ vùng Data sang vùng Đích nếu thỏa mãn điều kiện lớn hơn bằng cột Min và nhỏ hơn bằng cột max.
Có 2 loại công thức:

1. Công thức từng vùng, ô đầu tiên của mỗi vùng, thay minmax cho từng vùng

=IFERROR(AGGREGATE(15,6,$J$3:$U$6/($J$3:$U$6>=Min)/($J$3:$U$6<=max),ROW(A1)*4-4+COLUMN(A1)),"")

2. Công thức trong E3, dùng cho nhiều vùng.
.
 
Web KT
Back
Top Bottom