Nhận giá trị mã mầu của một ô trong Excel ?

Liên hệ QC

Chuotdong

Thành viên thường trực
Tham gia
28/11/06
Bài viết
255
Được thích
60
Các bạn xem giúp mình file đính kèm, vì mình ko biết diễn đạt thế nào cho dễ hiểu:
 

File đính kèm

Các bạn xem giúp mình file đính kèm, vì mình ko biết diễn đạt thế nào cho dễ hiểu:

Bạn thử nhé :

PHP:
Function GetColor(MyCell As Range) As Long
    Application.Volatile (False)
    If MyCell.Count <> 1 Then Exit Function
    GetColor = MyCell.Font.Color
End Function

Thân!
 
Lần chỉnh sửa cuối:
Dùng hàm GET.CELL(24) trong bộ hàm Macro 4 cũng là 1 giãi pháp hay và đơn giãn!
Tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=7613
Mr OkeBap cho tôi hỏi thêm: Với hàm của bạn, nếu tôi muốn nó có thể sử dụng như 1 công thức mãng (tức có thể chọn nhiều cell cùng lúc) thì phải làm thế nào?
Mong được hướng dẩn thêm
 
Lần chỉnh sửa cuối:
Mr OkeBap cho tôi hỏi thêm: Với hàm của bạn, nếu tôi muốn nó có thể sử dụng như 1 công thức mãng (tức có thể chọn nhiều cell cùng lúc) thì phải làm thế nào?
Mong được hướng dẩn thêm


Bác bây giờ nghiên cứu cả hàm mảng cơ à ?? Trình độ tăng nhanh chóng mặt.

Bác tham khảo nhé :
PHP:
Function GetColorA(Mang As Range)
    Application.Volatile (True)
    Dim MyCell As Range, i As Long
    Dim Temp(1 To 1000, 0)
    For Each MyCell In Mang
        i = i + 1
        Temp(i, 0) = MyCell.Font.Color
    Next
    GetColorA = Temp
End Function

Thân!
 

File đính kèm

Bác có thể dịch nghĩa những dòng này có nghĩa là gì không, ạ? Dim Temp(1 To 1000, 0) Temp(i, 0) Cảm ơn bác!
 
Lần chỉnh sửa cuối:
Bác có thể dịch nghĩa những dòng này có nghĩa là gì không, ạ?
Dim Temp(1 To 1000, 0)
Temp(i, 0)
Cảm ơn bác!

1. Khai báo biến Temp là 1 mảng gồm 1 cột, với 1000 hàng, và hàng thứ nhất bắt đầu từ 1

2. Giá trị tại hàng thứ i của mảng Temp

OK rồi chứ ??

Thân!
 
Vậy ", 0" là gì vậy bác? Và có thể thay những số khác không, nếu có thì tác dụng sẽ ra sao? Cảm ơn bác 1 lần nữa! Vì hàm mãng trong VBA thì em mù tịt rồi! Mong bác dạy bài vỡ lòng cho. À. Còn nếu có 1 Sub bình thường khác muốn lấy giá trị thứ 5 trong mảng Temp thì viết làm sao bác? Thân.
 
Lần chỉnh sửa cuối:
Vậy ", 0" là gì vậy bác? Và có thể thay những số khác không, nếu có thì tác dụng sẽ ra sao?
Cảm ơn bác 1 lần nữa! Vì hàm mãng trong VBA thì em mù tịt rồi! Mong bác dạy bài vỡ lòng cho.
À. Còn nếu có 1 Sub bình thường khác muốn lấy giá trị thứ 5 trong mảng Temp thì viết làm sao bác?
Thân.
Một hàng 2 chiều sẽ thể hiện Array(hàng, cột), giống như tọa độ (x,y)
Trong một mảng bình thường, thì cột đầu tiên có số thứ tự là 0, cột thứ 2 có số thứ tự là 1
Tương tự như vậy đối với hàng

Muốn lấy giá trị thứ năm :
  • Hàng thứ 5 cột thứ i : Array(4, i-1)
  • Cột thứ 5, hàng thứ i : Array(i-1, 4)
Bạn hãy tìm hiểu trên diễn đàn với từ khóa Array sẽ thấy nhiều điều bổ ích.

Thân!
 
Cảm ơn bác, em cũng đã đọc nhiều nhưng do thiếu kiến thức nền tảng nên đọc vào cũng như không? Cảm ơn bác đã giúp em có nền nhà! Vậy em có thể xây dựng từ đây, rồi! Thanks.
 
Lần chỉnh sửa cuối:
To BAB & Chúc Vui!

PHP:
Function GetColorA(Mang As Range)
    Application.Volatile (True):          Dim MyCell As Range, i As Long
2    Dim Temp(1 To 1000, 0)
    For Each MyCell In Mang
        i = i + 1
        Temp(i, 0) = MyCell.Font.Color
    Next
    GetColorA = Temp
End Function
Câu lệnh 2 có thể thay bằng:
Mã:
[B][SIZE=3][COLOR=purple]Dim Temp( 1 To Mang.Cells.Count + 9, 0)[/COLOR][/SIZE][/B]
:-=--=0:=\+
 
Câu lệnh 2 có thể thay bằng:
Mã:
[B][SIZE=3][COLOR=purple]Dim Temp( 1 To Mang.Cells.Count + 9, 0)[/COLOR][/SIZE][/B]
:-=--=0:=\+

Vâng, em cảm ơn bác.

Nhưng tại sao không phải là :

PHP:
Dim Temp( 1 To Mang.Count, 0)

con số 9 có ý nghĩa gì vậy bác ???

Thân!
 
Nhưng tại sao không phải là:
PHP:
Dim Temp( 1 To Mang.Count, 0)
con số 9 có ý nghĩa gì vậy bác ?

Thứ nhất: Con số 9 dùng để chắc như BAB rằng mảng khai báo có đủ số phần tử để chứa những gì ta sắp bắt nó chứa!
Thứ đến: Cảm ơn BAB đã rút gọn thêm trong câu lệnh
Thứ ba: BAB xóa dùm bài này cái, nha! - Xin CẢm ơn!!
 
Bác tham khảo nhé :
PHP:
Function GetColorA(Mang As Range)
    Application.Volatile (True)
    Dim MyCell As Range, i As Long
    Dim Temp(1 To 1000, 0)
    For Each MyCell In Mang
        i = i + 1
        Temp(i, 0) = MyCell.Font.Color
    Next
    GetColorA = Temp
End Function
Thân!
Tôi vẩn còn thắc mắc về hàm mãng này... Gõ hàm trên cell, Ctrl + Shìtt + Enter ra kết quả không có vấn đề... Nhưng nếu tôi quét chọn công thức trên thanh Formula rồi bấm F9 thì chỉ thấy hiện toàn số 0
Sao kỳ vậy ta?
 
Sao em xài công thức này thì nó báo lỗi vậy!
Mã:
Function GetColorA(Mang As Range)     Application.Volatile (True):     Dim MyCell As Range, i As Long     Dim Temp(1 To [COLOR=red][U]Mang.Count[/U][/COLOR], 0)     For Each MyCell In Mang         i = i + 1         Temp(i, 0) = MyCell.Font.Color     Next     GetColorA = Temp End Function
 
Lần chỉnh sửa cuối:
Tôi vẩn còn thắc mắc về hàm mãng này... Gõ hàm trên cell, Ctrl + Shìtt + Enter ra kết quả không có vấn đề... Nhưng nếu tôi quét chọn công thức trên thanh Formula rồi bấm F9 thì chỉ thấy hiện toàn số 0 Sao kỳ vậy ta?
Máy bạn thì hiện số 0, còn máy mình thì không chị chạy luôn. Nó báo lỗi: "Formula is too long". Không biết bác Mr Okebab có thể chỉ thêm 1 chút không? Thân.
 
Lần chỉnh sửa cuối:
Máy bạn thì hiện số 0, còn máy mình thì không chị chạy luôn. Nó báo lỗi: "Formula is too long". Không biết bác Mr Okebab có thể chỉ thêm 1 chút không?
Thân.
Dỉ nhiên là vậy rồi vì code của Mr OkeBab ghi rằng:
Có đến cả ngàn phần tử là sao F9 cho nó hiển thị được... Bạn giãm nó xuống còn
Là F9 vô tư
 
Hỏi thêm! Tôi sửa mãng 1 chiều thành 2 chiều như sau:
Mã:
Function GetColorA(Mang As Range)
    Application.Volatile (True)
    Dim MyCell As Range, i As Long, iR As Long, iC As Long
    Dim Temp(1 To Mang.Rows.Count, 1 To Mang.Columns.Count)
    For Each MyCell In Mang
        i = i + 1
        iC = ((i - 1) Mod (Mang.Columns.Count)) + 1
        iR = ((i - 1) \ (Mang.Columns.Count)) + 1
        Temp(iR, iC) = MyCell.Font.Color
    Next
    GetColorA = Temp
End Function
1> Sai chổ nào mà nó báo lổi
Contants Expression Required
2> Liệu có phải ReDim lại không? Nếu có thì ReDim thế nào?
(Trình độ "tèo" quá, nghĩ mãi không ra)
 
Chẳng hiểu sau máy cậu làm được cái này thì mình lại không làm được! Còn cái bạn không làm được thì mình làm được nhỉ! Với code trên thì mình vẫn bị lỗi lổi ở dòng Mang.Rows.count và Mang.Columns.count. Mình sửa lại như vầy thì không thấy có vấn đề gì. Bạn xem nha!
PHP:
Function GetColorA(Mang As Range)     Application.Volatile (True)     Dim MyCell As Range, i As Long, iR As Long, iC As Long     Dim Temp(1 To 20, 1 To 2)     For Each MyCell In Mang         i = i + 1         iC = ((i - 1) Mod (Mang.Columns.Count)) + 1         iR = ((i - 1) \ (Mang.Columns.Count)) + 1         Temp(iR, iC) = MyCell.Font.Color     Next     GetColorA = Temp End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Chẳng hiểu sau máy cậu làm được cái này thì mình lại không làm được! Còn cái bạn không làm được thì mình làm được nhỉ!
Với code trên thì mình vẫn bị lỗi lổi ở dòng Mang.Rows.count và Mang.Columns.count. Mình sửa lại như vầy thì không thấy có vấn đề gì. Bạn xem nha!
PHP:
Function GetColorA(Mang As Range)
    Application.Volatile (True)
    Dim MyCell As Range, i As Long, iR As Long, iC As Long
    Dim Temp(1 To 20, 1 To 2)
    For Each MyCell In Mang
        i = i + 1
        iC = ((i - 1) Mod (Mang.Columns.Count)) + 1
        iR = ((i - 1) \ (Mang.Columns.Count)) + 1
        Temp(iR, iC) = MyCell.Font.Color
    Next
    GetColorA = Temp
End Function
Ah... ah... tôi hiểu rồi... đã Dim mà còn đưa biến vào trong thì e rằng không ăn nhỉ
vậy chẳng lẽ không có cách nào khai báo mãng cho vừa đủ kích thước ta cần sao?
Hiện giờ tôi đang tạm dùng:
Dim Temp(1 To 1000, 1 To 255)
Vô lý quá !!!
 
Web KT

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

Back
Top Bottom