Không cộng những số bị gạch ngang (2 người xem)

  • Thread starter Thread starter LienDong
  • Ngày gửi Ngày gửi

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

  • LienDong

    Thành viên thường trực
    Tham gia
    22/11/12
    Bài viết
    241
    Được thích
    46
    Nghề nghiệp
    Ai nói đúng thì làm!
    Em có bài toán như hình
    trong đó có số 300 bị gạch ngang, em không muốn cộng số này vào
    Kết quả mong muốn là 1.000
    Nhờ mong anh/chị và các bạn giúp đở (cách nào cũng được) Em cảm ơn
    1782987168352.png
     
    Em có bài toán như hình
    trong đó có số 300 bị gạch ngang, em không muốn cộng số này vào
    Kết quả mong muốn là 1.000
    Nhờ mong anh/chị và các bạn giúp đở (cách nào cũng được) Em cảm ơn
    View attachment 311966
    Dùng hàm tự tạo loại trừ giá trị format font gạch ngang
    Mã:
    Function SumUnStrikethrough(ByVal RngSum As Range) As Double
      Dim rng As Range
      For Each rng In RngSum
        If IsNumeric(rng) Then
          If rng.Font.Strikethrough = False Then SumUnStrikethrough = SumUnStrikethrough + rng.Value
        End If
      Next
    End Function
    Công thức ngoài sheet
    Mã:
    A1 =SumUnStrikethrough(A2:A4)
     
    @DeTong : Làm theo hướng dẫn ở #2. Chẻn code rồi dùng công thức như ảnh dưới. --> ra kết quả đúng
    Khi định dạng để tạo 1 số có gạch ngang thì cần nháy kép vào công thức sum mới tạo rồi nhấn Enter
    vbxnv.PNG
     
    - Nếu tạo dấu gạch ngang bằng Conditional Formatting thì hàm sẽ không chạy.
    - Muốn áp dụng được cho trường hợp dùng CF thì thêm DisplayFormat. Nhưng hàm này cũng chỉ chạy được khi gọi Macro thôi, gọi trực tiếp trong sheet cũng chạy không được. :)
    rng.DisplayFormat.Font.Strikethrough = False
     
    Dùng xlRangeValueXMLSpreadsheet = 11 là được.

    Hoặc thế này cũng xong.
    Mã:
    trangThaiGach = oCell.Parent.Evaluate("KiemTraGachNgangHienThi(" & _
        oCell.Address( _
            RowAbsolute:=False, _
            ColumnAbsolute:=False, _
            ReferenceStyle:=xlA1) & ")")
    
    Public Function KiemTraGachNgangHienThi(ByVal oCell As Range) As Variant
        KiemTraGachNgangHienThi = oCell.DisplayFormat.Font.Strikethrough
    End Function
     
    Xin vui lòng giải thích kết quả này ?!
    Tôi có làm thử thì ban đầu mới gõ xong công thức thì đúng. Thử với 1 vùng rộng hơn trong đó có 1 số ô trống thì vẫn đúng.

    q01.png

    Khi điền thêm số vẫn còn đúng. Nhưng định dạng gạch ngang cho số mới thì sẽ không còn đúng. Nhấn F9 không tính lại mà phải nhấn F2 và enter.
    Gỡ gạch ngang 1 số cũng không tính lại.

    q02.png

    Tạm kết luận: Hàm không tự tính lại khi thay đổi định dạng.

    Nhấn F9 cũng không. Tuy nhiên khi thêm câu lệnh

    Application.Volatile True

    Thì nhấn F9 có tính lại.
     

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

    Back
    Top Bottom