Mình có thấy hàm Dvlaue trên diễn đàn. nhờ cao thủ chỉ giáo giúp ạ (1 người xem)

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

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

duc3335

Thành viên mới
Tham gia
22/10/13
Bài viết
4
Được thích
1
Em thấy trên diễn đàn có File Dvalue dùng để bóc tách khối lượng rất nhanh. Mình Add-ins vào chỉ sử dụng được trên máy của mình thôi. khi Mình gửi File sang cho máy tính khác bị lỗi. hoặc máy tính khác cũng phải Add-Ins vào và chỉnh lại đường link. rất bất tiện. Mình thấy có người áp hàm này trực tiếp vào File Excel và gửi đi không bị lỗi mặc dù máy khác không cài thêm hàm này. (hỏi thì ng ta ko nói giữ nghề)
Em nhờ các bác chỉ giáo giúp ạ
 

File đính kèm

Em thấy trên diễn đàn có File Dvalue dùng để bóc tách khối lượng rất nhanh. Mình Add-ins vào chỉ sử dụng được trên máy của mình thôi. khi Mình gửi File sang cho máy tính khác bị lỗi. hoặc máy tính khác cũng phải Add-Ins vào và chỉnh lại đường link. rất bất tiện. Mình thấy có người áp hàm này trực tiếp vào File Excel và gửi đi không bị lỗi mặc dù máy khác không cài thêm hàm này. (hỏi thì ng ta ko nói giữ nghề)
Em nhờ các bác chỉ giáo giúp ạ
Bạn biết mở cửa sổ VBE không?
Mở file .xla, Vào cửa sổ VBE, trong module có Function này:
PHP:
Public Function DValue(Expr)
    Char = Expr
    Sent = Space(0)
    ABC = "0123456789+-*/().^" & Space(1)
    XYZ = "0123456789" & Space(1)
    For m = 2 To 3
        Met = "m" & m
        Temp = InStr(1, Char, Met)
        Do While Temp > 0
            If Temp > 0 Then
                Char = Left(Char, Temp) & Mid(Char, Temp + 2)
            End If
            Temp = InStr(1, Char, Met)
        Loop
    Next
    For i = 1 To Len(Char)
        KyTu = Mid(Char, i, 1)
        If InStr(1, ABC, KyTu) > 0 Then
            Sent = Sent & KyTu
        Else
            Select Case KyTu
                Case ":"
                    Left_ = Mid(Char, i - 1, 1)
                    Right_ = Mid(Char, i + 1, 1)
                    If InStr(1, XYZ, Right_) > 0 Then
                        Sent = Sent & "/"
                    End If
                Case ","
                    Sent = Sent & "."
                Case "%"
                    Sent = Sent & "/100"
                Case "x", "X"
                    Left_ = Mid(Char, i - 1, 1)
                    Right_ = Mid(Char, i + 1, 1)
                    If InStr(1, XYZ, Right_) > 0 Then
                        Sent = Sent & "*"
                    End If
                Case "^"
                    Sent = Sent & "^"
            End Select
        End If
    Next
    DValue = Application.Evaluate(Sent)
End Function
- Bạn copy nó vào Module trong file của bạn. Hoặc:
- Nếu dữ liệu của bạn luôn chuẩn (*) thì có thể chép cái này vào Module file bạn thay cho DValue()
Lúc này trong file luôn có Module chứa Function TinhChuoi(), mang đi đâu nó cũng "đi theo".
PHP:
Public Function TinhChuoi(ByVal Rng As Range) As Double
TinhChuoi = Evaluate(Rng.Value)
End Function
(*) Dùng đúng các dấu +, -, *, / ... của Excel.
Ví dụ A1 chứa chuỗi biểu thức cần tính toán.
B1=TinhChuoi(A1)
------------------------
Chú ý sửa lại tiêu đề bài viết :

"Dvlaue"
 
Lần chỉnh sửa cuối:
Nhờ bác hướng dẫn cụ thể với ạ
 
Bạn biết mở cửa sổ VBE không?
Mở file .xla, Vào cửa sổ VBE, trong module có Function này:
PHP:
Public Function DValue(Expr)
    Char = Expr
    Sent = Space(0)
    ABC = "0123456789+-*/().^" & Space(1)
    XYZ = "0123456789" & Space(1)
    For m = 2 To 3
        Met = "m" & m
        Temp = InStr(1, Char, Met)
        Do While Temp > 0
            If Temp > 0 Then
                Char = Left(Char, Temp) & Mid(Char, Temp + 2)
            End If
            Temp = InStr(1, Char, Met)
        Loop
    Next
    For i = 1 To Len(Char)
        KyTu = Mid(Char, i, 1)
        If InStr(1, ABC, KyTu) > 0 Then
            Sent = Sent & KyTu
        Else
            Select Case KyTu
                Case ":"
                    Left_ = Mid(Char, i - 1, 1)
                    Right_ = Mid(Char, i + 1, 1)
                    If InStr(1, XYZ, Right_) > 0 Then
                        Sent = Sent & "/"
                    End If
                Case ","
                    Sent = Sent & "."
                Case "%"
                    Sent = Sent & "/100"
                Case "x", "X"
                    Left_ = Mid(Char, i - 1, 1)
                    Right_ = Mid(Char, i + 1, 1)
                    If InStr(1, XYZ, Right_) > 0 Then
                        Sent = Sent & "*"
                    End If
                Case "^"
                    Sent = Sent & "^"
            End Select
        End If
    Next
    DValue = Application.Evaluate(Sent)
End Function
- Bạn copy nó vào Module trong file của bạn. Hoặc:
- Nếu dữ liệu của bạn luôn chuẩn (*) thì có thể chép cái này vào Module file bạn thay cho DValue()
Lúc này trong file luôn có Module chứa Function TinhChuoi(), mang đi đâu nó cũng "đi theo".
PHP:
Public Function TinhChuoi(ByVal Rng As Range) As Double
TinhChuoi = Evaluate(Rng.Value)
End Function
(*) Dùng đúng các dấu +, -, *, / ... của Excel.
Ví dụ A1 chứa chuỗi biểu thức cần tính toán.
B1=TinhChuoi(A1)
------------------------
Chú ý sửa lại tiêu đề bài viết :

"Dvlaue"
Em nhờ bác Ba tê giúp em ở file cụ thể này với ạ.
1. Ở code của hàm Dvalue: Với dữ liệu đầu vào ở ô diễn giải lớn thì nó trả kết quả #Value ạ, anh xem có thể để giải tham số rộng hơn 1 xíu được không ạ.
2. Như bạn chủ Topic ở trên đề xuất, em cũng muốn đưa hẳn đoạn code này vào module của file luôn, nên em chọn hàm TinhChuoi của anh. Em đã thử đoạn code của anh, tuy nhiên định dạng hình như anh xây dựng trên đơn vị là mm, nên ở file của em không áp dụng được. Em đã thử nhập số liệu ít thì cấu trúc hàm TinhChuoi của anh trả ra được giá trị. Nhưng khi em tăng dữ liệu lên thì lỗi #Value ạ. Cụ thể trong file của em, em để 3 ô (ô E19 dữ liệu nhiều đơn vị mm trả giá trị #value; ô G19 dữ liệu vừa phải đơn vị mmm trả giá trị 250.795mm; ô I19 trình bày định dạng kiểu thập phân - hệ m trả kết quả #value). Nhờ anh chỉnh code giúp em.
Cảm ơn anh nhiều, chúc anh Sức khỏe
 

File đính kèm

Web KT

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

Back
Top Bottom