xin các thày giúp em vba tự động tô màu dử liệu trùng nhau (1 người xem)

Liên hệ QC

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

gamegamegamegame

Thành viên hoạt động
Tham gia
5/6/15
Bài viết
144
Được thích
5
file của em có 2 bảng
bảng 1 là bảng chưa tô màu , em muống code tự động tô màu bảng 1 giống như bảng 2 thì nên viết vba như thế nào ạ
mong được góp ý
 

File đính kèm

file của em có 2 bảng
bảng 1 là bảng chưa tô màu , em muống code tự động tô màu bảng 1 giống như bảng 2 thì nên viết vba như thế nào ạ
mong được góp ý
Cái này hơi đuối đây, giả sử dữ liệu không phải chỉ có 2 tên trùng nhau (tô 2 màu khác nhau) mà là 100, 1000 tên trùng nhau thì tô màu thế nào đây?
 
Upvote 0
cái này hơi đuối đây, giả sử dữ liệu không phải chỉ có 2 tên trùng nhau (tô 2 màu khác nhau) mà là 100, 1000 tên trùng nhau thì tô màu thế nào đây?

vd neu co 100 ong nguyen van a trung nhau thi to 100 ong A mau hong
và có 200 ông nguyễn văn b trùng nhau thì tô 200 ông B màu xanh nhạt vậy có đc ko
 
Upvote 0
PHP:
Option Explicit
Sub Macro2()
 Dim Rws As Long, MyColor As Byte, J As Byte
 Dim MyAdd As String
 Dim Rng As Range, Cls As Range, sRng As Range, Rg0 As Range
1 'Tao Danh Sách Duy Nhát:'
 Sheet1.Select
 Rws = [d3].CurrentRegion.Rows.Count
 [d3].Resize(Rws).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
    "Z1"), Unique:=True
 [D4].Resize(Rws).Interior.ColorIndex = 2
 Set Rng = [d3].Resize(Rws)
 MyColor = 34
2 'Tìm Trùng Theo Danh Sách Duy Nhát:'
 For Each Cls In [z2].CurrentRegion.Offset(1)
    If Cls.Value = "" Then Exit For
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            If Rg0 Is Nothing Then
                Set Rg0 = sRng
            Else
                Set Rg0 = Union(Rg0, sRng)
            End If
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
3 'To Màu:'
    If Rg0.Cells.Count > 1 Then
        MyColor = MyColor + 1
        If MyColor > 55 Then MyColor = 30
        Rg0.Interior.ColorIndex = MyColor
    End If
    Set Rg0 = Nothing
 Next Cls
End Sub
 
Upvote 0
vd neu co 100 ong nguyen van a trung nhau thi to 100 ong A mau hong
và có 200 ông nguyễn văn b trùng nhau thì tô 200 ông B màu xanh nhạt vậy có đc ko
Hình như tôi nói bạn chưa hiểu!
VD: có 2 người Nguyễn Văn A1, có 2 người Nguyễn Văn A2, có 2 người Nguyễn Văn A3, có 2 người Nguyễn Văn A4, có 2 người Nguyễn Văn A5, ... có 2 người Nguyễn Văn A100, có 2 người Nguyễn Văn A101, ... có 2 người Nguyễn Văn A1000. Vậy dùng bao nhiêu màu để tô?
 
Upvote 0
PHP:
option explicit
sub macro2()
 dim rws as long, mycolor as byte, j as byte
 dim myadd as string
 dim rng as range, cls as range, srng as range, rg0 as range
1 'tao danh sách duy nhát:'
 sheet1.select
 rws = [d3].currentregion.rows.count
 [d3].resize(rws).advancedfilter action:=xlfiltercopy, copytorange:=range( _
    "z1"), unique:=true
 [d4].resize(rws).interior.colorindex = 2
 set rng = [d3].resize(rws)
 mycolor = 34
2 'tìm trùng theo danh sách duy nhát:'
 for each cls in [z2].currentregion.offset(1)
    if cls.value = "" then exit for
    set srng = rng.find(cls.value, , xlformulas, xlwhole)
    if not srng is nothing then
        myadd = srng.address
        do
            if rg0 is nothing then
                set rg0 = srng
            else
                set rg0 = union(rg0, srng)
            end if
            set srng = rng.findnext(srng)
        loop while not srng is nothing and srng.address <> myadd
    end if
3 'to màu:'
    if rg0.cells.count > 1 then
        mycolor = mycolor + 1
        if mycolor > 55 then mycolor = 30
        rg0.interior.colorindex = mycolor
    end if
    set rg0 = nothing
 next cls
end sub



cảm ơn đúng ý em rồi nhưng anh ơi nếu muống tÔ THÊM quá cột e nữa thì mình chỉnh code ở phần nào vậy anh
 
Lần chỉnh sửa cuối:
Upvote 0
file của em có 2 bảng
bảng 1 là bảng chưa tô màu , em muống code tự động tô màu bảng 1 giống như bảng 2 thì nên viết vba như thế nào ạ
mong được góp ý
Cái này mình đã thử nhưng nếu dữ liệu trùng nhiều hơn 56 thì code bị lỗi và những chỗ trùng nhau sau không được tô. Ở đây mỗi dạng trùng nhau mình cho một màu khác nhau nên thực sự nếu trùng nhau ít hẵng dùng
 
Upvote 0
file của em có 2 bảng
bảng 1 là bảng chưa tô màu , em muống code tự động tô màu bảng 1 giống như bảng 2 thì nên viết vba như thế nào ạ
mong được góp ý
Bạn tham khảo Code sau:
PHP:
Sub TOMAU()
    Dim Cll As Range
    Dim Vung As Range
    Dim clr As Long
    Set Vung = Sheets(1).Range("D4:D" & Range("E65536").End(xlUp).Row)
    Vung.Interior.ColorIndex = 2
    clr = 6
    For Each Cll In Vung
        If Application.WorksheetFunction.CountIf(Vung, Cll) > 1 Then
            If WorksheetFunction.CountIf(Range("D4:D" & Cll.Row), Cll) = 1 Then
                Cll.Interior.ColorIndex = clr
                clr = clr + 1
            Else
                Cll.Interior.ColorIndex = Vung.Cells(WorksheetFunction.Match(Cll.Value, Vung, False), 1).Interior.ColorIndex
            End If
        End If
    Next
    Set Vung = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cái này mình đã thử nhưng nếu dữ liệu trùng nhiều hơn 56 thì code bị lỗi và những chỗ trùng nhau sau không được tô. Ở đây mỗi dạng trùng nhau mình cho một màu khác nhau nên thực sự nếu trùng nhau ít hẵng dùng
Ở #2 và #5 mình đã đề cập đến vấn đề này rồi.
 
Upvote 0
Cái này mình đã thử nhưng nếu dữ liệu trùng nhiều hơn 56 thì code bị lỗi và những chỗ trùng nhau sau không được tô. Ở đây mỗi dạng trùng nhau mình cho một màu khác nhau nên thực sự nếu trùng nhau ít hẵng dùng

/(hông hẵn đâu chú em!

Nếu cho fép áp dụng mẹo:

* (Chì tô các màu nền từ chỉ số 30-55) nhưng số ô mỗi lần đạt 55 lại tăng lên về fía fải!
Ví dụ 25 loạt người trùng ban đầu ta chỉ tô 1 ô đã tìm thấy;
25 loạt trùng êế tiếp ta lại tô 2 ô liền kề, kể cả bên fải của ô tìm thấy & cú thế tiếp tục,

Nếu cần mình sẽ chứng minh trên thực địa ngay thôi!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - -
đúng ý em rồi nhưng anh ơi nếu muống tÔ THÊM quá cột e nữa thì mình chỉnh code ở phần nào vậy anh

Xài fương thức .Resize(,N) trong 2 câu lệnh:
Mã:
         [COLOR=#ee82ee] [FONT=Courier New]if [/FONT][/COLOR][FONT=Courier New][COLOR=#ee82ee]rg0 is nothing then
[/COLOR][COLOR=#0000bb]               [B] set rg0 [/B][/COLOR][B][COLOR=#007700]= [/COLOR][/B][/FONT][COLOR=#0000bb][FONT=Courier New][B]srng.Reize(,2)
[/B]           [/FONT][/COLOR][FONT=Courier New][COLOR=#ee82ee] else
[/COLOR][COLOR=#007700]               [/COLOR][B][COLOR=#0000bb]set rg0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]union[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]rg0[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]srng,Reize(,2)[/COLOR][/B][/FONT][FONT=Courier New][COLOR=#007700][B])
[/B]           [/COLOR][COLOR=#ee82ee] end if[/COLOR][/FONT][COLOR=#ee82ee]
[/COLOR]
 
Upvote 0
/(hông hẵn đâu chú em!

Nếu cho fép áp dụng mẹo:

* (chì tô các màu nền từ chỉ số 30-55) nhưng số ô mỗi lần đạt 55 lại tăng lên về fía fải!
Ví dụ 25 loạt người trùng ban đầu ta chỉ tô 1 ô đã tìm thấy;
25 loạt trùng êế tiếp ta lại tô 2 ô liền kề, kể cả bên fải của ô tìm thấy & cú thế tiếp tục,

nếu cần mình sẽ chứng minh trên thực địa ngay thôi!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - -


xài fương thức .resize(,n) trong 2 câu lệnh:
Mã:
         [color=#ee82ee] [font=courier new]if [/font][/color][font=courier new][color=#ee82ee]rg0 is nothing then
[/color][color=#0000bb]               [b] set rg0 [/b][/color][b][color=#007700]= [/color][/b][/font][color=#0000bb][font=courier new][b]srng.reize(,2)
[/b]           [/font][/color][font=courier new][color=#ee82ee] else
[/color][b][color=#0000bb]set rg0 [/color][color=#007700]= [/color][color=#0000bb]union[/color][color=#007700]([/color][color=#0000bb]rg0[/color][color=#007700], [/color][color=#0000bb]srng,reize(,2)[/color][/b][/font][font=courier new][color=#007700][b])
[/b]           [/color][color=#ee82ee] end if[/color][/font][color=#ee82ee]
[/color]

cảm ơn đã giúp đỡ --=0
 
Upvote 0
/(hông hẵn đâu chú em!

Nếu cho fép áp dụng mẹo:

* (Chì tô các màu nền từ chỉ số 30-55) nhưng số ô mỗi lần đạt 55 lại tăng lên về fía fải!
Ví dụ 25 loạt người trùng ban đầu ta chỉ tô 1 ô đã tìm thấy;
25 loạt trùng êế tiếp ta lại tô 2 ô liền kề, kể cả bên fải của ô tìm thấy & cú thế tiếp tục,

Nếu cần mình sẽ chứng minh trên thực địa ngay thôi!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - -


Xài fương thức .Resize(,N) trong 2 câu lệnh:
Mã:
         [COLOR=#ee82ee] [FONT=Courier New]if [/FONT][/COLOR][FONT=Courier New][COLOR=#ee82ee]rg0 is nothing then
[/COLOR][COLOR=#0000bb]               [B] set rg0 [/B][/COLOR][B][COLOR=#007700]= [/COLOR][/B][/FONT][COLOR=#0000bb][FONT=Courier New][B]srng.Reize(,2)
[/B]           [/FONT][/COLOR][FONT=Courier New][COLOR=#ee82ee] else
[/COLOR][B][COLOR=#0000bb]set rg0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]union[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]rg0[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]srng,Reize(,2)[/COLOR][/B][/FONT][FONT=Courier New][COLOR=#007700][B])
[/B]           [/COLOR][COLOR=#ee82ee] end if[/COLOR][/FONT][COLOR=#ee82ee]
[/COLOR]
Cảm ơn bạn. Mình sẽ thử tìm hiểu về những điều bạn nói.
 
Upvote 0
/(hông hẵn đâu chú em!

Nếu cho fép áp dụng mẹo:

* (Chì tô các màu nền từ chỉ số 30-55) nhưng số ô mỗi lần đạt 55 lại tăng lên về fía fải!
Ví dụ 25 loạt người trùng ban đầu ta chỉ tô 1 ô đã tìm thấy;
25 loạt trùng êế tiếp ta lại tô 2 ô liền kề, kể cả bên fải của ô tìm thấy & cú thế tiếp tục,

Nếu cần mình sẽ chứng minh trên thực địa ngay thôi!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - -


Xài fương thức .Resize(,N) trong 2 câu lệnh:
Mã:
         [COLOR=#ee82ee] [FONT=Courier New]if [/FONT][/COLOR][FONT=Courier New][COLOR=#ee82ee]rg0 is nothing then
[/COLOR][COLOR=#0000bb]               [B] set rg0 [/B][/COLOR][B][COLOR=#007700]= [/COLOR][/B][/FONT][COLOR=#0000bb][FONT=Courier New][B]srng.Reize(,2)
[/B]           [/FONT][/COLOR][FONT=Courier New][COLOR=#ee82ee] else
[/COLOR][B][COLOR=#0000bb]set rg0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]union[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]rg0[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]srng,Reize(,2)[/COLOR][/B][/FONT][FONT=Courier New][COLOR=#007700][B])
[/B]           [/COLOR][COLOR=#ee82ee] end if[/COLOR][/FONT][COLOR=#ee82ee]
[/COLOR]
cho xin xem thực địa thế nào đi bác. đọc mà chưa tưởng tượng ra @@
cái vụ tô màu trùng hình như lúc trước em với thầy giaiphap có làm 1 lần rồi mà chỉ làm theo cách copy rồi dán vào. chứ file này chưa xem qua nữa @$@!^%
đến giờ vẫn ngu lì vụ mảng nên xem mà cũng chả hiểu gì +-+-+-+
 
Upvote 0
Web KT

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

Back
Top Bottom