luckyboy1310
Thành viên mới

- Tham gia
- 10/3/09
- Bài viết
- 28
- Được thích
- 0
Public Sub GPE()Dear các anh chị.
Em đang gặp 1 vấn đề nhỏ như trong file đính kèm. Em tìm không thấy hàm nào trả về giá trị màu nền của cell nên mạo muội hỏi xin các anh chị chỉ bảo cho em code VB để giải quyết vấn đề trên.
Em cảm ơn ạ.
Bạn có thể làm cách khác:Dear các anh chị.
Em đang gặp 1 vấn đề nhỏ như trong file đính kèm. Em tìm không thấy hàm nào trả về giá trị màu nền của cell nên mạo muội hỏi xin các anh chị chỉ bảo cho em code VB để giải quyết vấn đề trên.
Em cảm ơn ạ.
Dạ em cảm ơn anh rất nhiều. Nhưng anh ơi có cách nào gán vùng vào thẳng trong code luôn không anh(khỏi phải mỗi lần làm là phải tô đen vùng chọn). Vì data của em không cố định, nên mổi lần làm em sẽ chọn vùng nhất định rồi gán nó vào nút lun.
VD: Trong file đính kèm vùng chọn của em là B5:F12
Thì thay cái Selection bằng Range("B5:F12"), Không cần chọn vùng nữa.
Bạn có thể làm cách khác:
Bước 1: Gõ Ctrl+H, chọn Options
Bước 2: Format\ Pattens\ Color\ No Color \ OK
Bước 3: Replace with: (Để trống) \Replace All \OK
Xong.
Ý của bạn là sao?Cách của anh chỉ xài được khi dữ liệu trong cell giống nhau. Nếu Khác nhau thì nó po tay... Không biết em có làm đúng theo cách anh không nhưng khi test thử thì nó giống như em nói vậy đó
Thì thay cái Selection bằng Range("B5:F12"), Không cần chọn vùng nữa.
Bạn thử đoạn code này xem saoVới 60 cột và trên 300 dòng thì code chạy chậm lắm anh. Có cách nào để vòng lặp mình nó nhanh hơn tý được không anh
Public Sub chuot0106()
Dim i As Long, j As Long
Dim Data As Range, Kq()
Set Data = Sheet1.Range("F4:BM386")
ReDim Kq(1 To Data.Rows.Count, 1 To Data.Columns.Count)
For i = 1 To Data.Rows.Count
For j = 1 To Data.Columns.Count
If mamau(Data(i, j)) = 1 Then
Kq(i, j) = ""
Else
Kq(i, j) = Data(i, j)
End If
Next j
Next i
Sheet1.Range("F4").Resize(Data.Rows.Count, Data.Columns.Count) = Kq
End Sub
Public Function mamau(rng As Range) As Long
mamau = rng.Font.ColorIndex
End Function
[COLOR=#000000]Cll.Interior.ColorIndex[/COLOR]
[COLOR=#000000]rng.Font.ColorIndex[/COLOR]
Rất tiếc trong trong trường hợp này bạn mới là người khồng đúng!ở #2 dùng
Mã:[COLOR=#000000]Cll.Interior.ColorIndex[/COLOR]
và ở #10 dùng
Mã:[COLOR=#000000]rng.Font.ColorIndex[/COLOR]
theo lý thuyết logic thì không thể có 2 người cùng làm đúng![]()
Rất tiếc trong trong trường hợp này bạn mới là người khồng đúng!. Vì bài #2 viết code cho trường hợp File ở #1, còn bài của tôi viết cho #9 và cả 2 code đều đúng với yêu cầu của tác giả ở mỗi File.
Bạn thử đoạn code này xem sao
Mã:Public Sub chuot0106() Dim i As Long, j As Long Dim Data As Range, Kq() Set Data = Sheet1.Range("F4:BM386") ReDim Kq(1 To Data.Rows.Count, 1 To Data.Columns.Count) For i = 1 To Data.Rows.Count For j = 1 To Data.Columns.Count If mamau(Data(i, j)) = 1 Then Kq(i, j) = "" Else Kq(i, j) = Data(i, j) End If Next j Next i Sheet1.Range("F4").Resize(Data.Rows.Count, Data.Columns.Count) = Kq End Sub Public Function mamau(rng As Range) As Long mamau = rng.Font.ColorIndex End Function
Dạ! Tại em chỉ nghĩ tới màu thôi chứ không chú ý màu chữ anhThế thì tốt rồi! Lần sau bạn rút kinh nghiệm đưa File mẫu gần giống thực tế chút đi! Ai lại đưa file minh họa có màu nền trong khi file thật lại có màu chữ!
Bạn thử đoạn code này xem sao
Mã:Public Sub chuot0106() Dim i As Long, j As Long Dim Data As Range, Kq() Set Data = Sheet1.Range("F4:BM386") ReDim Kq(1 To Data.Rows.Count, 1 To Data.Columns.Count) For i = 1 To Data.Rows.Count For j = 1 To Data.Columns.Count If mamau(Data(i, j)) = 1 Then Kq(i, j) = "" Else Kq(i, j) = Data(i, j) End If Next j Next i Sheet1.Range("F4").Resize(Data.Rows.Count, Data.Columns.Count) = Kq End Sub Public Function mamau(rng As Range) As Long mamau = rng.Font.ColorIndex End Function
Lúc thì xét theo màu nền, lúc thì xét theo màu Font, chẳng biết đâu mà lần.Với file dạng này code không chay được anh ơi T___T
làm giúp luôn đi chuột0106, chỉ còn trường hợp này thôi, "hứa là không còn trường hợp khác nữa"