Hàm nối ô phép tính.. (3 người xem)

Liên hệ QC

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

Bạn đang cần cái gọi là "tự động" cho cột diễn giải. Nhưng bạn lại nói nó không theo một công thức nhất định nào, thế rồi theo bạn cái quy luật chung chung để làm việc này là thế nào?? (Tức lấy ô nào nhân ô nào cộng ô nào cho tất cả trường hợp)
Mình muốn thay vì mình phải gõ ="("&H7&"+"&H8&")*"H9&"*"H10
Thì mình chỉ phải gõ =DG((H7+H8)*H9*H10
Chứ mình không muốn tạo hàm tính toán cho bất kỳ cái gì cả
 
Mình muốn thay vì mình phải gõ ="("&H7&"+"&H8&")*"H9&"*"H10
Thì mình chỉ phải gõ =DG((H7+H8)*H9*H10
Chứ mình không muốn tạo hàm tính toán cho bất kỳ cái gì cả
Rõ rồi, vậy thì bài bác HieuCD phía trên đáp ứng được nhu cầu của bạn!
 
Có 2 cách dùng hàm DT
1/ có công thức Khối lượng ô E7: =(H7+H8)*H9+H11
D7 =DT(E7)
2/ Nhập trực tiếp, tham số phải nằm trong " "
D8 =DT("(H7+H8)*H9+H11")
Cảm ơn bác, nhưng hàm có 1 vài lỗi bác fix giúp mình với đc ko ạ
1. Hàm có dấu ngoặc "(" thì chạy đc, còn ko có thì bị #Value
2. Khi mình thay số liệu ở các ô đầu vào H7,8,9,10 thì hàm ko tự nhảy số, phải tích vào ô rồi Enter lại.
New Bitmap Image.jpg
 
Cảm ơn bác, nhưng hàm có 1 vài lỗi bác fix giúp mình với đc ko ạ
1. Hàm có dấu ngoặc "(" thì chạy đc, còn ko có thì bị #Value
2. Khi mình thay số liệu ở các ô đầu vào H7,8,9,10 thì hàm ko tự nhảy số, phải tích vào ô rồi Enter lại.
View attachment 261079
Chỉnh tí xíu
Mã:
Function DT(ByVal rng As Variant) As String
  Dim S, Arr(), CongThuc$, tmp$, tt$, j&, i&
 
  Application.Volatile
  tt = "()+-*/"
  ReDim Arr(2 To 8)
  If TypeName(rng) = "Range" Then
    CongThuc = Mid(rng.Formula, 2, 500)
  Else
    CongThuc = rng
  End If
  tmp = Mid(CongThuc, 1, Len(CongThuc))
  For j = 1 To 6
    tmp = Replace(tmp, Mid(tt, j, 1), " ")
  Next j
  S = Split(Application.Trim(Replace(tmp, "$", "")), " ")
  For j = 0 To UBound(S)
    n = Len(S(j))
    If UBound(Arr) < n Then ReDim Preserve Arr(2 To n)
    Arr(n) = Arr(n) & "," & S(j)
  Next j
  For j = UBound(Arr) To 2 Step -1
    S = Split("," & Arr(j), ",")
    For i = 2 To UBound(S)
      CongThuc = Replace(CongThuc, S(i), Range(S(i)).Value)
    Next i
  Next j
  DT = CongThuc
End Function
 
Chỉnh tí xíu
Mã:
Function DT(ByVal rng As Variant) As String
  Dim S, Arr(), CongThuc$, tmp$, tt$, j&, i&
 
  Application.Volatile
  tt = "()+-*/"
  ReDim Arr(2 To 8)
  If TypeName(rng) = "Range" Then
    CongThuc = Mid(rng.Formula, 2, 500)
  Else
    CongThuc = rng
  End If
  tmp = Mid(CongThuc, 1, Len(CongThuc))
  For j = 1 To 6
    tmp = Replace(tmp, Mid(tt, j, 1), " ")
  Next j
  S = Split(Application.Trim(Replace(tmp, "$", "")), " ")
  For j = 0 To UBound(S)
    n = Len(S(j))
    If UBound(Arr) < n Then ReDim Preserve Arr(2 To n)
    Arr(n) = Arr(n) & "," & S(j)
  Next j
  For j = UBound(Arr) To 2 Step -1
    S = Split("," & Arr(j), ",")
    For i = 2 To UBound(S)
      CongThuc = Replace(CongThuc, S(i), Range(S(i)).Value)
    Next i
  Next j
  DT = CongThuc
End Function
chuẩn rồi thank bác nhé
 
Web KT

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

Back
Top Bottom