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:
Function GetColor(MyCell As Range) As Long
Application.Volatile (False)
If MyCell.Count <> 1 Then Exit Function
GetColor = MyCell.Font.Color
End Function
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
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
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!
Một hàng 2 chiều sẽ thể hiện Array(hàng, cột), giống như tọa độ (x,y)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.
Câu lệnh 2 có thể thay bằng: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
[B][SIZE=3][COLOR=purple]Dim Temp( 1 To Mang.Cells.Count + 9, 0)[/COLOR][/SIZE][/B]
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]
Dim Temp( 1 To Mang.Count, 0)
Nhưng tại sao không phải là:
con số 9 có ý nghĩa gì vậy bác ?PHP:Dim Temp( 1 To Mang.Count, 0)
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ố 0Bác tham khảo nhé :
Thân!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
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
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.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?
Dỉ nhiên là vậy rồi vì code của Mr OkeBab ghi rằng: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.
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ònDim Temp(1 To 1000, 0)
Là F9 vô tưDim Temp(1 To 20, 0)
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
2> Liệu có phải ReDim lại không? Nếu có thì ReDim thế nào?Contants Expression Required
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ỉ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
Vô lý quá !!!Dim Temp(1 To 1000, 1 To 255)