Cách nào loại bỏ giá trị rỗng trong mảng ? (1 người xem)

  • Thread starter Thread starter boma
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

boma

Thành viên mới
Tham gia
8/12/06
Bài viết
43
Được thích
5
Giới tính
Nữ
-Mình có một Form dùng để in như trong file đính kèm. Ở sheet "Form_in" khi mình gõ điều kiện vào các ô AA5, AB5, AC5, thì tự điền dữ liệu vào form (cái này dự định vì mình chưa làm nút bấm để kích hoạt code). Sheet "Data" là nơi chứa dữ liệu.
- Phần màu thể hiện trong 9 khung bên tay phải của form, mỗi khung là một màu. Mỗi một mã hàng thì có một công thức chính và nhiều màu (Xanh, vàng, đỏ cam...), số lượng màu của mỗi mã là không giống nhau, có mã 1 màu, có mã tới 7 màu tùy theo yêu cầu.
- Phần điền nguyên liệu mò mẫm tham khảo khắp diễn đàn thì mình đã làm được (mình không đưa vào file này vì sợ các bạn bị phân tâm) nhưng phần màu thì mình bí, nhờ các bạn gợi ý code giúp các ý tưởng sau :

* Truy vấn ở phần Màu bên Data theo hàng ngang rồi bỏ đi các giá trị rỗng, sau đó gán qua ô màu bên "Form_in " theo chiều dọc. Đầu tiên nó gán tên màu (BL, R, Y....) vào ô trên cùng, sau đó gán tên và khối lượng của các chất hình thành nên màu đó từ dòng thứ 3 trở đi. Mỗi màu có không quá 5 thành phần nên mỗi khung màu mình cố định có 6 dòng để gán màu. Mỗi mã hàng có bao nhiêu màu thì nó điền vào bấy nhiêu đó khung. Điền đầy các khung màu theo hướng từ trái qua phải, từ trên suống dưới.

* Bên Form_in, những khung màu nào sau quá trình điền thông tin không có dữ liệu thì làm ẩn đi được không ?

Thanks các bạn đã đọc.
 

File đính kèm

-Mình có một Form dùng để in như trong file đính kèm. Ở sheet "Form_in" khi mình gõ điều kiện vào các ô AA5, AB5, AC5, thì tự điền dữ liệu vào form (cái này dự định vì mình chưa làm nút bấm để kích hoạt code). Sheet "Data" là nơi chứa dữ liệu.
- Phần màu thể hiện trong 9 khung bên tay phải của form, mỗi khung là một màu. Mỗi một mã hàng thì có một công thức chính và nhiều màu (Xanh, vàng, đỏ cam...), số lượng màu của mỗi mã là không giống nhau, có mã 1 màu, có mã tới 7 màu tùy theo yêu cầu.
- Phần điền nguyên liệu mò mẫm tham khảo khắp diễn đàn thì mình đã làm được (mình không đưa vào file này vì sợ các bạn bị phân tâm) nhưng phần màu thì mình bí, nhờ các bạn gợi ý code giúp các ý tưởng sau :

* Truy vấn ở phần Màu bên Data theo hàng ngang rồi bỏ đi các giá trị rỗng, sau đó gán qua ô màu bên "Form_in " theo chiều dọc. Đầu tiên nó gán tên màu (BL, R, Y....) vào ô trên cùng, sau đó gán tên và khối lượng của các chất hình thành nên màu đó từ dòng thứ 3 trở đi. Mỗi màu có không quá 5 thành phần nên mỗi khung màu mình cố định có 6 dòng để gán màu. Mỗi mã hàng có bao nhiêu màu thì nó điền vào bấy nhiêu đó khung. Điền đầy các khung màu theo hướng từ trái qua phải, từ trên suống dưới.

* Bên Form_in, những khung màu nào sau quá trình điền thông tin không có dữ liệu thì làm ẩn đi được không ?

Thanks các bạn đã đọc.
Đọc thấy khó hiểu làm sao ak. bạn cho ví dụ lên cái bảng đi. hoặc code trước cũng dc. rồi mọi người sửa giúp bạn.
 
Upvote 0
-Mình có một Form dùng để in như trong file đính kèm. Ở sheet "Form_in" khi mình gõ điều kiện vào các ô AA5, AB5, AC5, thì tự điền dữ liệu vào form (cái này dự định vì mình chưa làm nút bấm để kích hoạt code). Sheet "Data" là nơi chứa dữ liệu.
- Phần màu thể hiện trong 9 khung bên tay phải của form, mỗi khung là một màu. Mỗi một mã hàng thì có một công thức chính và nhiều màu (Xanh, vàng, đỏ cam...), số lượng màu của mỗi mã là không giống nhau, có mã 1 màu, có mã tới 7 màu tùy theo yêu cầu.
- Phần điền nguyên liệu mò mẫm tham khảo khắp diễn đàn thì mình đã làm được (mình không đưa vào file này vì sợ các bạn bị phân tâm) nhưng phần màu thì mình bí, nhờ các bạn gợi ý code giúp các ý tưởng sau :

* Truy vấn ở phần Màu bên Data theo hàng ngang rồi bỏ đi các giá trị rỗng, sau đó gán qua ô màu bên "Form_in " theo chiều dọc. Đầu tiên nó gán tên màu (BL, R, Y....) vào ô trên cùng, sau đó gán tên và khối lượng của các chất hình thành nên màu đó từ dòng thứ 3 trở đi. Mỗi màu có không quá 5 thành phần nên mỗi khung màu mình cố định có 6 dòng để gán màu. Mỗi mã hàng có bao nhiêu màu thì nó điền vào bấy nhiêu đó khung. Điền đầy các khung màu theo hướng từ trái qua phải, từ trên suống dưới.

* Bên Form_in, những khung màu nào sau quá trình điền thông tin không có dữ liệu thì làm ẩn đi được không ?

Thanks các bạn đã đọc.
Bạn muốn thế này (file đính kèm)
 

File đính kèm

Upvote 0
Bạn muốn thế này (file đính kèm)
Woh, kinh khủng thật, mình chỉ yêu cầu làm phần màu bạn làm luôn cho mình phần nguyên liệu nữa, đúng như ý luôn. Phần màu mình cần mã màu (BL14, A100...) và khối lượng của màu (cột gam) chứ không phải dòng Xanh 1, Xanh 2 gì đó..., mình nghĩ là code nhầm thôi để mình dò lại code, chắc có nhiều thứ để học hỏi đây. Thanks bạn rất nhiều.
 
Upvote 0
Woh, kinh khủng thật, mình chỉ yêu cầu làm phần màu bạn làm luôn cho mình phần nguyên liệu nữa, đúng như ý luôn. Phần màu mình cần mã màu (BL14, A100...) và khối lượng của màu (cột gam) chứ không phải dòng Xanh 1, Xanh 2 gì đó..., mình nghĩ là code nhầm thôi để mình dò lại code, chắc có nhiều thứ để học hỏi đây. Thanks bạn rất nhiều.
Đúng là nhầm đó.
sửa lại phần này : (Màu đỏ thành màu xanh)
--------------------------------------------------------------------------------------------
If data(j, h) <> "" Then
n = n + 1
MM(n, 1) = data(1, h): MM(n, 3) = data(j, h)
MM(n, 1) = data(j, h): MM(n, 3) = data(j, h + 1)
----------------------------------------------------------------------------------------------
 
Upvote 0
Xin nhờ @chucuoi92 giải nghĩa cho mấy câu về code trong file mà bạn đã viết :

1/ Dòng này + 10 để làm gì vì nếu ko có thì nó cũng tự chọn đến dòng cuối cùng có dữ liệu rồi
data = Sheet2.Range("C3:AX" & Sheet2.Range("C1048576").End(3).Row + 10)

2/ Các câu lệnh dưới không có lệnh nào để tăng giá trị k vậy để như vậy để làm gì ?

k = k + 1

3/ Xin giải thích giúp dòng này

.Range("K7").Offset(Int((k + 2) / 3) * 10 - 9, ((k - 1) Mod 3 + 1) * 5 - 4).Resize(8, 4) = MM

4/ Dòng lệnh nào trong đó có thể xóa và vẽ lại cái khung màu? Lúc đầu mình nghĩ là .ClearContents nhưng hình như không phải.
 
Upvote 0
Xem trả lời bài dưới.
 
Lần chỉnh sửa cuối:
Upvote 0
-------------------------------------------------------------
Hỏi:
1/ Dòng này + 10 để làm gì vì nếu ko có thì nó cũng tự chọn đến dòng cuối cùng có dữ liệu rồi

data = Sheet2.Range("C3:AX" & Sheet2.Range("C1048576").End(3).Row + 10)[/QUOTE]

Trả lời:
Vì for 2 lần
Lần 1 tìm thấy mã hàng, lần 2 for tiếp 10 dòng nữa.
Nếu mã hàng tìm thấy ở cuối bảng mà chỉ có vài màu(dòng) thì code lỗi cho nên cộng thêm vào data 10 dòng nữa.

---------------------------------------------------------------
Hỏi:
2/ Các câu lệnh dưới không có lệnh nào để tăng giá trị k vậy để như vậy để làm gì ?

k = k + 1

Trả lời:
mỗi lần tìm thấy mã màu thì tăng biến k lên 1
--------------------------------------------------------------

Hỏi:
3/ Xin giải thích giúp dòng này

.Range("K7").Offset(Int((k + 2) / 3) * 10 - 9, ((k - 1) Mod 3 + 1) * 5 - 4).Resize(8, 4) = MM

Trả lời:
Đây chỉ là cách tính toán vị trí để dán mảng MM vào đúng vị trí thôi mà.

mỗi lần biến k tăng lên 1 thì hàm int và mod tính toán để hàm offset() xác định được vị trí sau đó mở rộng theo chiều dọc, ngang (hàm Resize(8, 4)) để dán mảng MM vào.
------------------------------------------------------------------------

Hỏi:
4/ Dòng lệnh nào trong đó có thể xóa và vẽ lại cái khung màu? Lúc đầu mình nghĩ là .ClearContents nhưng hình như không phải.

Trả lời:
Phần này dùng conditional formatting để làm
Nếu muốn dùng luôn bằng code thì xóa conditional formatting và thêm vào code :
Màu xanh là thêm mới.
sub...
...
.Range("E11:J32,L8:Y35").ClearContents
.Range("L8:Y35").Borders.LineStyle = xlNone
...
.Range("K7").Offset(Int((k + 2) / 3) * 10 - 9, ((k - 1) Mod 3 + 1) * 5 - 4).Resize(8, 4) = MM

.Range("K7").Offset(Int((k + 2) / 3) * 10 - 9, ((k - 1) Mod 3 + 1) * 5 - 4).Resize(8, 4).Borders.Color = 1

 
Lần chỉnh sửa cuối:
Upvote 0
Giải pháp của bạn mình thấy độc đáo nhất là phần định dạng có điều kiện để ẩn hiện khung màu và dòng code điền dữ liệu vào khung màu. Sau khi "nghiên cứu" code thì nay mình quay lại xin hỏi thêm 2 câu :

1/Offset(Int((k + 2) / 3) * 10 - 9, ((k - 1) Mod 3 + 1) * 5 - 4)
dòng này là để xác định vị trí sẽ gán dữ liệu, vậy thì có thuật giải chung cho kiểu công thức định vị này không ( tất nhiên là sau đó cũng phải có gia giảm chút ít cho phù hợp nhưng chắc phải luôn có một thuật giải ban đầu nào đó chứ) ?

2/ Giờ mình tạo một form khác để nhập dữ liệu vào sheet data, form nhập này cấu trúc cũng y như là form in vậy. Vậy thì mình nên dùng Use Form hay dùng Sheet Form để làm ? Tại sao nên như vậy ?

Thanks các bạn đã quan tâm.
 
Upvote 0
Sau khi tham khảo thì mình quyết định dùng một sheet để tạo form nhập dữ liệu vào data vì nó có vẻ dễ code hơn. Bây giờ lại là bài toán ngược lại. Mình tạo một sheet "Form nhap" hình mẫu y như bên "Form in", sau khi nhập dữ liệu đầy đủ, bấm nút GHI thì dữ liệu sẽ ghi vào sheet data theo thứ tự từng hàng cho mỗi màu. Phần nguyên vật liệu thì mình làm được nhưng sang phần Màu thì bó tay vì không còn là mảng thông thường nữa mà còn có so chiếu vì :

- Đối với mỗi vùng Màu (phần khung nhỏ có 2 cột 8 hàng), sau khi ghi nhận các giá trị thì phải so sánh theo mã màu (A100, L4, M5 ...) để dịch chuyển nó về đúng cột của nó (VD : Đỏ đậm, Đỏ nhạt, Vàng đậm, Vàng nhạt....) bên data

Mình gởi lại file, bổ sung thêm sheet "List" mô tả các màu. Phần này nữa là xong bài toán nhưng "cao cấp" quá, ngoài khả năng tự tìm hiểu của mình rồi, mong các bạn giúp code để được học hỏi. Thanks
 

File đính kèm

Upvote 0
Sau khi tham khảo thì mình quyết định dùng một sheet để tạo form nhập dữ liệu vào data vì nó có vẻ dễ code hơn. Bây giờ lại là bài toán ngược lại. Mình tạo một sheet "Form nhap" hình mẫu y như bên "Form in", sau khi nhập dữ liệu đầy đủ, bấm nút GHI thì dữ liệu sẽ ghi vào sheet data theo thứ tự từng hàng cho mỗi màu. Phần nguyên vật liệu thì mình làm được nhưng sang phần Màu thì bó tay vì không còn là mảng thông thường nữa mà còn có so chiếu vì :

- Đối với mỗi vùng Màu (phần khung nhỏ có 2 cột 8 hàng), sau khi ghi nhận các giá trị thì phải so sánh theo mã màu (A100, L4, M5 ...) để dịch chuyển nó về đúng cột của nó (VD : Đỏ đậm, Đỏ nhạt, Vàng đậm, Vàng nhạt....) bên data

Mình gởi lại file, bổ sung thêm sheet "List" mô tả các màu. Phần này nữa là xong bài toán nhưng "cao cấp" quá, ngoài khả năng tự tìm hiểu của mình rồi, mong các bạn giúp code để được học hỏi. Thanks

Viết ngược lại code trước thôi.
 

File đính kèm

Upvote 0
Lu bu quá bữa nay mới vô diễn đàn được, thử code thấy quá đã, từ từ nghiên cứu. Cái chữ "thôi" nghe nhẹ như gió chứ chứa đầy nội lực phía sau. Nếu là nam hôm nào nhậu đi.
 
Upvote 0
Web KT

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

Back
Top Bottom