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 (1 người xem)

  • Thread starter Thread starter hktanh
  • Ngày gửi Ngày gửi
Liên hệ QC

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

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

Vầy đúng yêu cầu không bạn
Bạn khôn thật đấy %#^#$
Bài đã được tự động gộp:

Vầy đúng yêu cầu không bạn
Bạn ơi lúc mình viết dạng chuỗi là '=abc chẳng hạn thì nó vẫn trả về TRUE bạn nhé, bạn xem lại giúp mình với, mà không biết có cách nào có thể xử lý triệt để được việc kiểm tra có phải công thức không nhỉ, dù sao thì cách nghĩ của bạn cũng rất hay :sweatdrop:
 

File đính kèm

Upvote 0
=kiemtra(H4) trả về TRUE dù H4 chỉ là ô diễn giải.
 
Upvote 0
Bạn khôn thật đấy %#^#$
Bài đã được tự động gộp:


Bạn ơi lúc mình viết dạng chuỗi là '=abc chẳng hạn thì nó vẫn trả về TRUE bạn nhé, bạn xem lại giúp mình với, mà không biết có cách nào có thể xử lý triệt để được việc kiểm tra có phải công thức không nhỉ, dù sao thì cách nghĩ của bạn cũng rất hay :sweatdrop:
Fix luôn lỗi dạng diễn giải nha. Bản chất sau dấu bằng là formula, còn muốn chi tiết và có thành phần toán tử nào nữa thì bạn có thể thêm vào.
 

File đính kèm

Upvote 0
Sao lại rắc rối thêm làm gì?
G4 =SUM(A1:A10) và hàm trả về FALSE

ct.HasFormula là được
 
Upvote 0
Thử đi rồi biết.
Bản chất .HasFormula là tính sau dấu "=" là formula. Nên kiểu cắt cớ là "=abc" = False phải thêm vậy đó bạn.
Thử gì nữa?
Trong G4 rõ ràng có công thức mà hàm trả về FALSE thì rõ như ban ngày rồi còn gì phải lăn tăn. Người ta mong đợi TRUE mà nhận được FALSE thì sai rồi chứ thử gì nữa?
.
Bài đã được tự động gộp:

Chắc chắc là không có đúng và không cần VBA gì. MS Excel có sẵn hàm ISFORMULA siêu xịn rồi.

=ISFORMULA(G4)
Vậy là được.
Đây là box Lập trình mà.
Và người ta có thể muốn kiểm tra trong khi chạy một đoạn code nào đó.
 
Upvote 0
Thử gì nữa?
Trong G4 rõ ràng có công thức mà hàm trả về FALSE thì rõ như ban ngày rồi còn gì phải lăn tăn. Người ta mong đợi TRUE mà nhận được FALSE thì sai rồi chứ thử gì nữa?
.
Bài đã được tự động gộp:


ây là box Lập trình mà.
Và người ta có thể muốn kiểm tra trong khi chạy một đoạn code nào đó.
Bình tĩnh xem lại đi bạn. Chủ thớt người ta đã xác nhận kết quả rồi kìa
Đọc kỹ đoạn này của mình: "Bản chất sau dấu bằng là formula, còn muốn chi tiết và có thành phần toán tử nào nữa thì bạn có thể thêm vào. "
 
Upvote 0
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é
Sử dụng công cụ có sẳn, rất nhanh lẹ:
Chọn vùng cần kiểm tra, nhấn Ctrl + G, nhấn nút Special > chọn FormuLas rồi nhấn OK, nó sẽ chọn tất cả các cell có chứa hàm (hình 1), xong click phải chuột tô cho nó một màu để phân biệt (hình 2).

Hình 1.
A_Ham.GIF

Hình 2.
A_Mau.GIF
 
Upvote 0
Bình tĩnh xem lại đi bạn. Chủ thớt người ta đã xác nhận kết quả rồi kìa
Đọc kỹ đoạn này của mình: "Bản chất sau dấu bằng là formula, còn muốn chi tiết và có thành phần toán tử nào nữa thì bạn có thể thêm vào. "
Mình thấy nếu hàm mà không sử dụng các dấu mà bạn khai báo thì sẽ sai kết quả trả về False.
 
Upvote 0
Bình tĩnh xem lại đi bạn. Chủ thớt người ta đã xác nhận kết quả rồi kìa
Đọc kỹ đoạn này của mình: "Bản chất sau dấu bằng là formula, còn muốn chi tiết và có thành phần toán tử nào nữa thì bạn có thể thêm vào. "
Xem gì? Xác nhận kết quả gì? Yêu cầu đặt ra là nếu ô có công thức thì phải trả về TRUE. G4 rõ ràng có công thức =SUM(A1:A10) mà hàm trả về FALSE thì rõ ràng là sai chứ cần gì ông A ông B xác nhận hay không? Nếu ông A nói là ông ta hài lòng thì kết quả như thế vẫn là sai. Sự thật là sự thật, đâu phải là ông A gật đầu thì mới là sự thật, ông A lắc đầu thì đó không là sự thật.

Bạn à, tôi không viết thư riêng, không trao đổi riêng. Khi tôi trả lời trên GPE thì nếu tôi viết cho chủ chủ đề 1 thì viết cho những người khác 10. Nhiều khi viết nhưng chỉ viết, chỉ lưu ý cho những người khác, không trả lời trực tiếp cho chủ chủ đề.
Với một vấn đề đặt ra nhiều khi người hỏi hài lòng với giải pháp tạm bợ, không hoàn chỉnh. Nhiều trường hợp công thức, code đưa ra sai nhưng do người hỏi không test kỹ với những dữ liệu đa dạng nên viết: "Chuẩn không cần chỉnh", "Công thức hay quá". Đã nhiều lần tôi chỉ ra là "Công thức hay quá, chuẩn không cần chỉnh" kia sai. Vì thế tôi không quan tâm tới chuyện người hỏi hài lòng hay không. Nếu giải pháp đưa ra không giải quyết đúng yêu cầu được ghi rõ ràng trên giấy trắng mực đen thì tôi sẽ ý thức cho những người đọc bây giờ và trong tương lai. Tôi không quan tâm tới ý kiến của người hỏi vì nhiều khi họ không ý thức được là giải pháp chưa chuẩn hoặc họ hài lòng với những gì nhận được. Nhưng những người đọc khác có vấn đề tương tự thì chưa chắc họ hài lòng. Tôi ý thức cho những người như thế. Tôi không trao đổi riêng với người hỏi qua tin nhắn, thư riêng. Tôi viết trên diễn đàn có hàng nghìn người đọc. Không phải vô cớ mà người ta quyết định là tất cả các bài viết là tài sản chung của diễn đàn, phục vụ không chỉ người hỏi mà còn rất nhiều người khác nữa.
Bài đã được tự động gộp:

Em căn cứ vào câu cuối (không biết câu đó chủ thớt chốt hạ chưa?)

View attachment 227365
Thì người ta có nói rõ đâu. Hàm có thể dùng để lúc này nhập trên sheet lúc khác để gọi trong code. Yêu cầu của người ta thế, và người ta hỏi trong Lập trình. Bài của tôi cũng chỉ là ý kiến như bài của bạn thôi.. Tôi không có ý gì khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Theo quan điểm của tôi thì kiểm tra và tô màu ngay các Cell chứa hàm luôn, chỉ cần nhìn lướt qua là biết chỗ nào có hàm rồi.
Nếu một bảng tính có vài chục cột có chứa hàm mà dùng cột phụ để kiểm tra từng cột thì chắc hết hơi.

Giả sử A3 là Cell chứa tiêu đề thì thử code sau:

Mã:
Sub ToMau_Ham()
    Sheet1.Range("A3").CurrentRegion.Interior.ColorIndex = xlNone
    Sheet1.Range("A3").CurrentRegion.SpecialCells(xlCellTypeFormulas, 23).Select
    With Selection.Interior
        .ColorIndex = 27
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Fix luôn lỗi dạng diễn giải nha. Bản chất sau dấu bằng là formula, còn muốn chi tiết và có thành phần toán tử nào nữa thì bạn có thể thêm vào.
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:
 

File đính kèm

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:
Còn cố đấm ăn xôi gì nữa bạn. Không lại được với hàm có sẵn của MS Excel đâu. Người ta đã thôi rồi, bạn còn níu kéo làm khó người ta.

Hàm ISFORMULA() là chuẩn cho bạn rồi.
 
Upvote 0
Còn cố đấm ăn xôi gì nữa bạn. Không lại được với hàm có sẵn của MS Excel đâu. Người ta đã thôi rồi, bạn còn níu kéo làm khó người ta.

Hàm ISFORMULA() là chuẩn cho bạn rồi.
Excel 2010 mình không thấy có hàm IsFormula nhé
Bài đã được tự động gộp:

Fix luôn lỗi dạng diễn giải nha. Bản chất sau dấu bằng là formula, còn muốn chi tiết và có thành phần toán tử nào nữa thì bạn có thể thêm vào.

Mình sửa lại hàm của bạn như vậy có được không nhỉ :")) mình mầy mò chút chứ mình phát hiện ra là nếu hàm của bạn mà gặp phải công thức đơn giản như =D13 hoặc =99 hoặc ="abc" thì sẽ trả về False ý

Function kiemtra(ct As Range) As Variant
'If Left(ct.Formula, 1) = "=" Then kiemtra = True Else kiemtra = False
If ct.HasFormula = True And (InStr(ct.Formula, Address) > 0 Or InStr(ct.Formula, Value) > 0 Or InStr(ct.Formula, Text) > 0 Or InStr(ct.Formula, "(") > 0 Or InStr(ct.Formula, "+") > 0 Or InStr(ct.Formula, "-") > 0 Or InStr(ct.Formula, "*") > 0 Or InStr(ct.Formula, "/") > 0 Or InStr(ct.Formula, "&") > 0) Then
kiemtra = True
Else
kiemtra = False
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:
Sao bạn hay lăng tăng thế nhĩ:
1/ Bài 11 và 15 tôi đã đưa ra 02 cách để bạn có thể lựa chọn 1 cách cho phù hợp.
2/ Với cách làm trên có mấy cái thuận lợi sau:
- Tìm ngay tới những chỗ hoặc Cell nào có chứa hàm một cách nhanh chóng nhất (nếu sử dụng dấu = trong tính toán hoặc Link bất kỳ chỗ nào).
- Có thể áp dụng cho File có nhiều cột và quá quá nhiều dòng chứa dữ liệu.
- Không làm cho File bị ì ạch khi sử dụng.
 
Upvote 0
Sao bạn hay lăng tăng thế nhĩ:
1/ Bài 11 và 15 tôi đã đưa ra 02 cách để bạn có thể lựa chọn 1 cách cho phù hợp.
2/ Với cách làm trên có mấy cái thuận lợi sau:
- Tìm ngay tới những chỗ hoặc Cell nào có chứa hàm một cách nhanh chóng nhất (nếu sử dụng dấu = trong tính toán hoặc Link bất kỳ chỗ nào).
- Có thể áp dụng cho File có nhiều cột và quá quá nhiều dòng chứa dữ liệu.
- Không làm cho File bị ì ạch khi sử dụng.
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 à
 
Upvote 0
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

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

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

Back
Top Bottom