Tô màu bằng VBA

Liên hệ QC

Ngô Hải Đăng

Thành viên hoạt động
Tham gia
31/8/17
Bài viết
183
Được thích
247
Giới tính
Nam
Mình có 1 vùng dữ liệu gồm 360 hàng và 480 cột, mỗi ô chứa 1 giá trị màu. Cho mình hỏi là có cách nào tô màu nhanh vùng dữ liệu này ngoài cách dùng vòng lặp For và tô màu từng ô không? Vì nếu kích thước dữ liệu là 1000 x 1000 thì tô từng ô rất lâu.
 

File đính kèm

  • To Mau.xlsx
    1.1 MB · Đọc: 54
Mình có 1 vùng dữ liệu gồm 360 hàng và 480 cột, mỗi ô chứa 1 giá trị màu. Cho mình hỏi là có cách nào tô màu nhanh vùng dữ liệu này ngoài cách dùng vòng lặp For và tô màu từng ô không? Vì nếu kích thước dữ liệu là 1000 x 1000 thì tô từng ô rất lâu.
Code tô màu cũ của bạn đâu cho lên đây xem nào.
 
Upvote 0
Thay vì tô từng ô, bạn tô hẵn 1 cụm ô; Lúc đó tốc độ sẽ phụ thuộc vô cụm ô là bao lớn
Ví dụ:

For J = 1 to 10^3 Step 100
For W = 1 to 10^3 Step 100

Next W
Next J
 
Upvote 0
Mục đích tô mầu từng ô?

Trang tính đâu phải búp bê mà tô mầu, phấn son lòe loẹt, tạo nghìn dáng bốc lửa như khi đi thi hoa hậu. Vài hôm lại kêu là tập tin ì ạch.
 
Upvote 0
Bài toán này thực ra là có 2 phần. Phần 1 là lấy giá trị màu của từng pixel vô từng ô (Mình đã làm được). Còn phần 2 là tô màu, mình cũng làm được nhưng không biết có cách nào để tô nhanh hơn không, tô từng ô thì gặp những bức hình lớn thì nó chạy rất lâu.
 
Upvote 0
Màu trong một bức tranh sẽ có nhiều chỗ giống nhau, nếu vậy thì tô màu tất cả các ô cùng màu một lúc thì chắc tốc độ sẽ tăng thêm khoảng 500%
 
Upvote 0
Bài toán này thực ra là có 2 phần. Phần 1 là lấy giá trị màu của từng pixel vô từng ô (Mình đã làm được). Còn phần 2 là tô màu, mình cũng làm được nhưng không biết có cách nào để tô nhanh hơn không, tô từng ô thì gặp những bức hình lớn thì nó chạy rất lâu.
Lúc bạn lấy giá trị màu đặt xuống cell sao bạn không tô màu lúc đó luôn?
 
Upvote 0
Upvote 0
Làm sao biết những ô nào cùng màu để gom? (trong số 1 triệu ô?)
Thì cứ hớn hở mả duyệt từng phần tử trong mảng thui. bạn nào cuồng đít sần sài cũng được, ai đam mê ado chắc cũng nghĩ ra một cái tuyệt chiêu nào nào đó.
Bài đã được tự động gộp:

nhiều ô mà sợ không khỏe thì chắc chia nhỏ theo lô khoảng 10000 ô, sau đó làm trên 10000 ô
 
Upvote 0
Thì cứ hớn hở mả duyệt từng phần tử trong mảng thui. bạn nào cuồng đít sần sài cũng được, ai đam mê ado chắc cũng nghĩ ra một cái tuyệt chiêu nào nào đó.
nhiều ô mà sợ không khỏe thì chắc chia nhỏ theo lô khoảng 10000 ô, sau đó làm trên 10000 ô
Phải biết suy nghĩ 1 chút. Dù chỉ 100 ô màu ngẫu nhiên như đề bài cũng không có cách nào biết ô nào giống ô nào để mà gom, ngoại trừ việc chạy vòng lặp duyệt qua đủ 100 ô đó.
Duyệt rồi gom hay duyệt bỏ vô Dic thì trong quá trình duyệt tô màu phứt cho xong. Mà có phải cơ sở dữ liệu đâu mà ADO? Giả sử đưa được vào ADO rồi có thoát khỏi chạy vòng lặp không?
(Trong khi đề bài muốn hỏi cách không dùng vòng lặp)
Có cách không chạy luôn, đó là thay vì gán số xuống thì tô màu luôn trong phần 1 như @ndu96081631 nói
 
Upvote 0
Lúc bạn lấy giá trị màu đặt xuống cell sao bạn không tô màu lúc đó luôn?
Có cách không chạy luôn, đó là thay vì gán số xuống thì tô màu luôn trong phần 1 như @ndu96081631 nói
Lúc lấy giá trị màu xuống Cell em cũng dùng vòng lặp For mà gán vô mảng 2 chiều trước nên tốc độ nhanh hơn. Có cách để code tô màu chạy nhanh hơn là tắt ScreenUpdate do lệnh Interior.Color thao tác lên màn hình nên làm chậm code, mà em thì lại muốn giữ ScreenUpdate (có vẻ hơi mâu thuẫn).
Màu trong một bức tranh sẽ có nhiều chỗ giống nhau, nếu vậy thì tô màu tất cả các ô cùng màu một lúc thì chắc tốc độ sẽ tăng thêm khoảng 500%
Chắc sẽ suy nghĩ theo cách này.
 
Upvote 0
Lúc lấy giá trị màu xuống Cell em cũng dùng vòng lặp For mà gán vô mảng 2 chiều trước nên tốc độ nhanh hơn. Có cách để code tô màu chạy nhanh hơn là tắt ScreenUpdate do lệnh Interior.Color thao tác lên màn hình nên làm chậm code, mà em thì lại muốn giữ ScreenUpdate (có vẻ hơi mâu thuẫn).
Giữ screen update làm gì, nếu giữ thì chậm là chắc

Còn không giữ thì cũng chậm, vì tranh nhiều cells
Tuy thế 1 bức tranh thì phải chấp nhận, có những cái phải chấp nhận mất thời gian vì nó là hiển thị, so với làm tay còn nhanh hơn nhiều
Muốn nhanh thì hợp lại thành BMP hay JPG rồi gán xuống (thế lại thành bài toán ngược lại, cần chi gỡ ra cells)
 
Upvote 0
Giữ screen update làm gì, nếu giữ thì chậm là chắc

Còn không giữ thì cũng chậm, vì tranh nhiều cells
Tuy thế 1 bức tranh thì phải chấp nhận, có những cái phải chấp nhận mất thời gian vì nó là hiển thị, so với làm tay còn nhanh hơn nhiều
Muốn nhanh thì hợp lại thành BMP hay JPG rồi gán xuống (thế lại thành bài toán ngược lại, cần chi gỡ ra cells)
Một cách khác không cần làm gì cả, chỉ cần.. tốn tiền là phải có 1 máy tính mạnh. Như máy tôi: core i5 thế hệ 8 + ram 8GB ---> Code chạy trong tích tắc
 
Upvote 0
Một cách khác không cần làm gì cả, chỉ cần.. tốn tiền là phải có 1 máy tính mạnh. Như máy tôi: core i5 thế hệ 8 + ram 8GB ---> Code chạy trong tích tắc
Anh có cách chẳng cần vòng lặp gì cả, nhưng bây giờ bận tiếp bạn bè rồi, mai rảnh anh em mình uống coffee bàn tiếp.
 
Upvote 0
Upvote 0
Upvote 0
Mình có 1 vùng dữ liệu gồm 360 hàng và 480 cột, mỗi ô chứa 1 giá trị màu. Cho mình hỏi là có cách nào tô màu nhanh vùng dữ liệu này ngoài cách dùng vòng lặp For và tô màu từng ô không? Vì nếu kích thước dữ liệu là 1000 x 1000 thì tô từng ô rất lâu.
Bạn tham khảo file này xem!
nguồn: https://ramblings.mcpher.com/download-complete-projects/downloads/
 

File đính kèm

  • tomau.xlsm
    2.1 MB · Đọc: 45
Upvote 0
Web KT

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

Back
Top Bottom