Xin hàm tự tạo giúp phát hiện một ô có phải là công thức hay không

Liên hệ QC

hktanh

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/8/19
Bài viết
112
Được thích
8
Giới tính
Nam
Chào các bạn, các bạn giúp mình bài toán về hàm tự tạo này nhé, đó là mình muốn có một hàm tự tạo có thể phát hiện một ô có chứa công thức hay không, mình lấy ví dụ các ô kiểu như sau: Các ô chứa =1+2 ; ="a"&"b" ; =9/0 (tuy là lỗi nhưng vẫn là công thức) ; =A2+1 ; =SUM(A1:A10) trả về kết quả là TRUE, còn các ô mà mình gõ tay trực tiếp kiểu như: abc ; 999 sẽ trả về FALSE nhé.
Cấu trúc hàm kiểm tra ô có phải công thức không, do mình đề xuất là =Tên hàm(ô cần kiểm tra) , nếu là công thức trả về TRUE, còn không phải trả về FALSE
- Nếu gõ trực tiếp công thức vào trong hàm, ví dụ: =Tên hàm(SUM(A1:A10)) -> Trả về TRUE (tất nhiên rồi) . Mình cảm ơn nhé
 

File đính kèm

  • (Help) Hàm kiểm tra công thức.xlsx
    11 KB · Đọc: 9
tôi đang hỏi dùng công thức cho nó tự động chứ không phải mấy cái mà cậu vừa nố đâu, hơn nữa thì số ô chứa công thức rất nhiều, tôi có bị điên đâu mà tô màu tất cả những ô này cho hoa mắt à
1/ Tôi đưa ra giải pháp là dựa theo nội dung của tiêu đề của bạn"giúp phát hiện một ô có phải là công thức hay không"?
2/ Tôi chỉ trả lời theo nội dung để giúp các thành viên khác có gặp phải thì tham khảo. Nếu bạn thấy không thích dùng và nhận thấy không cần thiết thì cứ bỏ qua (coi như tôi giúp cho các thành viên khác).
3/ Mục đích tô màu tất cả những ô này để xem cho nhanh, khi xem xong thì Ctrl + A và cho nó No Fill chỉ 30 giây là bỏ tất cả màu đi là xong thì sao gọi là hoa mắt.
 
Upvote 0
Bạn ơi mình phát hiện ra vấn đề này trong hàm của bạn, đó là nếu gõ công thức đơn giản kiểu =D13 hoặc ="abc" ; =99 chẳng hạn thì hàm của bạn vẫn trả về False nhé, bạn giúp mình sửa lỗi này với :sweatdrop:
Dùng hàm tự tạo
Mã:
Function IsFormulaVBA(ByVal Rng As Range) As Boolean
  If Rng.Formula <> CStr(Rng.Value) Then IsFormulaVBA = True
End Function
 
Upvote 0
Dùng hàm tự tạo
Mã:
Function IsFormulaVBA(ByVal Rng As Range) As Boolean
  If Rng.Formula <> CStr(Rng.Value) Then IsFormulaVBA = True
End Function
Anh Hiếu ơi em test thấy không đúng lắm.Hôm qua em cũng nghĩ cách này nhưng nó còn trường hợp này nữa.
 

File đính kèm

  • Book1.xlsm
    12.8 KB · Đọc: 6
Upvote 0
Anh Hiếu ơi em test thấy không đúng lắm.Hôm qua em cũng nghĩ cách này nhưng nó còn trường hợp này nữa.
Trường hợp nầy hiếm khi xảy ra trong thực tế
Code xét thêm tình huống sẽ phức tạp
Mã:
Function IsFormulaVBA(ByVal Rng As Range) As Boolean
  Dim tmp$, dc$
  tmp = Rng.Formula
  If tmp <> CStr(Rng.Value) Then
    IsFormulaVBA = True
  ElseIf InStr(1, tmp, "=") = 1 Then
    On Error Resume Next
    dc = Range(Replace(tmp, "=", ""))(1, 1).Address(0, 0)
    If Err.Number Then Err.Clear: Exit Function
    If Range(dc).Value = Replace(tmp, "$", "") And dc <> Rng.Address(0, 0) Then
      IsFormulaVBA = True
    End If
  End If
End Function
 
Upvote 0
Bạn ơi mình phát hiện ra vấn đề này trong hàm của bạn, đó là nếu gõ công thức đơn giản kiểu =D13 hoặc ="abc" ; =99 chẳng hạn thì hàm của bạn vẫn trả về False nhé, bạn giúp mình sửa lỗi này với :sweatdrop:
Kêu gì nữa? Ngay bài #4, #9 tôi đã nói rõ rồi mà bạn lờ đi, còn stao thì một mực khẳng định bạn đã xác nhận kết quả (hài lòng?) mà bạn cũng có lên tiếng đâu. Bây giờ lại kêu.
 
Upvote 0
Kêu gì nữa? Ngay bài #4, #9 tôi đã nói rõ rồi mà bạn lờ đi, còn stao thì một mực khẳng định bạn đã xác nhận kết quả (hài lòng?) mà bạn cũng có lên tiếng đâu. Bây giờ lại kêu.
phát hiện ra thêm thì tôi mới nói chứ, lúc đó tôi đã nói là hài lòng à, xem lại đi
 
Upvote 0
Tô không nói các bạn một ngày chỉ đụng đến Excel 10 phút. Nhưng nếu làm cỡ 1 tiếng trở lên thì nên cập nhật tối thiểu 2013; nếu phân nửa thì giờ là Excel thì nên dùng phiên bản mới nhất.
Khổ cái là nhiều công ty còn nghèo lắm bác ơi. Nhiều công ty nghèo tới mức chế độ đãi ngộ không cao nên cứ nơm nớp lo sợ công nhân nó thải mình nên lúc nào cũng phải nịnh nọt để họ không bỏ đi nơi khác. Chưa đến nỗi cơm bưng nước rót nhưng vd. bỏ qua cho họ một vài cẩu thả ̣(thôi anh em người ta hay như thế thì cậu tìm cách "khắc phục" đi. Hiểu là "đối phó"). Còn về Excel thì không phải mọi người đều có Excel mới. Có công ty còn dùng Excel 2007. Tất cả những cái tôi viết ở đây (nghèo, chế độ đãi ngộ, công nhân nó thải mình, "khắc phục", Excel 2007) là có thực, có trong công ty của cô quân nhân xinh đẹp đó. OT thì phải. :D

Theo tôi nên có tối thiểu là 2010. Còn mới nhất thì không phải ai cũng có khả năng. Hôm nay là mới nhất, 2 năm sau lại có "mới nhất" nữa, nhiều người không có khả năng như thế.
 
Lần chỉnh sửa cuối:
Upvote 0
Khổ cái là nhiều công ty còn nghèo lắm bác ơi. Nhiều công ty nghèo tới mức chế độ đãi ngộ không cao nên cứ nơm nớp lo sợ công nhân nó thải mình nên lúc nào cũng phải nịnh nọt để họ không bỏ đi nơi khác. Chưa đến nỗi cơm bưng nước rót nhưng vd. bỏ qua cho họ một vài cẩu thả ̣thôi anh em người ta hay như thế thì cậu tìm cách "khắc phục" đi. Hiểu là "đối phó"). Còn về Excel thì không phải mọi người đều có Excel mới. Có công ty còn dùng Excel 2007. Tất cả những cái tôi viết ở đây (nghèo, chế độ đãi ngộ, công nhân nó thải mình, "khắc phục", Excel 2007) là có thực, có trong công ty của cô quân nhân xinh đẹp đó. OT thì phải. :D

Theo tôi nên có tối thiểu là 2010. Còn mới nhất thì không phải ai cũng có khả năng. Hôm nay là mới nhất, 2 năm sau lại có "mới nhất" nữa, nhiều người không có khả năng như thế.
công ty tôi mọi máy đều dùng 2010 nên tôi không thể bắt họ phải cài hết lên bản 365 được
 
Upvote 0
phát hiện ra thêm thì tôi mới nói chứ,
Ngay ở bài #6 tôi đã nói sai. Sai =SUM(...) hay sai =D13 thì cũng là sai thôi. Đã sai mà tôi chỉ ra ngay ở bài #6 có nghĩa là code phải vứt ngay vào sọt rác. Sao lại phải cố thử để "phát hiện ra thêm"? Vứt vào sọt rác ngay từ đầu thì khỏi phải mất công "phát hiện ra thêm"
lúc đó tôi đã nói là hài lòng à, xem lại đi
Bạn mới cần xem lại. Hãy đọc kỹ bài của tôi trước khi trả lời. Tôi viết rất rõ
còn stao thì một mực khẳng định bạn đã xác nhận kết quả (hài lòng?) mà bạn cũng có lên tiếng đâu
Tôi không nói là bạn khẳng định. Tôi chỉ nói là bạn không lên tiếng khi stao khẳng định như thế. Đọc văn tiếng Việt còn không hiểu sao?
Bài đã được tự động gộp:

công ty tôi mọi máy đều dùng 2010 nên tôi không thể bắt họ phải cài hết lên bản 365 được
Bạn có lẽ trích nhầm người rồi. Trong bài của tôi đâu có chỗ tôi nói là phải cài hết lên bản 365?
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi đã xóa các bài viết không theo chủ đề.
Mong những thành viên tham gia thảo luận tuân thủ Nội quy diễn đàn.
Trân trọng!
 
Upvote 0
Web KT
Back
Top Bottom