Cần sự giúp đỡ gấp từ anh/chị về hàm tính tổng các phần tử trong Excel (1 người xem)

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

bietkinhky

Thành viên mới
Tham gia
2/1/13
Bài viết
2
Được thích
1
Chào A/C,
Mình có 1 vấn đề về hàm tính tổng trong Excel cần A/C giúp đỡ.
Mình đang làm giải trình phần thi công đường ống thoát nước cho dự án, trong phần giải trình người ta yêu cầu liệt kê từng đoạn ống và sau đó tính tổng khối lượng.
Nhưng vấn đề là mình không thể tính tổng của 1 ô có nhiều phần tử (các đoạn ống được) rồi mới tính tổng của từng dòng và cột được. Vậy nên mạo muội nhờ a/c giúp đỡ.. Mình xin up file đính kèm, cột cần lấy giá trị tổng được tô màu vàng.
Chân thành cảm ơn!
 

File đính kèm

Chào A/C,
Mình có 1 vấn đề về hàm tính tổng trong Excel cần A/C giúp đỡ.
Mình đang làm giải trình phần thi công đường ống thoát nước cho dự án, trong phần giải trình người ta yêu cầu liệt kê từng đoạn ống và sau đó tính tổng khối lượng.
Nhưng vấn đề là mình không thể tính tổng của 1 ô có nhiều phần tử (các đoạn ống được) rồi mới tính tổng của từng dòng và cột được. Vậy nên mạo muội nhờ a/c giúp đỡ.. Mình xin up file đính kèm, cột cần lấy giá trị tổng được tô màu vàng.
Chân thành cảm ơn!
Chào bietkinhky,

Bạn thử:
Mã:
N7=SUM(IF(ISNUMBER(TRIM(MID(SUBSTITUTE((D7&"+"&E7&"+"&F7&"+"&G7&"+"&H7&"+"&I7&"+"&J7&"+"&K7&"+"&L7&"+"&M7),"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1),TRIM(MID(SUBSTITUTE((D7&"+"&E7&"+"&F7&"+"&G7&"+"&H7&"+"&I7&"+"&J7&"+"&K7&"+"&L7&"+"&M7),"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1,0))
Ctrl+Shift+Enter rồi fill xuống.

Có thể đứng tại N7, rồi tạo name "VungCong"
Mã:
VungCong=(D7&"+"&E7&"+"&F7&"+"&G7&"+"&H7&"+"&I7&"+"&J7&"+"&K7&"+"&L7&"+"&M7)

Thay công thức bằng
Mã:
N7=SUM(IF(ISNUMBER(TRIM(MID(SUBSTITUTE(VungCong,"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1),TRIM(MID(SUBSTITUTE(VungCong,"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1,0))
Ctrl+Shift+Enter rồi fill xuống.

Chúc bạn ngày vui.
 
Chào bietkinhky,

Bạn thử:
Mã:
N7=SUM(IF(ISNUMBER(TRIM(MID(SUBSTITUTE((D7&"+"&E7&"+"&F7&"+"&G7&"+"&H7&"+"&I7&"+"&J7&"+"&K7&"+"&L7&"+"&M7),"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1),TRIM(MID(SUBSTITUTE((D7&"+"&E7&"+"&F7&"+"&G7&"+"&H7&"+"&I7&"+"&J7&"+"&K7&"+"&L7&"+"&M7),"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1,0))
Ctrl+Shift+Enter rồi fill xuống.

Có thể đứng tại N7, rồi tạo name "VungCong"
Mã:
VungCong=(D7&"+"&E7&"+"&F7&"+"&G7&"+"&H7&"+"&I7&"+"&J7&"+"&K7&"+"&L7&"+"&M7)

Thay công thức bằng
Mã:
N7=SUM(IF(ISNUMBER(TRIM(MID(SUBSTITUTE(VungCong,"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1),TRIM(MID(SUBSTITUTE(VungCong,"+",REPT(" ",100)),(ROW($1:$100)-1)*100+1,100))*1,0))
Ctrl+Shift+Enter rồi fill xuống.

Chúc bạn ngày vui.
Cái này phá được nè:
Mã:
N7=SUM(IFERROR(--MID(SUBSTITUTE(D7:M7,"+",REPT(" ",100)),1+(ROW($1:$10)-1)*100,100),0))
Ctrl+Shift+Enter rồi fill xuống --=0--=0--=0!!
P/s: bài này có thể dùng EVALUATE !!!
 
Lần chỉnh sửa cuối:
Cái này phá được nè:
Mã:
N7=SUM(IFERROR(--MID(SUBSTITUTE(D7:M7,"+",REPT(" ",20)),1+(ROW($1:$10)-1)*20,20),0))
Ctrl+Shift+Enter rồi fill xuống --=0--=0--=0!!
P/s: bài này có thể dùng EVALUATE !!!
Khà khà, --=0

Dòng 19 em trai! mau mau.

Chúc em ngày vui. /-*+//-*+//-*+/
p/s: thay số 20 thành 100 thì đúng :-)
 
Lần chỉnh sửa cuối:
góp thêm hàm tự tạo
nhấn Alt+F11, chọn Insert Module
chép đoạn code sau dán vào module
Mã:
Function Tong(Rng As Range) As Double
Dim Darr(), i As Integer, j As Integer, tmp As Double, s
Darr = Rng.Value
For j = 1 To UBound(Darr, 2)
    s = Split(Darr(1, j), "+")
    For i = LBound(s) To UBound(s)
        tmp = tmp + Val(s(i))
    Next i
Next j
Tong = tmp
End Function
nhập công thức
Mã:
N7 = Tong(D7:M7)
copy xuống
 
góp thêm hàm tự tạo
nhấn Alt+F11, chọn Insert Module
chép đoạn code sau dán vào module
Mã:
Function Tong(Rng As Range) As Double
Dim Darr(), i As Integer, j As Integer, tmp As Double, s
Darr = Rng.Value
For j = 1 To UBound(Darr, 2)
    s = Split(Darr(1, j), "+")
    For i = LBound(s) To UBound(s)
        tmp = tmp + Val(s(i))
    Next i
Next j
Tong = tmp
End Function
nhập công thức
Mã:
N7 = Tong(D7:M7)
copy xuống
Vẫn như 4 tháng trước, không "buông tha" cho "thằng nhỏ" này há! }}}}}}}}}}

Chúc bạn hiền ngày thiệt vui. /-*+//-*+//-*+/
 
cảm ơn sự nhiệt tình của các anh/chị trên diễn đàn. }}}}}}}}}}
 
góp thêm hàm tự tạo
nhấn Alt+F11, chọn Insert Module
chép đoạn code sau dán vào module
Mã:
Function Tong([COLOR=#ff0000]Rng As Range[/COLOR]) As Double
Dim Darr(), i As Integer, j As Integer, tmp As Double, s
Darr = Rng.Value
For j = 1 To UBound(Darr, 2)
    s = [COLOR=#ff0000]Split(Darr(1, j), "+")[/COLOR]
    For i = LBound(s) To UBound(s)
        tmp = tmp + Val(s(i))
    Next i
Next j
Tong = tmp
End Function
nhập công thức
Mã:
N7 = Tong(D7:M7)
copy xuống

1 vòng lập thôi là đủ
Mã:
Function Tong(ByVal SrcArr As Variant) As Double
  Dim item, aTmp
  On Error Resume Next
  aTmp = SrcArr
  If Not IsArray(aTmp) Then aTmp = Array(aTmp)
  For Each item In aTmp
    Tong = Tong + Evaluate(item)
  Next
End Function
1> Hạn chế khai báo biến là Range, trừ 1 số trường hợp đặc biệt nào đó mà bạn biết chắc chỉ có dùng Range chứ không phải loại nào khác... Dùng biến Variant sẽ tổng quát hơn vì nó có thể là Range cũng có thể là mảng do 1 công thức khác trả về (chẳng hạn ROW(INDIRECT(... gì đó.. )) thì hàm của bạn.. tèo)
2> Chỗ màu đỏ bạn ghi chính xác tách chuỗi theo dấu "+" ---> Vậy mai này trong chuỗi có dấu trừ, dấu nhân.. thì phải sửa lại code sao?
3> Cũng đừng quên bẫy lỗi bởi ai biết thứ gì trong.. trái ổi
-------------------------------
Nói chung là kệ người ta ghi cái gì trong chuỗi, miễn nó là biểu thức có thể tính toán được thì mình cứ Evaluate làm tới đi (nếu tính sai là lỗi người dùng)
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom