Giải pháp nào để gỡ bỏ hàm Round (là hàm ngoài cùng) trong tất cả các ô trong bảng?

Liên hệ QC

nguyenmanhnam

Thành viên tiêu biểu
Tham gia
24/7/10
Bài viết
434
Được thích
266
Bảng tính của bên em xuất phát từ việc làm tròn các kết quả thành phần số liệu để các số trên màn hình lôgic về số liệu (tránh tình trạng 3+5=9, vì thực chất 3 là 3,3 và 5 là 5,45 chẳng hạn). Tuy nhiên, phòng kinh doanh và phòng kế toán theo quy định của Công ty phải làm theo cách cách khác nhau (làm tròn các kết quả thành phần ở những giai đoạn khác nhau) nên kết quả cuối cùng lệch nhau 1 đơn vị.





Hôm qua khi em đi công tác, các thành viên trong phòng tự động sửa bảng của em lung tung (dùng hàm Round chẳng theo quy luật gì cả), nay em muốn bỏ chúng đi thì số liệu cần bỏ quá khủng. Vậy hàm Round khi là hàm ngoài cùng có cách nào bỏ đi hàng loạt không ah.
Ví dụ: Round(sum(A1:A10);0); Round(sum(B1:B20);-3)...có cách nào bỏ chúng đi hàng loại không?
Em xin cảm ơn
 
Bảng tính của bên em xuất phát từ việc làm tròn các kết quả thành phần số liệu để các số trên màn hình lôgic về số liệu (tránh tình trạng 3+5=9, vì thực chất 3 là 3,3 và 5 là 5,45 chẳng hạn). Tuy nhiên, phòng kinh doanh và phòng kế toán theo quy định của Công ty phải làm theo cách cách khác nhau (làm tròn các kết quả thành phần ở những giai đoạn khác nhau) nên kết quả cuối cùng lệch nhau 1 đơn vị.





Hôm qua khi em đi công tác, các thành viên trong phòng tự động sửa bảng của em lung tung (dùng hàm Round chẳng theo quy luật gì cả), nay em muốn bỏ chúng đi thì số liệu cần bỏ quá khủng. Vậy hàm Round khi là hàm ngoài cùng có cách nào bỏ đi hàng loạt không ah.
Ví dụ: Round(sum(A1:A10);0); Round(sum(B1:B20);-3)...có cách nào bỏ chúng đi hàng loại không?
Em xin cảm ơn
Dùng VBA đi! Chỉ là bài toán xử lý chuổi thôi
Ví dụ =Round(sum(A1:A10);0) thì sẽ cắt lấy từ ký tự thứ 8 đến trước dấu phân cách công thức cuối cùng
Demo thử 1 code:
PHP:
Sub Test()
  Dim Clls As Range, Tmp As String
  On Error Resume Next
  With Sheet1.UsedRange
    For Each Clls In .SpecialCells(3)
      If Left(Clls.Formula, 7) = "=ROUND(" Then
        Tmp = Clls.Formula
        Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - 10)
        Clls.Formula = Tmp
      End If
    Next
  End With
End Sub
Thử nghiệm trước cho chắc nha
 
Muốn chắc ăn thì phải tìm dấu phân cách (";") cuối cùng, vì như tác giả nói: có cả Round(...;-3)
 
Code của ndu thay câu

Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - 10)

Thành câu này

Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - 12 + InStr(Right(Tmp, 4), ","))

là được.

Hoặc muốn chắc ăn hơn:

Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - 13 + InStr(Right(Tmp, 5), ","))

Đề phòng khi tính toán vũ trụ (làm tròn trên 9 con số) !!!

Tổng quát:

Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - (n+8) + InStr(Right(Tmp, n), ",")) ' ; với n>=4

 
Lần chỉnh sửa cuối:
Code của ndu thay câu

Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - 10)
Thành câu này
Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - (n+8) + InStr(Right(Tmp, n), ",")) ' ; với n>=4
Nếu dùng InstrRev thì khỏi suy nghĩ gì nữa Thanhlanh ui.
PHP:
Sub Test()
  Dim Clls As Range, Tmp As String
  On Error Resume Next
  With Sheet1.UsedRange
    For Each Clls In .SpecialCells(3)
      If Left(Clls.Formula, 7) = "=ROUND(" Then
        Tmp = Clls.Formula
        LastSeparator = InStrRev(Tmp, ",")
        Tmp = Left(Tmp, LastSeparator - 1)
        Tmp = replace(Tmp, "ROUND(", "")
        Clls.Formula = Tmp
      End If
    Next
  End With
End Sub

Hoặc như cũ:
PHP:
        LastSeparator = InStrRev(Tmp, ",")
        Tmp = "=" & Mid(Tmp, 8, LastSeparator - 8)
 
Lần chỉnh sửa cuối:
Nếu dùng InstrRev thì khỏi suy nghĩ gì nữa Thanhlanh ui.
PHP:
Sub Test()
  Dim Clls As Range, Tmp As String
  On Error Resume Next
  With Sheet1.UsedRange
    For Each Clls In .SpecialCells(3)
      If Left(Clls.Formula, 7) = "=ROUND(" Then
        Tmp = Clls.Formula
        LastSeparator = InStrRev(Tmp, ",")
        Tmp = Left(Tmp, LastSeparator - 1)
        Tmp = replace(Tmp, "ROUND(", "")
        Clls.Formula = Tmp
      End If
    Next
  End With
End Sub

Hoặc như cũ:
PHP:
        LastSeparator = InStrRev(Tmp, ",")
        Tmp = "=" & Mid(Tmp, 8, LastSeparator - 8)

Tại đệ không nhớ là có hàm InStrRev nên vất vả vậy đó! (thật tình đệ chưa nắm bắt hết được các hàm có sẵn của VBA).
Như cũ thấy chắc ăn hơn, dùng replace nhỡ trong công thức có nhiều round thì chết.
 
Nếu dùng InstrRev thì khỏi suy nghĩ gì nữa Thanhlanh ui.
PHP:
Sub Test()
  Dim Clls As Range, Tmp As String
  On Error Resume Next
  With Sheet1.UsedRange
    For Each Clls In .SpecialCells(3)
      If Left(Clls.Formula, 7) = "=ROUND(" Then
        Tmp = Clls.Formula
        LastSeparator = InStrRev(Tmp, ",")
        Tmp = Left(Tmp, LastSeparator - 1)
        Tmp = replace(Tmp, "ROUND(", "")
        Clls.Formula = Tmp
      End If
    Next
  End With
End Sub

Hoặc như cũ:
PHP:
        LastSeparator = InStrRev(Tmp, ",")
        Tmp = "=" & Mid(Tmp, 8, LastSeparator - 8)
Chổ này Tmp = replace(Tmp, "ROUND(", "") không được sư phụ ơi! Ai biết được "trong ruột" còn có hàm ROUND nữa không
Cứ chắc ăn là cắt bỏ hàm ROUND đầu tiên rồi lấy đến trước dấu phân cách cuối cùng
Giống cái NHƯ CỦ của sư phụ sẽ yên tâm hơn
(thông cảm nha, tại em hay sai chính tả... Ẹc... Ẹc...)
 
Lần chỉnh sửa cuối:
Như CỦ, OK ngay.
Thật ra, thỉnh thoảng để lộ sơ hở xem có bị bắt không, ai dè bị tóm gọn.
May, đã chừa 1 đường binh.
 
Dùng VBA đi! Chỉ là bài toán xử lý chuổi thôi
Ví dụ =Round(sum(A1:A10);0) thì sẽ cắt lấy từ ký tự thứ 8 đến trước dấu phân cách công thức cuối cùng
Demo thử 1 code:
PHP:
Sub Test()
  Dim Clls As Range, Tmp As String
  On Error Resume Next
  With Sheet1.UsedRange
    For Each Clls In .SpecialCells(3)
      If Left(Clls.Formula, 7) = "=ROUND(" Then
        Tmp = Clls.Formula
        Tmp = "=" & Mid(Tmp, 8, Len(Tmp) - 10)
        Clls.Formula = Tmp
      End If
    Next
  End With
End Sub
Thử nghiệm trước cho chắc nha
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom