Cần giúp Tự động Delete cột rỗng và cột chứa toàn số 0 (Gồm cả số chết và công thức) (5 người xem)

Liên hệ QC

Quý vị thấy đề tài này thế nào?

  • Đề tài này rất dễ, chủ Topic tự tìm hiểu

    Votes: 0 0.0%
  • Đề tài này bình thường

    Votes: 0 0.0%
  • Đề tài này rất khó, phải suy nghĩ nhiều

    Votes: 0 0.0%
  • Chả hiểu chủ Topic nói gì

    Votes: 0 0.0%

  • Total voters
    0
  • Poll closed .

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
929
Được thích
240
Giới tính
Nam
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tự động xóa (Delete) cột với điều kiện dọc theo cột đó đều là ô rỗng, ô chứa số 0 (Số chết) và ô chứa số 0 (ô công thức nhưng hiện kết quả bằng 0). Nếu chỉ có 1 ô có số khác 0 thì sẽ không xóa cột đó. Các cột có số liệu không cố định (Nghĩa là không thể biết trước trong cột có những số liệu nào).
Ví dụ:
- Xóa cột A vì: Cột này là cột chứa các ô đều rỗng.
- Xóa cột F vì: Cột này là cột chứa các ô có số 0 (Có công thức nhưng hiện kết quả là 0).
- Không xóa cột D vì: Có ô D46 có số 500.000 (Khác số 0).
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm. Tôi xài Excel 2003.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tự động xóa (Delete) cột với điều kiện dọc theo cột đó đều là ô rỗng, ô chứa số 0 (Số chết) và ô chứa số 0 (ô công thức nhưng hiện kết quả bằng 0). Nếu chỉ có 1 ô có số khác 0 thì sẽ không xóa cột đó. Các cột có số liệu không cố định (Nghĩa là không thể biết trước trong cột có những số liệu nào).
Ví dụ:
- Xóa cột A vì: Cột này là cột chứa các ô đều rỗng.
- Xóa cột F vì: Cột này là cột chứa các ô có số 0 (Có công thức nhưng hiện kết quả là 0).
- Không xóa cột D vì: Có ô D46 có số 500.000 (Khác số 0).
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm. Tôi xài Excel 2003.
Mong là có vị cao thủ chỉ giáo. Xin cảm ơn.
 
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Tự động xóa (Delete) cột với điều kiện dọc theo cột đó đều là ô rỗng, ô chứa số 0 (Số chết) và ô chứa số 0 (ô công thức nhưng hiện kết quả bằng 0). Nếu chỉ có 1 ô có số khác 0 thì sẽ không xóa cột đó. Các cột có số liệu không cố định (Nghĩa là không thể biết trước trong cột có những số liệu nào).
Ví dụ:
- Xóa cột A vì: Cột này là cột chứa các ô đều rỗng.
- Xóa cột F vì: Cột này là cột chứa các ô có số 0 (Có công thức nhưng hiện kết quả là 0).
- Không xóa cột D vì: Có ô D46 có số 500.000 (Khác số 0).
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm. Tôi xài Excel 2003.
Bạn chạy thử code sau xem sao:
[GPECODE=vb]Sub DelCols()
Dim lCol As Long, i As Long, k As Long, Wf, Arr()
Set Wf = Application.WorksheetFunction
lCol = Sheet1.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
ReDim Arr(1 To lCol)
For i = lCol To 1 Step -1
If Wf.Min(Sheet1.Columns(i)) = 0 And Wf.Max(Sheet1.Columns(i)) = 0 Then
k = k + 1
Arr(k) = i
End If
Next
If k > 0 Then
For i = 1 To k
Sheet1.Columns(Arr(i)).Delete
Next
End If
End Sub[/GPECODE]
Code này giải quyết được vấn đề xóa cột rỗng hoặc chỉ chứa số 0, tuy nhiên vì các cột có công thức liên quan đến nhau nên sẽ xảy ra vấn đề xóa cột này thì công thức ở cột kia bị lỗi.
 
Bạn chạy thử code sau xem sao:
[GPECODE=vb]Sub DelCols()
Dim lCol As Long, i As Long, k As Long, Wf, Arr()
Set Wf = Application.WorksheetFunction
lCol = Sheet1.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
ReDim Arr(1 To lCol)
For i = lCol To 1 Step -1
If Wf.Min(Sheet1.Columns(i)) = 0 And Wf.Max(Sheet1.Columns(i)) = 0 Then
k = k + 1
Arr(k) = i
End If
Next
If k > 0 Then
For i = 1 To k
Sheet1.Columns(Arr(i)).Delete
Next
End If
End Sub[/GPECODE]
Code này giải quyết được vấn đề xóa cột rỗng hoặc chỉ chứa số 0, tuy nhiên vì các cột có công thức liên quan đến nhau nên sẽ xảy ra vấn đề xóa cột này thì công thức ở cột kia bị lỗi.
Cảm ơn Quý vị đã chỉ giáo, nhưng sao tôi chạy Code thì bị xóa sạch (Không còn tí số liệu nào, File trắng xóa) nhỉ? (Chẳng lẽ mình đầu đất thế sao?)!$@!!
 
Cảm ơn Quý vị đã chỉ giáo, nhưng sao tôi chạy Code thì bị xóa sạch (Không còn tí số liệu nào, File trắng xóa) nhỉ? (Chẳng lẽ mình đầu đất thế sao?)!$@!!
Mình thấy còn 5 cột có số liệu:[A, B, C, D, F] và ......một đống cột #REF!. Hihi+-+-+-++-+-+-++-+-+-+
 
Mình thấy còn 5 cột có số liệu:[A, B, C, D, F] và ......một đống cột #REF!. Hihi+-+-+-++-+-+-++-+-+-+
Tôi chẳng còn thấy 5 cột có số liệu:[A, B, C, D, F] và ......một đống cột #REF! nữa cơ.
Tôi xin mô tả lại quá trình chạy Code như sau:
- Chạy Code thì bị lỗi như sau:
1.jpg
- Tôi bấm vào Debug để xem lỗi ở đoạn Code nào, kết quả là lỗi tại đây:
2.jpg
Tôi xóa "Sheet1" trong đoạn lệnh dòng 4:
PHP:
lCol = Sheet1.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
- Tôi xóa "Sheet1" trong đoạn lệnh này nữa ở dòng 14:
PHP:
Sheet1.Columns(Arr(i)).Delete
3.jpg
- Sau khi xóa "Sheet1" trong 2 đoạn lệnh ở trên, thì kết quả như sau:
4.jpg
=> Dữ liệu không còn gì sau khi chạy Code. Không biết là tôi làm thế có đúng không nữa? Mong Quý vị chỉ giáo.
P/s: Tôi có đính kèm File sau khi chạy Code.
 

File đính kèm

Lần chỉnh sửa cuối:
Xoá cột zero và cột rỗng

Tôi chẳng còn thấy 5 cột có số liệu:[A, B, C, D, F] và ......một đống cột #REF! nữa cơ.
Tôi xin mô tả lại quá trình chạy Code như sau:
- Chạy Code thì bị lỗi như sau:
View attachment 131112
- Tôi bấm vào Debug để xem lỗi ở đoạn Code nào, kết quả là lỗi tại đây:
View attachment 131113
Tôi xóa "Sheet1" trong đoạn lệnh dòng 4:
PHP:
lCol = Sheet1.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
- Tôi xóa "Sheet1" trong đoạn lệnh này nữa ở dòng 14:
PHP:
Sheet1.Columns(Arr(i)).Delete
View attachment 131115
- Sau khi xóa "Sheet1" trong 2 đoạn lệnh ở trên, thì kết quả như sau:
View attachment 131116
=> Dữ liệu không còn gì sau khi chạy Code. Không biết là tôi làm thế có đúng không nữa? Mong Quý vị chỉ giáo.
P/s: Tôi có đính kèm File sau khi chạy Code.

Vì trong cod sử dụng hàm min và max nên khi chạy các cột nào dạng chuỗi sẽ bị xóa sạch.
 
Cảm ơn Quý vị đã chỉ giáo, nhưng sao tôi chạy Code thì bị xóa sạch (Không còn tí số liệu nào, File trắng xóa) nhỉ? (Chẳng lẽ mình đầu đất thế sao?)!$@!!
Chẳng biết ở máy bạn thế nào chứ máy tôi chạy bình thường, chỉ có vấn đề như tôi đã nói ở trên:
vì các cột có công thức liên quan đến nhau nên sẽ xảy ra vấn đề xóa cột này thì công thức ở cột kia bị lỗi.
DelCols.jpg
 
Vậy Quý vị gửi File lên đi ạ (Có cả Code). Để tôi tham khảo với. Được không ạ?
P/s: Tôi xài Excel 2003.

Cứ chép Sub vào Module rồi Run, bảo người giúp gởi File tốn tài nguyên của người ta.
PHP:
Sub GPE()
Dim Rws As Long, CoL As Long, I As Long
CoL = Range("A3").SpecialCells(xlLastCell).Column
Rws = Range("A3").SpecialCells(xlLastCell).Row
Range("A3:A" & Rws).Resize(, CoL).Value = Range("A3:A" & Rws).Resize(, CoL).Value
For I = CoL To 1 Step -1
    If Application.WorksheetFunction.Max(Range(Cells(3, I), Cells(Rws, I))) = 0 Then Cells(3, I).EntireColumn.Delete
Next I
End Sub
HÍC!
 
Cứ chép Sub vào Module rồi Run, bảo người giúp gởi File tốn tài nguyên của người ta.
PHP:
Sub GPE()
Dim Rws As Long, CoL As Long, I As Long
CoL = Range("A3").SpecialCells(xlLastCell).Column
Rws = Range("A3").SpecialCells(xlLastCell).Row
Range("A3:A" & Rws).Resize(, CoL).Value = Range("A3:A" & Rws).Resize(, CoL).Value
For I = CoL To 1 Step -1
    If Application.WorksheetFunction.Max(Range(Cells(3, I), Cells(Rws, I))) = 0 Then Cells(3, I).EntireColumn.Delete
Next I
End Sub
HÍC!
Vâng, em xin cảm ơn Quý vị đã chỉ giáo, nhưng mà em muốn File sau khi chạy Code mà vẫn giữ nguyên công thức được không ạ? (Mặc dù có các cột bị lỗi #REF!) như hình vẽ:
DelCols.jpg
Mục đích của em là làm tiếp công đoạn tiếp theo mà vẫn giữ nguyên công thức (Không phải số chết) ạ.
 
theo tôi nghĩ thì bạn không nên xoá rồi đổi công thức rồi tính tính tính ...., như vậy rất khó kiểm soát. bây giờ bạn muốn giữ lại công thức nhưng công thức những ô liên quan có liên kết thì sao??? phải giữ lại cái gì? có một nguyên tắc trong excel là data base là không được đụng đến các thao tác xoá hay merg
 
theo tôi nghĩ thì bạn không nên xoá rồi đổi công thức rồi tính tính tính ...., như vậy rất khó kiểm soát. bây giờ bạn muốn giữ lại công thức nhưng công thức những ô liên quan có liên kết thì sao??? phải giữ lại cái gì? có một nguyên tắc trong excel là data base là không được đụng đến các thao tác xoá hay merg
Ah, nói ra thì dài dòng lắm, khâu này nằm trong một dự án ạ. Tôi tính cả rồi ạ (Mặc dù bị lỗi #REF! thì tôi có cách xóa #REF! đó đi). Tôi thấy làm như vị nghiaphuc đã làm là OK thôi mà.
 
Trong file đính kèm, bạn nhấn nút Chạy code nhé.
Vâng, xin cảm Quý vị ạ, đúng là tôi đầu đất thật, phải xóa "Sheet1" trong cả 3 dòng như sau thì mới chạy Code được:
- Xóa "Sheet1" trong đoạn lệnh dòng 4:
PHP:
lCol = Sheet1.Cells.Find("*", , , , xlByColumns, xlPrevious).Column

- Xóa "Sheet1" trong đoạn lệnh ở dòng 7:
PHP:
If Wf.Min(Sheet1.Columns(i)) = 0 And Wf.Max(Sheet1.Columns(i)) = 0 Then
- Xóa "Sheet1" trong đoạn lệnh ở dòng 14:
PHP:
 Code:
 Sheet1.Columns(Arr(i)).Delete

 
Lần chỉnh sửa cuối:
Vâng, xin cảm Quý vị ạ, đúng là tôi đầu đất thật, phải xóa "Sheet1" trong cả 3 dòng như sau thì mới chạy Code được:
Xóa "Sheet1" trong đoạn lệnh dòng 4:
PHP:
lCol = Sheet1.Cells.Find("*", , , , xlByColumns, xlPrevious).Column

Xóa "Sheet1" trong đoạn lệnh này ở dòng 14:
PHP:
Sheet1.Columns(Arr(i)).Delete

Xóa "Sheet1" trong đoạn lệnh này ở dòng 7:

PHP:
If Wf.Min(Sheet1.Columns(i)) = 0 And Wf.Max(Sheet1.Columns(i)) = 0 Then
Ra là vậy, cũng lưu ý thêm một chút là nếu bạn không chỉ định rõ ràng là sheet nào thì code sẽ thực hiện trên sheet hiện hành, do đó sẽ có thể xảy ra sự cố nếu bạn chạy code khi đang chọn 1 sheet không phải sheet cần xóa cột đấy nhé. Vậy nên khi viết code thao tác với các ô trên sheet thì bạn nên chỉ định sheet cần thao tác một cách tường minh. Việc này có thể bạn khai báo một biến Ws kiểu Worksheet, dùng lệnh Set Ws = Sheets("Tên sheet") trước rồi thao tác với biến Ws này, hoặc thêm câu lệnh Sheets("Tên sheet").Activate lên đầu code để chọn sheet trước khi chạy các lệnh khác. Việc này sẽ khắc phục được sự cố không đáng có khi xóa nhầm sheet.
 
Ra là vậy, cũng lưu ý thêm một chút là nếu bạn không chỉ định rõ ràng là sheet nào thì code sẽ thực hiện trên sheet hiện hành, do đó sẽ có thể xảy ra sự cố nếu bạn chạy code khi đang chọn 1 sheet không phải sheet cần xóa cột đấy nhé. Vậy nên khi viết code thao tác với các ô trên sheet thì bạn nên chỉ định sheet cần thao tác một cách tường minh. Việc này có thể bạn khai báo một biến Ws kiểu Worksheet, dùng lệnh Set Ws = Sheets("Tên sheet") trước rồi thao tác với biến Ws này, hoặc thêm câu lệnh Sheets("Tên sheet").Activate lên đầu code để chọn sheet trước khi chạy các lệnh khác. Việc này sẽ khắc phục được sự cố không đáng có khi xóa nhầm sheet.
Vâng, tôi xin ghi nhận đóng góp của Quý vị. Giả sử cột F và cột K có tô màu vàng sẵn có (2 cột này thuộc diện bị Delete). Làm thế nào để Delete các cột như đề bài nhưng lại không Delete 2 cột đó ạ? Mong Quý vị chỉ giáo thêm.
P/s: Có 01 File đính kèm.
 

File đính kèm

Vâng, tôi xin ghi nhận đóng góp của Quý vị. Giả sử cột F và cột K có tô màu vàng sẵn có (2 cột này thuộc diện bị Delete). Làm thế nào để Delete các cột như đề bài nhưng lại không Delete 2 cột đó ạ? Mong Quý vị chỉ giáo thêm.
P/s: Có 01 File đính kèm.
Dựa vào dấu hiệu gì để không xóa 2 cột này vậy bạn? Dựa vào màu nền à?
Giả sử rằng thêm yêu cầu "không xóa các cột có tô nền màu vàng" (dựa vào hàng 1), khi đó bạn sử dụng code sau thay cho code cũ nhé. Tôi thêm biến Ws để bạn tiện sử dụng cho file thực tế của bạn, khi cần thao tác với sheet khác, bạn chỉ cần sửa tên sheet tại câu lệnh thứ 4 là được:
[GPECODE=vb]Sub DelCols()
Dim lCol As Long, i As Long, k As Long, Ws As Worksheet, Wf, Arr()
Set Wf = Application.WorksheetFunction
Set Ws = Sheets("Tinh")
lCol = Ws.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
ReDim Arr(1 To lCol)
For i = lCol To 1 Step -1
If Wf.Min(Ws.Columns(i)) = 0 And Wf.Max(Ws.Columns(i)) = 0 And Ws.Cells(1, i).Interior.ColorIndex <> 6 Then
k = k + 1
Arr(k) = i
End If
Next
If k > 0 Then
For i = 1 To k
Ws.Columns(Arr(i)).Delete
Next
End If
End Sub[/GPECODE]
 
Web KT

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

Back
Top Bottom