Tạo 1 dảy số tự nhiên liên tục từ 1 đến 100000

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Như ta đã biết, để tạo 1 dảy số từ 1 đến 500 thì ta dùng:
ROW($1:$500)
Với Excel2003 trở về trước, do giới hạn row = 65536 nên chỉ có thể tạo được 1 dảy tối đa từ 1 đến 65536 mà thôi
Vậy xin hỏi: Để tạo 1 dảy số tự nhiên liên tiếp từ 1 đến 100000 thì ta sẽ dùng công thức thế nào?
NDU
 
Như ta đã biết, để tạo 1 dảy số từ 1 đến 500 thì ta dùng:
ROW($1:$500)
Với Excel2003 trở về trước, do giới hạn row = 65536 nên chỉ có thể tạo được 1 dảy tối đa từ 1 đến 65536 mà thôi
Vậy xin hỏi: Để tạo 1 dảy số tự nhiên liên tiếp từ 1 đến 100000 thì ta sẽ dùng công thức thế nào?
NDU
Vì Excel2003 chỉ có 65536dòng nên bắt buộc phải sang cột thứ hai thôi bạn à hoặc chuyển sang MO 2007 thôi.
Còn cách tạo dãy số thì cũng có nhiều cách nhưng cụ thể ứng dụng thế nào ?
Ví dụ 1 dạng :
=ROW()+(COLUMN()-1)*65536

TDN
 
Vì Excel2003 chỉ có 65536dòng nên bắt buộc phải sang cột thứ hai thôi bạn à hoặc chuyển sang MO 2007 thôi.
Còn cách tạo dãy số thì cũng có nhiều cách nhưng cụ thể ứng dụng thế nào ?
Ví dụ 1 dạng :
=ROW()+(COLUMN()-1)*65536

TDN
Ý tôi là vầy:
Tạo 1 dảy số nằm trong Define name sao cho tôi có thể truy xuất được
Chẳng hạn:
LARGE(Dayso,1) = 100000
hoặc
SMALL(Dayso,1) = 1
vân vân
 
Ý tôi là vầy:
Tạo 1 dảy số nằm trong Define name sao cho tôi có thể truy xuất được
Chẳng hạn:
LARGE(Dayso,1) = 100000
hoặc
SMALL(Dayso,1) = 1
vân vân
Vậy bạn hãy đặt 1 Name Dayso với công thức sau xem có đúng ý không nhé :
=ROW($1:$50000)+(COLUMN($A:$B)-1)*50000

Nếu đúng ý thì cứ vậy mà bạn tạo 1 dãy số bao nhiêu cũng được

TDN
 
Vậy bạn hãy đặt 1 Name Dayso với công thức sau xem có đúng ý không nhé :
=ROW($1:$50000)+(COLUMN($A:$B)-1)*50000

Nếu đúng ý thì cứ vậy mà bạn tạo 1 dãy số bao nhiêu cũng được

TDN

Như vậy anh có thể giải thích giúp +(COLUMN($A:$B)-1)*50000 là gì không anh tedaynui ơi!
Tại sao lại cộng mà không phải là nhân hoặc và (&)

Ps: Hôm nào rảnh mời anh ghé 33 Chu Văn An nhé! Anh em mình lai rai đàm đạo! Hihi
 
Lần chỉnh sửa cuối:
Như vậy đặt Name như thế này đơn giản, dễ hiểu nữa anh tedaynui ơi!

Mã:
=ROW(Sheet1!$1:$50000)+50000

hic, ca_dafi xem lại đi. thế này thì được dãy số từ 50001 đến 100000

Đặt name như bác tedaynui là chuẩn, đạt yêu cầu từ 1 đến bao nhiêu thì tùy theo mục đích của mình
 
hic, ca_dafi xem lại đi. thế này thì được dãy số từ 50001 đến 100000

Đặt name như bác tedaynui là chuẩn, đạt yêu cầu từ 1 đến bao nhiêu thì tùy theo mục đích của mình

Vâng, mình nhầm. Nhưng mình chưa hiểu chỗ cái column. Xin giải thích giúp! Cảm ơn trước nhé
 
Vâng, mình nhầm. Nhưng mình chưa hiểu chỗ cái column. Xin giải thích giúp! Cảm ơn trước nhé
He he he, ?/-*+/?/-*+/?/-*+/?
----------------------------------------------
Vâng, mình nhầm. Nhưng mình chưa hiểu chỗ cái column. Xin giải thích giúp! Cảm ơn trước nhé
Hic, cũng như ca_dafi thôi, cái này cần được bác tedaynui giải thích giùm

Láng máng hình dung là thế này
PHP:
=ROW($1:$50000)+(COLUMN($A:$B)-1)*50000
ROW($1:$50000) tạo ra 1 cột các số từ 1 ---> 50000 (mảng 1)

(COLUMN($A:$B)-1)*50000
= (COLUMN($A)-1)*50000 + (COLUMN$B)-1)*50000
= (1-1)*50000 + (2-1)*50000 tạo ra 2 cột mà cột 1 toàn là số 0, cột 2 toàn là số 50000 (mảng 2 - gồm 2 cột)

ROW($1:$50000)+(COLUMN($A:$B)-1)*50000 phép cộng (mảng 1) + (mảng 2) như sau:
Cột 1 các số từ 1 ---> 50000 + thêm với số 0,
Cột 2 các số từ 1 ---> 50000 + thêm với số 50000
Kết quả (mảng 1) + (mảng 2) gồm 2 cột:cột 1 các số từ 1 ---> 50000, cột 2 các số từ 50001 ---> 100000
để có dãy số từ 1 ---> 100000

Không biết như vậy có đúng không? Mong các bác chỉ giúp thêm
 
Lần chỉnh sửa cuối:
Thử giải thích xem đúng không:
Đây là phép cộng mảng:
- row($1:$50.000) cho 1 mảng dọc 50.000 giá trị từ 1 đến 50.000
- (column($A:$B)-1)*50.000 cho 1 mảng 2 chiều (2 cột, 50.000 dòng ) có các giá trị: 50.000 phần tử cột 1 có giá trị 0, 50.000 phần tử cột 2 có giá trị 50.000
- Phép cộng: mỗi phần tử của mảng thứ nhất cộng với phần tử tương ứng ở cột thứ nhất của mảng thứ hai cho 50.000 giá trị từ 1 đến 50.000. Tiếp đến mỗi phần tử của mảng 1 lại cộng với các phần tử tương ứng ở cột 2 của mảng thứ 2 cho các giá trị từ 50.001 đến 100.000

Vậy có thể:
- tạo mảng thứ hai là {0,1}*50.000 cũng có kết quả tương đương
- nếu tạo mảng thứ 2 là (column($A:$C)-1)*50.000 hoặc {0,1,2}*50.000 sẽ cho mảng chính có 150.000 phần tử

Đúng sai phải nhờ Thầy Phước :D

Thực nghiệm lại, mảng mới tạo thành theo cách thầy Phước là mảng 2 chiều. Xem file kèm theo, có thực nghiệm với mảng {0\1} và mảng {0\1\2}
 

File đính kèm

Lần chỉnh sửa cuối:
Thấy hỗ thẹn quá. Nghĩ sao em làm vậy, giải thích như anh ptm là quá cặn kẽ rồi.

Thân
 
Chân thành cảm ơn, tôi cũng đang làm theo cách này!
Đáng tiếc là ta buộc phải tạo 1 mãng 2 chiều sao cho tổng số phần tử trong mãng đúng = 100000
Tôi tìm đủ các cách vẫn không sao tạo được mãng 1 chiều 100000 phần tử
Chả lẽ không có cách?
 
Nên sử dụng VBA bạn ạ!!
Ngoài sở thích ra thì người ta còn cần chú ý đến cả tính hiệu quả nữa.

Những công thức của bạn rất sáng tạo và đáng giá. Nhưng để giải những bài toán như vậy thì dùng công thức rất mệt mỏi và không phải ai cũng làm được.
Tuy nhiên nếu dùng VBA thì vấn đề lại trở nên cực kỳ dễ dàng, dĩ nhiên là không khó.
Đó là sự hiệu quả.

Tôi nói ra không nhằm nói rằng VBA hơn hay công thức hơn, mà chỉ muốn tính đến sự hiệu quả của vấn đề thôi (cũng như sự phổ cập của nó)

Nếu có làm bạn bận tâm thì mong hãy bỏ qua!
Thân!
 
Đương nhiên tôi biết VBA có khả năng là được điều này, và nhất là người phát biểu lại chính là bạn
Tôi cũng biết VBA gần như giãi quyết được mọi yêu cầu trong Excel trong khi công thức thì chưa chắc làm được
Nhưng chỉ là nghiên cứu chơi thôi mà
Có đôi lúc 1 chuyện cỏn con mà phải VBA thì thật không đáng
Thật ra tôi nêu bài toán này lên GPE không nhằm giãi quyết bất cứ vấn đề gì của cá nhân cả, chỉ là bất chợt nghĩ ra "Tại sao cái này, tại sao cái kia"
VBA hay công thức gì cũng tốt cả. Tôi yêu thích nét đẹp trong các giãi pháp
 
Lần chỉnh sửa cuối:
Thấy hỗ thẹn quá. Nghĩ sao em làm vậy, giải thích như anh ptm là quá cặn kẽ rồi.
Mình cũng còn sai TDN ơi. Sai chỗ này:
- (column($A:$B)-1)*50.000 cho 1 mảng 2 chiều (2 cột, 50.000 dòng ) có các giá trị: 50.000 phần tử cột 1 có giá trị 0, 50.000 phần tử cột 2 có giá trị 50.000

(column($A:$B)-1)*50.000 chỉ cho 1 mảng ngang 2 phần tử 0 và 50.000

Phép cộng phải giải thích lại: Mỗi phần tử của mảng 1 lần lượt cộng với 2 phần tử của mảng 2 cho ra 2 giá trị của mảng mới, mỗi giá trị nằm ở 1 cột --> mảng mới 2 chiều!
 
Mình xin minh họa một VD nhỏ để dễ hiểu :
Ta có một mảng dọc có 10 phần tử từ 1->10 :
ROW(1:10) <=> {1;2;3;4;5;6;7;8;9;10}
Để tăng số phần tử trong mảng lên gấp đôi từ 1->20 thì ta tạo ra một mảng 2 chiều gồm hai mảng dọc 1 chiều :
{1;2;3;4;5;6;7;8;9;10} và {11;12;13;14;15;16;17;18;19;20}
Với :
ROW(1:10)+{0} <=> {1;2;3;4;5;6;7;8;9;10}
ROW(1:10)+{10} <=> {11;12;13;14;15;16;17;18;19;20}
Như vậy :
ROW(1:10)+{0,10} <=> {1;2;3;4;5;6;7;8;9;10} và {11;12;13;14;15;16;17;18;19;20}
hay :
ROW(1:10)+{0,10} <=> {1,11;2,12;3,13;4,14;5,15;6,16;7,17;8,18;9,19;10,20}
 
Như vậy, với yêu cầu đề bài #1, viết như thế này thì dễ hiểu hơn phải không các anh chị ?!:

Mã:
=Row($1:$50000)+{0,50000}
 
Như vậy, với yêu cầu đề bài #1, viết như thế này thì dễ hiểu hơn phải không các anh chị ?!:


Code:
=Row($1:$50000)+{0,50000}
Chính phải, vì mình khi tự nghi ngờ mình sai, đã thực nghiệm như thế mới biết bản thân sai chỗ nào.
 
Như vậy, với yêu cầu đề bài #1, viết như thế này thì dễ hiểu hơn phải không các anh chị ?!:

Mã:
=Row($1:$50000)+{0,50000}

Đúng rồi. Nếu muốn kiểm tra thì anh test thử bằng 4 công thức sau :
{=SUM(((ROW(1:50000)+{0,50000})>0)*1)} = 100.000 (số phần tử trong mảng)
{=MAX((ROW(1:50000)+{0,50000}))} = 100.000 (phần tử cuối cùng)
{=MIN((ROW(1:50000)+{0,50000}))} = 1 (phần tử đầu tiên)
{=LARGE((ROW(1:50000)+{0,50000}),50000)-LARGE((ROW(1:50000)+{0,50000}),50001)} = 1 ( gia số giữa hai phần tử)
 
Mình thì kiểm tra cách này, như trong file, ô nào #N/A là không phải nằm trong mảng.
Ghi chú: Chú ý mảng ngang và mảng dọc để kiểm tra cho đúng
 

File đính kèm

Minh họa tổng quát nhất về mãng 2 chiều nằm tại các file LỊCH ấy: mãng 2 chiều 42 cell = 7 cột * 6 dòng
Hiểu thì thấy dể, còn không hiểu thì cứ là không tài nào hiểu được (vì thấy nó trừu tượng)
Nhưng ý đồ của tôi vẩn là mãng 1 chiều 100000 phần tử (chắc khó mà thực hiện được quá)
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom