Xin giúp đỡ điền số ngẫu nhiên từ 1 đến 1048576 cho bảng có kích thước bằng một Sheet!

Liên hệ QC

Thư Sinh Áo Trắng

Thành viên hoạt động
Tham gia
26/3/21
Bài viết
160
Được thích
31
- Em cần kiểm tra một số hàm trong lớp Application (VBA) để biết giới hạn phần tử của nó. Nên cần tạo ra bảng dữ liệu có kích thước 1.048.576 hàng với 16.384 cột ( bằng kích thước của Sheet trong Excel 2013, ở phiên bản khác thì số cột và hàng lớn hơn nhỏ hơn em cũng chưa rõ).
- Em dùng hàm Rand()*1048576 nhưng oải quá. Thử qua làm bằng VBA thì lại Not Responding. Kết quả là cần một sheet tất cả các ô chưa số ngẫu nhiên từ 1 đến 1048576 mà chưa tạo ra được.
Mong các bác giúp em tạo ra một Sheet trong đó các ô chưa số ngẫu nhiên từ 1 đến 1048576 với ạ! Em xin cảm ơn!
 
Lần chỉnh sửa cuối:
Máy chịu nổi không ấy chứ, giả sử tất cả là số 1 (đơn giản nhất và không phải công thức) cũng đã mệt rồi.

1621680664836.png
 
Upvote 0
Máy chịu nổi không ấy chứ, giả sử tất cả là số 1 (đơn giản nhất và không phải công thức) cũng đã mệt rồi.
Tất cả là 1# (Double) hoặc 0 đến 1 cũng được ạ! Tại vì sợ công cốc nên phải kiểm tra giới hạn phần tử các hàm định dùng trong VBA nên cần bảng dữ liệu này! Bác giúp em với ạ! Cho em xin code em chạy trên máy em được ạ!
 
Upvote 0
- Em cần kiểm tra một số hàm trong lớp Application (VBA) để biết giới hạn phần tử của nó. Nên cần tạo ra bảng dữ liệu có kích thước 1.048.576 hàng với 16.384 cột ( bằng kích thước của Sheet trong Excel 2013, ở phiên bản khác thì số cột và hàng lớn hơn nhỏ hơn em cũng chưa rõ).
- Em dùng hàm Rand()*1048576 nhưng oải quá. Thử qua làm bằng VBA thì lại Not Responding. Kết quả là cần một sheet tất cả các ô chưa số ngẫu nhiên từ 1 đến 1048576 mà chưa tạo ra được.
Mong các bác giúp em tạo ra một Sheet trong đó các ô chưa số ngẫu nhiên từ 1 đến 1048576 với ạ! Em xin cảm ơn!
Bạn thử chạy sub này:

Mã:
Public Function MyRandom()
Dim Arr(1 To 1, 1 To 16384)
Dim i As Long
Randomize
For i = 1 To 16384
    Arr(1, i) = Int(Rnd() * 16384) + 1
Next i
MyRandom = Arr
End Function


Sub test()
Dim r As Long
For r = 1 To 1048576
    Range("A" & r).Resize(1, 16384).Value = MyRandom()
Next r
End Sub
 
Upvote 0
Bạn thử chạy sub này:

Mã:
Public Function MyRandom()
Dim Arr(1 To 1, 1 To 16384)
Dim i As Long
Randomize
For i = 1 To 16384
    Arr(1, i) = Int(Rnd() * 16384) + 1
Next i
MyRandom = Arr
End Function


Sub test()
Dim r As Long
For r = 1 To 1048576
    Range("A" & r).Resize(1, 16384).Value = MyRandom()
Next r
End Sub
Em cũng thắc mắc mà chưa tìm hiểu được. Mong được bác và các anh chỉ cho! Là: Bảng có kích thước 1.048.576 hàng với 16.384 , các Cells điền số 1. Vậy File đó nặng bao nhiêu Mê?
Cảm ơn bác! @phuocam với code "Tự nhảy qua ngày mới khi đến 0h"
 
Upvote 0
Em cũng thắc mắc mà chưa tìm hiểu được. Mong được bác và các anh chỉ cho! Là: Bảng có kích thước 1.048.576 hàng với 16.384 , các Cells điền số 1. Vậy File đó nặng bao nhiêu Mê?
Cảm ơn bác! @phuocam với code "Tự nhảy qua ngày mới khi đến 0h"
Máy tôi chạy được 40 cột x 1 triệu số Random là hết sức: 565 Mb
Nếu toàn số 1 (40 triệu): 117 Mb
Bài đã được tự động gộp:

Bạn thử chạy sub này:
Code này chạy 2 ngàn dòng (hơn 33 triệu) chậm hơn hàm RandArray của excel 365 (40 triệu)
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
- Em cần kiểm tra một số hàm trong lớp Application (VBA) để biết giới hạn phần tử của nó. Nên cần tạo ra bảng dữ liệu có kích thước 1.048.576 hàng với 16.384 cột ( bằng kích thước của Sheet trong Excel 2013, ở phiên bản khác thì số cột và hàng lớn hơn nhỏ hơn em cũng chưa rõ).
- Em dùng hàm Rand()*1048576 nhưng oải quá. Thử qua làm bằng VBA thì lại Not Responding. Kết quả là cần một sheet tất cả các ô chưa số ngẫu nhiên từ 1 đến 1048576 mà chưa tạo ra được.
Mong các bác giúp em tạo ra một Sheet trong đó các ô chưa số ngẫu nhiên từ 1 đến 1048576 với ạ! Em xin cảm ơn!
Ram máy bạn là bao nhiêu
 
Upvote 0
Đã 25 phút chạy code chưa xong. Hic toang nặng rồi. Vậy cỡ hàng trăm G mất.

Ram máy bạn là bao nhiêu
4G ạ. Chip core i5
Bài đã được tự động gộp:

Rất dại dột. Chỉ thử từ hàng vài ngàn dòng rồi tăng từ từ, quất 20 ngàn dòng đã phải khóc rồi. Chơi lớn triệu dòng!
Hỏng rồi bác ạ. Lỗi rồi. 25 phút báo lỗi chụp màn hình cũng không cho mở Pain nên để lưu ảnh.
Chắc em nghĩ cách khác để test hàm em định dùng. Em cảm ơn ạ!
Em cảm ơn các bác đã hỗ trợ!
 
Upvote 0
Bạn thử lấy số phần tử của mảng nhân với kích thước biến double xem dung lương la bao nhiêu
Em chưa hiểu cách tính ra dung lượng file anh ạ
Bài đã được tự động gộp:

Chơi lớn quá. Máy dễ đột tử như chơi. --=0
Liệu nó báo lỗi rồi dừng, hay là cháy máy bác nhỉ. Để em còn lưu dư liệu vào chỗ khác.
 
Upvote 0
Upvote 0
Biến double có kích thươc 8 byte, mảng của bạn = 8*1048576*16384 byte
như vậy 1 và 1# khác nhau byte phải không ạ! Vậy nếu em điền số 1 vào tất cả các Cells trên Sheets thì bằng (1/8)*1048576*16384 bác nhỉ. rồi đổi ra G hay M cho dễ nhìn phải không ạ!
Bài đã được tự động gộp:

Bạn thử chạy sub này:
Untitled.jpg
May quá kho cháy máy! Em khỏi động mãi mới nổi
Em chạy 25 phút sau báo lỗi như này!
Do phần cứng máy không chịu nổi bác nhỉ?
 
Upvote 0
như vậy 1 và 1# khác nhau byte phải không ạ! Vậy nếu em điền số 1 vào tất cả các Cells trên Sheets thì bằng (1/8)*1048576*16384 bác nhỉ. rồi đổi ra G hay M cho dễ nhìn phải không ạ!
Bạn thử tạo 1 mảng có kích thươc như vậy trong VBA xem máy có nhận không rồi hãy tính tiếp
 
Upvote 0
Thớt cần về học lại về căn bản biến và các loại số trong VBA trước khi tiếp tục bày những trò vớ vẩn hoa lá cành như vầy.

Long cần 4 bytes, Double cần 8 bytes. Số nguyên chỉ hơn triệu thì chỉ cần Long là đủ. Double vừa tốn bộ nhớ vừa tốn năng lượng. Trừ phi điều kiện cần Double (123.45 thay vì 12345)

như vậy 1 và 1# khác nhau byte phải không ạ! Vậy nếu em điền số 1 vào tất cả các Cells trên Sheets thì bằng (1/8)*1048576*16384 bác nhỉ. rồi đổi ra G hay M cho dễ nhìn phải không ạ!
Học toán ở đâu vậy?

- Em cần kiểm tra một số hàm trong lớp Application (VBA) để biết giới hạn phần tử của nó. ...
Cần học cho rõ định nghĩa không gian ngữ cảnh. Application ở đây là Excel chứ không phải VBA. Language và platform mới là VBA/VBE.
 
Upvote 0
Thớt cần về học lại về căn bản biến và các loại số trong VBA trước khi tiếp tục bày những trò vớ vẩn hoa lá cành như vầy.

Long cần 4 bytes, Double cần 8 bytes. Số nguyên chỉ hơn triệu thì chỉ cần Long là đủ. Double vừa tốn bộ nhớ vừa tốn năng lượng. Trừ phi điều kiện cần Double (123.45 thay vì 12345)


Học toán ở đâu vậy?


Cần học cho rõ định nghĩa không gian ngữ cảnh. Application ở đây là Excel chứ không phải VBA. Language và platform mới là VBA/VBE.
- Cảm ơn bác nhé. Phải xem lại các biến mới được.
- Thật ra em muốn kiểm tra xem mấy hàm trong VBA trong Application có tên là Transpose và hàm MMult. Để kiểm tra giới hạn lớn nhất của hàm em muốn sử dụng có trong Application được thì phải tạo ra bảng dữ liệu có 1.048.576 hàng và 16.384 cột, vì nó nó to bằng 1 sheets mới gọi là max được,gọi là X. Giờ em nghĩ test bằng cách số hàng bằng số cột +1 là được rồi. Để xem tình huống MMULT(Transpose(X),X)) có ra được một ma trận kích thước 16384 x16384 được hay không?
- Bác có thể giúp kiểm tra tình huống trên giúp em với.
Bài đã được tự động gộp:

Biến double có kích thươc 8 byte, mảng của bạn = 8*1048576*16384 byte
Hơn 137 Gb file có 1 sheet và các cells là giá trị Double bác, em phải tính xem sao kẻo bác @VetMini bác ấy mắng chết.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom