VBA nhờ giúp xóa vùng theo điều kiện

Zorro2nd

Yêu THVBA
Hi,

Mình có file excel cần xóa vùng màu xám cùng tiêu đề của nó trên toàn bộ sheet
Hình ảnh như bên dưới và xóa theo kiểu Shift cells left ấy.
Nhờ anh chị code giúp mình với, cảm ơn nhiều

Excel File:

Bạn cần đăng nhập để thấy hình ảnh
 
Sửa lần cuối:
B

bvtvba

Guest
Bài viết thì tương đối dễ hiểu vì có ảnh minh họa nhưng sẽ tốt hơn nếu:
1. Đưa được file demo, bạn upload lên mediafire hoặc google driver (để chế độ public).
2. Đưa ra ví dụ:

sheet 1: INPUT
sheet 2: OUTPUT

Như vậy mọi người sẽ dễ phán đoán điều bạn muốn là gì, với input như thế này thì output sẽ như thế nào.
 

Zorro2nd

Yêu THVBA
Cảm ơn bạn bvtvba,
Mình gửi link file đã up lên GG drive nhé

Mong muốn của mình là xóa vùng màu xám cùng với tiêu đề của cột máu xám theo kiểu nhấp chuột phải rồi delete kiểu Shift cells left ấy
VD: xóa vùng T5:AF29 và những vùng tương tự
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Trình bày như thế này thì chỉ có rất ít người hiểu được. Ngay cả tôi cũng không dám chắc đã hiểu đúng ý bạn muốn.
Tôi diễn đạt lại yêu cầu topic này, không biết đã đúng ý bạn hay chưa, xác nhận nhé.
Trạng thái trước khi tiến hành xóa.
Bạn cần đăng nhập để thấy hình ảnh

Vùng muốn xóa là vùng màu đỏ. Lý do là nó chứa các cells màu xám. Tóm lại cứ cột nào có một cells màu xám thì mong muốn xóa. Bao gồm cả tiêu đề, tức là các dòng 31 cũng bị xóa.

Sau khi xóa sẽ thành như sau:
Bạn cần đăng nhập để thấy hình ảnh
 

Zorro2nd

Yêu THVBA
Thank bạn @tuhocvba

Đúng rồi bạn ơi, chính xác là như vậy
Và nó xóa tất cả những vùng xám khác nữa ở trong sheet đó bạn ah. Cảm ơn bạn
 
B

bvtvba

Guest
Dựa vào nội dung dẫn giải ở #4 và nội dung xác nhận ở #5, tôi có mấy ý như sau:
1. Tôi không cho rằng công việc này nên làm bằng macro, vì tính hiệu quả không cao, dễ nhầm lẫn. Có lẽ bạn nên làm bằng tay. Tuy nhiên nếu bạn vẫn cố ý muốn thực hiện bằng được công việc này bằng macro, thì sau đây chúng ta cần thống nhất logic.

2. Nội dung logic cần thống nhất:
Yêu cầu nói là xóa cả title, tuy nhiên title là định nghĩa mơ hồ, không rõ ràng với máy tính. Thế nào là title thì chỉ có bạn hiểu, còn máy tính không hiểu.
Dựa vào data bạn đưa thì đề xuất như sau:
2.1 Xác định vùng cần xóa
Từ ô màu xám, chạy lên các dòng phía trên, tìm kiếm dòng có dữ liệu cuối cùng, xác định đây là dòng title. Ở hình vẽ dưới, tôi có ô xám cuối cùng là ở dòng 29. Chạy ngược lên các dòng phía trên, phát hiện dòng 5 là dòng chứa dữ liệu, mặc dù không có màu xám, nhưng dòng tiếp theo là dòng 4 không chứa dữ liệu.
Bạn cần đăng nhập để thấy hình ảnh

Do đó xác định vùng cần xóa trải dài từ ô màu xám cuối cùng (dòng 29) cho tới dòng có chứa dữ liệu ở trên cùng (dòng 5) là:
Bạn cần đăng nhập để thấy hình ảnh


2.2 Làm rõ định nghĩa thế nào là màu xám.
Định nghĩa màu xám là khái niệm mơ hồ, chỉ có con người hiểu, máy tính không hiểu. Chúng ta có rất nhiều màu được coi là màu xám.
Bạn cần đăng nhập để thấy hình ảnh

Không chỉ là màu xám, trong xử lý dữ liệu Excel, đôi khi người ta tô màu đen cũng có hàm ý là xóa bỏ hoàn toàn. Để code chính xác, cần đưa ra cụ thể là tô màu nào thì hiểu là xóa. Việc này mất thời gian.
Dựa vào dữ liệu bạn đưa thì màu được xác định là: 6740479
Gợi ý:
Mã:
MsgBox Range("N6").Interior.Color
Đến đây, nếu bạn đồng ý thì tôi sẽ code. Dự kiến thời gian code 2h. Mong muốn: Bạn hỗ trợ tài chính cho diễn đàn ứng với công sức code 2h, thì tôi sẽ tiến hành code. 1h = 50k. Vậy mong muốn nhận được 100k hỗ trợ diễn đàn hoạt động.
Thông tin ủng hộ diễn đàn:
Tài khoản Ngân hàng thương mại cổ phần Ngoại thương Việt Nam Vietcombank, số tài khoản: 0011003264055
Chi nhánh Quận Hoàn Kiếm, Hà Nội.
Chủ tài khoản: Phạm Minh Hoàng.
 
T

thanhphong

Guest
Diễn giải màu xám của chủ topic rất cảm tính. Và nếu không cẩn thận, người code sẽ đưa ra kết quả sai.
Cụ thể, hướng đi ở #6 viết:
Dựa vào dữ liệu bạn đưa thì màu được xác định là: 6740479
Thực tế nếu cho macro tô màu theo mã này, sẽ ngã ngửa ra là nó không phải là màu xám.
Copy cells của chủ topic cho ra workbook mới, cũng không làm sao lấy được mã màu.
Thực tế, mắt nhìn vào thì là màu như vậy, nhưng bản chất là cells đó không hề được tô màu. Bằng chứng là bạn thử lấy màu xanh đỏ tím vàng tô đè lên thì sẽ thấy là không được, vì cells của chủ topic đang để rule:
Bạn cần đăng nhập để thấy hình ảnh

Do đó logic tìm và xóa thì không còn là tìm màu, mà là tìm ô thỏa mãn logic của rule trên.

Nói cách khác, chủ topic chỉ dẫn giải với tư cách là người dùng excel, mắt thấy như thế nào thì miêu tả y như vậy. Còn bản chất như thế nào, có đúng là cells được tô màu hay không, thì xin lưu ý là cells không có màu nào hết, cái thứ nhìn bằng mắt thấy là do thỏa mãn điều kiện của rule.
 

Euler

Administrator
Thành viên BQT
Khi cân nhắc hiệu quả của một dự án:
-Việc này có thường xuyên lặp lại hay không?
-Hiệu quả của việc này nếu áp dụng macro có cao hay không?

Nếu nhìn vào lượng dữ liệu này thì làm bằng tay có lẽ còn đỡ mất nhiều thời gian hơn ngồi code. Tuy nhiên, đôi khi người ta nghĩ có người sẽ code free cho mình, cho nên cứ mang lên diễn đàn để hỏi. Nhưng khi động tới việc phải trả công cho thời gian ngồi code, thì họ phải suy nghĩ có cần thiết phải đầu tư tiền bạc cho việc này hay là ngồi làm bằng tay cho xong? Vả lại việc này trong tương lai chắc gì đã lặp lại....

Về việc nói là xóa theo màu, như #7 đã bàn tới, không thể dựa vào màu để xóa, bởi file này không sử dụng tô màu, mà họ dùng rule để hiển thị màu, macro sẽ không dò được màu trên cells. Do đó phải đi thực chất vào logic:
Bạn cần đăng nhập để thấy hình ảnh


Như vậy người dùng phải chỉ định các dòng chứa từ khóa Runtime, macro tìm xem chỗ nào là 0 (thì nơi đó có màu xám), người dùng còn phải chỉ định dòng title, dòng cuối => macro xóa.
Do có nhiều khu vực (vd: UHT1, UHT2), do đó nếu dùng macro thì người dùng cũng phải chỉ định nhiều lần, phiền hà.

Nói tóm lại, tính hiệu quả của dự án này là thấp. Mọi người bàn tới đây cũng đã mất nhiều thời gian rồi, stop ở đây.
 

Zorro2nd

Yêu THVBA
Cảm ơn các bác quan tâm,

Mình là dân văn phòng dùng excel thuần, không biết nhiều về code, chỉ biết dùng record macro để simply file công việc văn phòng của mình
Mình không dự định chi tiền ra cho việc này vì vẫn nghĩ cộng đồng giúp nhau free

Trong công tác gửi report của mình có nhiều bước trước khi gửi mail, những bước khác mình có thể tự record macro được rồi, còn tới bước này mình không làm được nên lên đây nhờ các cao thủ giúp sức, bạn nào có giải pháp nào hay hơn ngoài dùng cách macro thì chia sẻ mình với nhé. Mục đích là nhanh gọn lẹ, đơn giản hóa công việc, vì trong một ngày mình thực hiện gửi báo cáo này từ 10 tới 15 lần, mỗi lần cũng mất tầm 5 phút.

Bác nào code giúp mình, mình xin tặng cái thẻ đth 50k cho công sức coding của các bác. Thanks All
 

tuhocvba

Administrator
Thành viên BQT
Mình không dự định chi tiền ra cho việc này vì vẫn nghĩ cộng đồng giúp nhau free
Các câu hỏi mang tính hỏi đáp YES/NO, thì mọi người vẫn giúp nhau free.
Các yêu cầu code, mọi người có thể giúp free nếu họ có thời gian và yêu cầu rõ ràng, không quá phức tạp-hoặc ít nhất họ có hứng thú với yêu cầu đó, trường hợp yêu cầu tài chính thì mới code cũng có. Ví dụ thẻ 50k của bạn cũng là tài chính rồi.
Bạn cũng có thể yêu cầu người khác phải cho bạn tài chính thì bạn mới code, nếu bạn có khả năng code giúp họ và họ đồng ý + bạn có tối thiểu 50 bài viết trên diễn đàn.

Thứ miễn phí không phải là tốt, trả phí và yêu cầu họ code với trách nhiệm cao nhất.
 
Top