Chỉnh sửa code tính Diễn giải Khối lượng trong Xây dựng

Liên hệ QC
Hay thì em like mà bác --=0. Bác xem file em up lên để hỏi chưa? vì cái mình cần sum là sum ở cột A luôn. Mà chuỗi diễn giải này hình như còn ở dạng Text. Thầy SwisTom xem giùm em vấn đề này với
Bạn thử code ở #34 đi. Mình chạy thấy OK
Muốn không thấy số kết quả ở cột B thì bạn cho chữ màu trắng.
OK?!
 
Nếu em theo bài 34 thì cũng phải dùng công đoạn tô màu chữ trắng và sum lại. Nhưng điều em hỏi ở đây là nếu chuyển chuỗi thành số và sum như file em đính kèm thì code sẽ như thế nào? 1 công việc nào đó (ví dụ như gia công cốt thép D>18) thì trong đó gồm nhiều thành phần làm những công việc đó như Tường, móng .. (cái này bác dân xây dựng nên bít chắc mà). Mong bác Tom giúp em bài 36 }}}}}
 
Lần chỉnh sửa cuối:
Nếu em theo bài 34 thì cũng phải dùng công đoạn tô màu chữ trắng và sum lại. Nhưng điều em hỏi ở đây là nếu chuyển chuỗi thành số và sum như file em đính kèm thì code sẽ như thế nào? 1 công việc nào đó (ví dụ như gia công cốt thép D>18) thì trong đó gồm nhiều thành phần làm những công việc đó như Tường, móng .. (cái này bác dân xây dựng nên bít chắc mà). Mong bác Tom giúp em bài 36 }}}}}
Nghĩa là bạn không muốn hiện Kết quả ở cột B hay cột C mà SUM lên luôn?
Chỉnh code để không hiện kết quả ở đó mà SUM thẳng lên C12, C16 thì phải có bác Siwtom ra tay.
 
Nghĩa là bạn không muốn hiện Kết quả ở cột B hay cột C mà SUM lên luôn?
Chỉnh code để không hiện kết quả ở đó mà SUM thẳng lên C12, C16 thì phải có bác Siwtom ra tay.
Chính xác là thế bác ạ, đành chờ lúc nào đó thầy Tom rãnh rỗi làm giúp vậy -\\/.
 
Chính xác là thế bác ạ, đành chờ lúc nào đó thầy Tom rãnh rỗi làm giúp vậy -\\/.

Ý bạn là bạn gõ vd. vào A13 text + Tường: 5*10*3*0,5 thì sau khi Enter thì trong A13 tự chuyển thành

+ Tường: 5*10*3*0,5 = 75,0?

Nếu thế thì A13 nó là text chứ có là số đâu mà bạn SUM được kiểu SUM(A13:A15)?

Bạn phải nhập công thức cho C12

Mã:
=SUM(--MID(A13:A15;FIND("=";A13:A15)+1;LEN(A13:A15)))

Kết thúc bằng Ctrl + Shift + Enter

hoặc công thức cho ô C12

Mã:
=[B][COLOR=#0000ff]MySumRange[/COLOR][/B](A13:A15)

code sheet1

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim expression As String, result As Double
    If Not Intersect(Target, Range("A1:A10000")) Is Nothing Then
        If Target.Count = 1 Then
            If Target.Value <> "" Then
                If InStr(Target, ":") > 0 Then
                    expression = Trim(Split(Target.Value, ":")(1))
                Else
                    expression = Trim(Target.Value)
                End If
                expression = Replace(expression, ",", ".")
                Application.EnableEvents = False
                On Error GoTo end_
                result = Evaluate(expression)
'                [B][COLOR=#ff0000]Target.Offset(, 1).Value = result[/COLOR][/B]
                Target.Value = Trim(Target.Value) & " = " & FormatWithComma(result)
                
            End If
        End If
    End If
end_:
    Application.EnableEvents = True
End Sub

module1

Mã:
Function FormatWithComma(ByVal number As Double) As String
Dim text As String, result As String
    text = Format(2001 / 2, "#,##0.0")
    result = Format(number, "#,##0.0##")
    If Mid(text, 6, 1) = "," Then
        FormatWithComma = Replace(result, Mid(text, 2, 1), ".")
    Else
        result = Replace(result, ".", "@")
        result = Replace(result, Mid(text, 2, 1), ".")
        FormatWithComma = Replace(result, "@", ",")
    End If
End Function

Function [B][COLOR=#0000ff]MySumRange[/COLOR][/B](rng As Range) As Double
Dim cell As Range, pos As Long, text As String, result As Double
    For Each cell In rng
        text = cell.Value
        pos = InStr(1, text, "=")
        If pos > 0 Then result = result + Trim(Mid(text, pos + 1))
    Next
    MySumRange = result
End Function

Nếu bạn không muốn hiện kết quả của mỗi biểu thức ở cột bên cạnh thì xóa dòng đỏ đỏ
 
Ý bạn là bạn gõ vd. vào A13 text + Tường: 5*10*3*0,5 thì sau khi Enter thì trong A13 tự chuyển thành

+ Tường: 5*10*3*0,5 = 75,0?

Nếu thế thì A13 nó là text chứ có là số đâu mà bạn SUM được kiểu SUM(A13:A15)?

Bạn phải nhập công thức cho C12

Mã:
=SUM(--MID(A13:A15;FIND("=";A13:A15)+1;LEN(A13:A15)))

Kết thúc bằng Ctrl + Shift + Enter

hoặc công thức cho ô C12

Mã:
=[B][COLOR=#0000ff]MySumRange[/COLOR][/B](A13:A15)

code sheet1

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim expression As String, result As Double
    If Not Intersect(Target, Range("A1:A10000")) Is Nothing Then
        If Target.Count = 1 Then
            If Target.Value <> "" Then
                If InStr(Target, ":") > 0 Then
                    expression = Trim(Split(Target.Value, ":")(1))
                Else
                    expression = Trim(Target.Value)
                End If
                expression = Replace(expression, ",", ".")
                Application.EnableEvents = False
                On Error GoTo end_
                result = Evaluate(expression)
'                [B][COLOR=#ff0000]Target.Offset(, 1).Value = result[/COLOR][/B]
                Target.Value = Trim(Target.Value) & " = " & FormatWithComma(result)
                
            End If
        End If
    End If
end_:
    Application.EnableEvents = True
End Sub

module1

Mã:
Function FormatWithComma(ByVal number As Double) As String
Dim text As String, result As String
    text = Format(2001 / 2, "#,##0.0")
    result = Format(number, "#,##0.0##")
    If Mid(text, 6, 1) = "," Then
        FormatWithComma = Replace(result, Mid(text, 2, 1), ".")
    Else
        result = Replace(result, ".", "@")
        result = Replace(result, Mid(text, 2, 1), ".")
        FormatWithComma = Replace(result, "@", ",")
    End If
End Function

Function [B][COLOR=#0000ff]MySumRange[/COLOR][/B](rng As Range) As Double
Dim cell As Range, pos As Long, text As String, result As Double
    For Each cell In rng
        text = cell.Value
        pos = InStr(1, text, "=")
        If pos > 0 Then result = result + Trim(Mid(text, pos + 1))
    Next
    MySumRange = result
End Function

Nếu bạn không muốn hiện kết quả của mỗi biểu thức ở cột bên cạnh thì xóa dòng đỏ đỏ
Ý em là dạng chuỗi đó sau khi diễn giải và enter sẽ thành Value. Như file ví dụ em đưa lên, khi em gõ + Tường: 5*10*3*0,5 = 75 thì kết qua 75 này là dạng value chứ không phải dạng text, và code có thể sum như tính toán trong file ví dụ em đưa lên.
 
Lần chỉnh sửa cuối:
Ý em là dạng chuỗi đó sau khi diễn giải và enter sẽ thành Value. Như file ví dụ em đưa lên, khi em gõ + Tường: 5*10*3*0,5 = 75 thì kết qua 75 này là dạng value chứ không phải dạng text, và code có thể sum như tính toán trong file ví dụ em đưa lên.
Càng giải thích càng rối. Làm y chang theo file ví dụ của bạn vậy.
 

File đính kèm

  • DienGiaiKL.rar
    12.3 KB · Đọc: 140
Ý em là dạng chuỗi đó sau khi diễn giải và enter sẽ thành Value. Như file ví dụ em đưa lên, khi em gõ + Tường: 5*10*3*0,5 = 75 thì kết qua 75 này là dạng value chứ không phải dạng text, và code có thể sum như tính toán trong file ví dụ em đưa lên.

Bạn suy nghĩ kỹ chưa?
Nếu bạn gõ vào A1 + Tường: 5*10*3*0,5 rồi Enter thì A1 trở thành 75?
Thế nếu bạn gõ nhầm thì làm sao bạn biết, đồng nghiệp, sếp biết bạn đã gõ gì? Và 75 kia nó là tiền công quốc đất hay đổ bê tông hay trát tường?

Mà kiểu giải thích của bạn cẩu thả quá.
Bạn viết
khi em gõ + Tường: 5*10*3*0,5 = 75 thì kết qua 75 ...
Bạn chỉ gõ + Tường: 5*10*3*0,5 còn = 75 là code thêm vào chứ bạn có gõ đâu mà nói
khi em gõ + Tường: 5*10*3*0,5 = 75 ...
Trình bầy cẩu thả thế thì rất mệt cho người khác.
 
Chỉ có thầy BaTe là hiểu ý em nhỉ, có điều thầy cho em hỏi vấn đề này:
+ code có thể tự sum ko (em có để active nhưng ko thấy tự sum)?
+ Diễn giải ở cột A nhưng cột B vẫn ra kết quả (phần kết quả cột B này có thể bỏ được không?)
+ Nếu em bỏ dấu "-" trước tên công việc thì phần sum sẽ không chạy (Cái này do lỗi em là tự thêm dấu "-" nhưng thực chất là không có)
Mong thầy chỉnh giúp em
 
Bạn suy nghĩ kỹ chưa?
Nếu bạn gõ vào A1 + Tường: 5*10*3*0,5 rồi Enter thì A1 trở thành 75?
Thế nếu bạn gõ nhầm thì làm sao bạn biết, đồng nghiệp, sếp biết bạn đã gõ gì? Và 75 kia nó là tiền công quốc đất hay đổ bê tông hay trát tường?

Mà kiểu giải thích của bạn cẩu thả quá.
Bạn viết

Bạn chỉ gõ + Tường: 5*10*3*0,5 còn = 75 là code thêm vào chứ bạn có gõ đâu mà nói

Trình bầy cẩu thả thế thì rất mệt cho người khác.
Dạ cái đoạn = 75 là code thêm code thêm vào. Em chỉ diễn giải ở kích thước, còn kết quả là code thêm vào. Nhưng ý em là mún phần diễn giải đó sau khi enter sẽ là giá trị chứ không phải text. Thầy thông cảm, hic phần thuyết trình diễn giải của em kém quá làm thầy ko hiểu và mệt hơn
 
Chỉ có thầy BaTe là hiểu ý em nhỉ,

Chỉ có điều bạn nói:

chuỗi đó sau khi diễn giải và enter sẽ thành Value

sẽ thành có nghĩa là chuỗi biến mất và thay bào đó là Value. Tôi sẽ thành hổ có nghĩa là tôi không còn nữa mà thay vào đó là trên ghế có con hổ ngồi.

Mà bạn nói "và enter" chứ không nói "và nhấn Button".

Bạn có hiểu tôi viết gì không?
 
Chỉ có điều bạn nói:



sẽ thành có nghĩa là chuỗi biến mất và thay bào đó là Value. Tôi sẽ thành hổ có nghĩa là tôi không còn nữa mà thay vào đó là trên ghế có con hổ ngồi.

Mà bạn nói "và enter" chứ không nói "và nhấn Button".

Bạn có hiểu tôi viết gì không?
Dạ sory thầy vì phần diễn giải của em kém quá nên làm thầy và mọi người không hiểu. Nếu nói đúng thì là: Phần diễn giải khối lượng đó sau khi kết thúc sẽ thành value). Còn phần tự auto sum thì tốt hơn thay vì phải nhấn button. Cảm ơn vì lời thầy nhắc nhở
 
Sao làm dự toán mà lười quá gõ sum vào là xong mà cũng lười biếng, lười thế này thế nhầm lẫn lém, lại ra thêm cây cầu thiếu trọng tải thì nguy, hihihii (vui chút cho các bạn cẩn trọng)



Muốn lười thì

Copy hết vào sheet code là được (sửa và thêm vào code của bác Siwtom trên)

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim expression As String, Result As Double
    If Not Intersect(Target, Range("A1:A10000")) Is Nothing Then
        If Target.Count = 1 Then
            If Target.Value <> "" Then
                If InStr(Target, ":") > 0 Then
                    expression = Trim(Split(Target.Value, ":")(1))
                Else
                    expression = Trim(Target.Value)
                End If
                expression = Replace(expression, ",", ".")
                Application.EnableEvents = False
                On Error GoTo end_
                Result = Evaluate(expression)     'Target.Offset(, 1).Value = result
                Target.Value = "'" & Trim(Target.Value) & " = " & FormatWithComma(Result)
                ToSumRange Target
            End If
        End If
    End If
end_:
    Application.EnableEvents = True
End Sub

''-----------------------------------------------------------------------
Private Function FormatWithComma(ByVal number As Double) As String
Dim text As String, Result As String
    text = Format(2001 / 2, "#,##0.0")
    Result = Format(number, "#,##0.0##")
    If Mid(text, 6, 1) = "," Then
        FormatWithComma = Replace(Result, Mid(text, 2, 1), ".")
    Else
        Result = Replace(Result, ".", "@")
        Result = Replace(Result, Mid(text, 2, 1), ".")
        FormatWithComma = Replace(Result, "@", ",")
    End If
End Function

''-----------------------------------------------------------------------
Private Sub ToSumRange(taR As Range)
    Dim k  As Long, pos As Long, text As String, Result As Double
    i = 0
    text = taR.Offset(i).Value
    pos = InStr(1, text, "=")
    
    Do While pos > 0
        text = Replace(Replace(Trim(Mid(text, pos + 1)), ".", ""), ",", ".")
        Result = Result + Val(text)
        i = i - 1
        text = taR.Offset(i).Value
        pos = InStr(1, text, "=")
    Loop
    k = i
   
    i = 1
    text = taR.Offset(i).Value
    pos = InStr(1, text, "=")
    
    Do While pos > 0
        text = Replace(Replace(Trim(Mid(text, pos + 1)), ".", ""), ",", ".")
        Result = Result + Val(text)
        i = i + 1
        text = taR.Offset(i).Value
        pos = InStr(1, text, "=")
    Loop
    
    taR.Offset(k, 2) = Result
End Sub
 
Lần chỉnh sửa cuối:
Chỉ cần chú thích lên Sheet quy định bắt buộc gõ thập phân dấu gì, phân cách hàng hàng dấu gì sau text là dấu gì cho khỏe gõ lung tung ai biết đường đâu mà lần --=0 (lớn rồi không biết quy định số của Việt Nam đi xuống lớp 1 học lại đi ke...ke..)
 
Lần chỉnh sửa cuối:
Hay quá thầy vodoi oi, -\\/. cách diễn giải này được ứng dụng nhiều mà thầy. Năm 2014 rồi, xe thì ra đủ loại, tại sao mình ko chọn xe nhanh để đi mà lại đi xe đạp nhi (cái này cũng tùy người nghĩ vì xe đạp chậm mà chắc, nhanh thì đôi lúc cũng dễ té nhỉ --=0). TK thầy nhiều.
 
Chỉ cần chú thích lên Sheet quy định bắt buộc gõ thập phân dấu gì, phân cách hàng hàng dấu gì sau text là dấu gì cho khỏe gõ lung tung ai biết đường đâu mà lần --=0 (lớn rồi không biết quy định số của Việt Nam đi xuống lớp 1 học lại đi ke...ke..)


ý bạn là sao?

Thấy trích bài tôi viết lại, bạn lại viết vậy là có ý gì, liên quan lớp 1 gì đây???
 
ý bạn là sao?

Thấy trích bài tôi viết lại, bạn lại viết vậy là có ý gì, liên quan lớp 1 gì đây???
Mình nhớ là không có trích lại chắc bị lỗi gì rồi bây giờ mình mới vào mới thấy, có gì bạn đừng hiểu lầm nhen
 
Sao làm dự toán mà lười quá gõ sum vào là xong mà cũng lười biếng, lười thế này thế nhầm lẫn lém, lại ra thêm cây cầu thiếu trọng tải thì nguy, hihihii (vui chút cho các bạn cẩn trọng)



Muốn lười thì

Copy hết vào sheet code là được (sửa và thêm vào code của bác Siwtom trên)

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim expression As String, Result As Double
    If Not Intersect(Target, Range("A1:A10000")) Is Nothing Then
        If Target.Count = 1 Then
            If Target.Value <> "" Then
                If InStr(Target, ":") > 0 Then
                    expression = Trim(Split(Target.Value, ":")(1))
                Else
                    expression = Trim(Target.Value)
                End If
                expression = Replace(expression, ",", ".")
                Application.EnableEvents = False
                On Error GoTo end_
                Result = Evaluate(expression)     'Target.Offset(, 1).Value = result
                Target.Value = "'" & Trim(Target.Value) & " = " & FormatWithComma(Result)
                ToSumRange Target
            End If
        End If
    End If
end_:
    Application.EnableEvents = True
End Sub

''-----------------------------------------------------------------------
Private Function FormatWithComma(ByVal number As Double) As String
Dim text As String, Result As String
    text = Format(2001 / 2, "#,##0.0")
    Result = Format(number, "#,##0.0##")
    If Mid(text, 6, 1) = "," Then
        FormatWithComma = Replace(Result, Mid(text, 2, 1), ".")
    Else
        Result = Replace(Result, ".", "@")
        Result = Replace(Result, Mid(text, 2, 1), ".")
        FormatWithComma = Replace(Result, "@", ",")
    End If
End Function

''-----------------------------------------------------------------------
Private Sub ToSumRange(taR As Range)
    Dim k  As Long, pos As Long, text As String, Result As Double
    i = 0
    text = taR.Offset(i).Value
    pos = InStr(1, text, "=")
    
    Do While pos > 0
        text = Replace(Replace(Trim(Mid(text, pos + 1)), ".", ""), ",", ".")
        Result = Result + Val(text)
        i = i - 1
        text = taR.Offset(i).Value
        pos = InStr(1, text, "=")
    Loop
    k = i
   
    i = 1
    text = taR.Offset(i).Value
    pos = InStr(1, text, "=")
    
    Do While pos > 0
        text = Replace(Replace(Trim(Mid(text, pos + 1)), ".", ""), ",", ".")
        Result = Result + Val(text)
        i = i + 1
        text = taR.Offset(i).Value
        pos = InStr(1, text, "=")
    Loop
    
    taR.Offset(k, 2) = Result
End Sub
Bạn ơi bạn có thể sửa code trên để dấu bằng và số kết quả tính có màu đỏ y trang như phần mềm dự toán được không.
 
các anh chị cho em hỏi công thức tính tổng của bảng diễn giải khối lượng sau trong excel
ví dụ ở cột diễn giải =2+2+4 thì em muốn cột tính tổng ra kết quả luôn là 9
em vẫn đang làm thủ công copy xong em đặt dấu = sau đó pates
xin anh chị hướng dẫn cụ thể vì em mù tịt không biết cái này
em xin chân thành cảm ơn
 
Web KT
Back
Top Bottom