Xóa các đường nét vẽ trùng nhau của Shapes trong Excel

Liên hệ QC

doancongtu19021988

Thành viên mới
Tham gia
12/9/09
Bài viết
33
Được thích
0
Mình có 1 file excel trong đó có nhiều hình vẽ tạo bở các đường thẳng. Mình phát hiện ra là trong các đường thẳng đó có rất nhiều các đường thẳng nằm trùng lên no. Điều đó làm file rất nặng. Mình muốn xóa đi nhưng đường trung nhau đó và chỉ để lại 1 đường tạo lên hình đó thôi. Các bác giúp e với. Thanks...
 
Mình có 1 file excel trong đó có nhiều hình vẽ tạo bở các đường thẳng. Mình phát hiện ra là trong các đường thẳng đó có rất nhiều các đường thẳng nằm trùng lên no. Điều đó làm file rất nặng. Mình muốn xóa đi nhưng đường trung nhau đó và chỉ để lại 1 đường tạo lên hình đó thôi. Các bác giúp e với. Thanks...
Bạn đưa file lên xem nào?
 
Mong mọi người quan tâm xem giúp....
Giả sử rằng 2 shapes được gọi là trùng nhau nếu có chung 2 thuộc tính Left, Top (nghĩa là nằm cùng vị trí), thực ra thì chúng cần có cùng 2 thuộc tính Height, Width (cùng kích thước) nhưng có lẽ 2 thuộc tính Height, Width không cần thiết lắm với thực tế trong file nên có thể bỏ qua.
Bạn sử dụng tạm code sau:
PHP:
Sub RemoveDuplicateShapes()
    Dim i As Long, j As Long
    i = 1
    With Sheet1
        Do
            j = i + 1
            Do
                If .Shapes(j).Top = .Shapes(i).Top And .Shapes(j).Left = .Shapes(i).Left Then .Shapes(j).Delete
                j = j + 1
            Loop Until j > .Shapes.Count
            i = i + 1
        Loop Until i = .Shapes.Count
    End With
End Sub
Chạy code một vài lần, bạn sẽ xóa được hết các shapes trùng nhau. Bạn có thể kiểm tra điều này bằng câu lệnh
PHP:
Msgbox Sheet1.Shapes.Count
 
thanks bạn đã giúp đỡ. Xong bạn có thể hướng dẫn rõ hơn. mình chưa dùng mấy cái code này bao h???
 
thanks bạn đã giúp đỡ. Xong bạn có thể hướng dẫn rõ hơn. mình chưa dùng mấy cái code này bao h???
- Bạn mở file ra, nhấn Alt+F11 để mở cửa sổ VBE --> chọn Insert\Module --> dán code trên vào khung soạn thảo bên phải --> nhấn F5 để chạy code.
- Với câu lệnh Msgbox Sheet1.Shapes.Count, bạn có thể nhấn Ctrl+G (sau khi nhấn Alt+F11) để mở khung Immediate, dán câu lệnh này vào và nhấn Enter. Bạn nên chạy câu lệnh này trước và sau khi chạy code trên để kiểm tra sự thay đổi số shapes.
- Tất nhiên để chạy được code thì bạn phải Enable macro:
+ Trên Excel 2003: Tools\Macro\Security --> chọn Medium hoặc Low
+ Trên Excel 2007, 2010: Office\Excel Options (hoặc File\Options)\Trust center\Trust center settings\Macro settings --> chọn Enable all macros... --> OK.
 
Có thể cải tiến để chỉ chạy macro 1 lần:
PHP:
Sub delDoubLine()
Dim i As Long, j As Long, cS As Long
MsgBox ActiveSheet.Shapes.Count
On Error Resume Next
Do
cS = Me.Shapes.Count
For i = 1 To cS - 1
    For j = i + 1 To cS
        If Me.Shapes(i).Left = Me.Shapes(j).Left And Me.Shapes(i).Top = Me.Shapes(j).Top And Me.Shapes(i).Width = Me.Shapes(j).Width Then
            Me.Shapes(j).Delete
        End If
    Next
Next
Loop Until cS = Me.Shapes.Count
MsgBox Me.Shapes.Count
End Sub

Ngoài ra, có nhiều line cùng chung top và left nhưng không trùng, kiểm tra thêm width cho đảm bảo.
 
bạn ơi bạn sửa giúp mình đc k? mình thử nhiều lần mà sao k đc. toàn báo lỗi :( bạn có thể làm thành file .xla để mình dùng vào "add in" luôn được k? thanks bạn nhiều, mình đang cần, file nặng quá làm nản :(
 
Cái file này bữa có 1 ông khách bên mình gặp rồi !
Nhưng mình không biết cách nào làm hết số lượng những đường thẳng này vì nó lên tới 89.000 cái như thế. Mình mở file lên chờ khoảng 25 phút mới mở được. Có khi bị treo máy luôn.
Nó được copy trong tất cả các ô trong 12 sheet, chỗ nào có cái cột chứa mã hàng đó là có đường thẳng đó.

Vậy hôm nay thấy cái code này rất hữu ích. mình sẽ áp dụng thử xem sao !
Cảm ơn bạn !
 
Mình có 1 file excel trong đó có nhiều hình vẽ tạo bở các đường thẳng. Mình phát hiện ra là trong các đường thẳng đó có rất nhiều các đường thẳng nằm trùng lên no. Điều đó làm file rất nặng. Mình muốn xóa đi nhưng đường trung nhau đó và chỉ để lại 1 đường tạo lên hình đó thôi. Các bác giúp e với. Thanks...
Theo mình đâu cần phải Code làm gì
Bạn dùng thanh công cụ Drawing trong Excel, bạn bấm vào mũi tên màu trắng cạnh chữ Draw và chọn toàn bộ các Shape nào cần xóa ấn Delete thế là OK. Trở lại màn hình chính bấm Esc sẽ trở về ô Cell hiện tại
 
Theo mình đâu cần phải Code làm gì
Bạn dùng thanh công cụ Drawing trong Excel, bạn bấm vào mũi tên màu trắng cạnh chữ Draw và chọn toàn bộ các Shape nào cần xóa ấn Delete thế là OK. Trở lại màn hình chính bấm Esc sẽ trở về ô Cell hiện tại

del vậy là del hết ah? vẽ lại sao. mình chỉ muốn del những nét chồng lên thui (giữ 1 lại 1 nét cuối cùng ấy)
 
Web KT

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

Back
Top Bottom