CÁch tính tổng các số trong một số!

Liên hệ QC

aduc

Thành viên chính thức
Tham gia
25/3/08
Bài viết
82
Được thích
57
Nghề nghiệp
Ki su thiet ke xay dung
Mình muốn hỏi thuật toán tính tống các chữ số trong một số?
Xin mọi người giúp đỡ.
 
Mình muốn hỏi thuật toán tính tống các chữ số trong một số?
Xin mọi người giúp đỡ.
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36

Nếu đúng vậy thì dùng công thức sau:
PHP:
B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))
 
Đối với một bài toán thông thường. Thuật toán chung để giải quyết bài toán này là thế nào?
Bạn có thể cho ý kiến không?
 
Đối với một bài toán thông thường. Thuật toán chung để giải quyết bài toán này là thế nào?
Bạn có thể cho ý kiến không?
Thuật toán là: tách từng ký tự một trong chuỗi số đó ra (dùng hàm MID), chuyển nó thành số (vì hàm MID trả về giá trị là Text) và cho vào một mảng, sau đó SUM tất cả các phần tử trong mảng đó lại! dùng SUM (phải ctrl+Shift+Enter) hoặc SUMPRODUCT
 
Điều đó thì tất nhiên. Mình hỏi ví dụ dùng vba. Thì phải làm thế nào?
Bạn có thể giúp mình không?

Ý mình là có thể sử dụng thuật toán này cho các chương trình ngôn ngữ lập trình nói chung. Mong mọi người chỉ giúp.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36

Nếu đúng vậy thì dùng công thức sau:
PHP:
B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))

Anh giải thích giúp em công thức trên với. Em quét đoạn
Mã:
INDIRECT("1:"&LEN(A1))
rồi nhấn F9 nó báo là
là sao hả anh?
 
Điều đó thì tất nhiên. Mình hỏi ví dụ dùng vba. Thì phải làm thế nào?
Bạn có thể giúp mình không?
Dùng VBA cũng thế thôi!
Bạn xem đoạn code này xem sao:
[highlight=vb]
Function mSUM(Rng As Range) As Double
Dim iR As Long
For iR = 1 To Len(Rng)
mSUM = mSUM + Val(Mid(Rng, iR, 1))
Next iR
End Function
[/highlight]
 
Anh giải thích giúp em công thức trên với. Em quét đoạn
Mã:
INDIRECT("1:"&LEN(A1))
rồi nhấn F9 nó báo là Formula is too long là sao hả anh?
Indirect("1:"& LEN(A1)) phải đặt trong hàm ROW nó mới có nghĩa.
ROW(Indirect("1:"& LEN(A1)))

Bạn thử ví dụ sau:
Row(1:1) = {1}
Row(1:2) = {1,2}
Row(1:3) = {1,2,3}
Row(1:n) = {1,2,3,....,n}
Vì ta không biết trước độ dài của chuỗi số là bao nhiêu nên cái n đó thay bằng LEN(chuỗi số) và ta không thể viết là:
Mà phải dùng Indirect để chuyển text thành giá trị tham chiếu

Còn việc excel báo lỗi Formula is too long là do giới hạn số lượng ký tự trong 1 cell (cái này có nói trên diễn đàn).
bạn thử dùng Indirect("1:1") nó sẽ liệt kê ra hết các giá trị tại dòng 1
Indirect("1:5") ==> excel báo tràn dữ liệu ==> formula is too long.

Không biết mình giải thích vậy được không nữa!
 
Lần chỉnh sửa cuối:
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36

Nếu đúng vậy thì dùng công thức sau:
PHP:
B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))

Mình muốn hỏi 1 chút, ở đây bạn dùng SUMPRODUCT có phải là với mục đích chuyển cả hàm ROW đó thành 1 mảng {1,2,3,4,5,6,7,8} hay không, mình thử với SUM cũng cho ra cùng kết quả nhưng phải kết thúc với Ctrl Shift Enter, còn công thức của bạn thì chỉ cần nhấn Enter thôi.
 
Mình muốn hỏi 1 chút, ở đây bạn dùng SUMPRODUCT có phải là với mục đích chuyển cả hàm ROW đó thành 1 mảng {1,2,3,4,5,6,7,8} hay không, mình thử với SUM cũng cho ra cùng kết quả nhưng phải kết thúc với Ctrl Shift Enter, còn công thức của bạn thì chỉ cần nhấn Enter thôi.
Đúng vậy, bản chất của SUMPRODUCT là một hàm mảng rồi, cho nên khi dùng nó ta không cần ấn Ctrl+Shift+Enter. Còn hàm SUM thì không phải hàm mảng nên ta phải dùng tổ hợp phím trên!
 
Cho mình xin link bài viết về sự khác nhau khi nhấn tổ hợp phím ctrl+shift+enter và Enter với.
Vì thời gian không có nhìu và không bít cách searh bài như thế nào nên bạn giúp mình với.
Thanks.
 
Cho mình xin link bài viết về sự khác nhau khi nhấn tổ hợp phím ctrl+shift+enter và Enter với.
Vì thời gian không có nhìu và không bít cách searh bài như thế nào nên bạn giúp mình với.
Thanks.

Khi kết thúc 1 công thức bình thường ta dùng Enter ví dụ: =SUM(A1:B3) => tính tổng các số trong mảng A1:B3, kết quả chỉ là 1 số. Tổ hợp Ctrl Shift Enter dùng để kết thúc 1 công thức mảng. Lấy ví dụ đơn giản, ta có bảng tính dưới đây :

attachment.php


Có 1 mảng trong vùng C3:D5, ta chọn vùng F3:G5 cùng kích thước với vùng C3:D5, sau đó nhập =C3:D5, nhấn Ctrl Shift Enter hai dấu {} sẽ được tự động thêm vào, vậy kết quả trả về trong vùng F3:G51 mảng có các giá trị như trong C3:D5. Bạn sử dụng chức năng tìm kiếm của diễn đàn với từ khoá "công thức mảng" để nghiên cứu thêm nhé.
 

File đính kèm

  • 1.jpg
    1.jpg
    25.3 KB · Đọc: 118
Lần chỉnh sửa cuối:
tổng các số đến tận cùng

Đúng vậy, bản chất của SUMPRODUCT là một hàm mảng rồi, cho nên khi dùng nó ta không cần ấn Ctrl+Shift+Enter. Còn hàm SUM thì không phải hàm mảng nên ta phải dùng tổ hợp phím trên!

Các bạn giúp mình tính tổng các số trong một số sao cho đến kết quả cuối cùng còn một chữ số.
Ví dụ như : cho số 214598
thì sẽ cộng như sau : 2+1+4+5+9+8=29
tiếp 2+9=11
tiếp 1+1=2
như vậy mới kết thúc.
dùng VBA nhé
Cám ơn các bạn
 
Các bạn giúp mình tính tổng các số trong một số sao cho đến kết quả cuối cùng còn một chữ số.
Ví dụ như : cho số 214598
thì sẽ cộng như sau : 2+1+4+5+9+8=29
tiếp 2+9=11
tiếp 1+1=2
như vậy mới kết thúc.
dùng VBA nhé
Cám ơn các bạn
Dùng công thức được không?
Giả sừ bạn gõ số gì đó tại A1 thì yêu cầu của bạn có thể thực hiện bằng công thức thế này tại B1:
=MOD(A1-1,9)+1
Chắc vậy! Và đương nhiên chỉ tính số nguyên thôi nha
Thử xem... Ẹc... Ẹc...
 
Dùng công thức được không?
Giả sừ bạn gõ số gì đó tại A1 thì yêu cầu của bạn có thể thực hiện bằng công thức thế này tại B1:
=MOD(A1-1,9)+1
Chắc vậy! Và đương nhiên chỉ tính số nguyên thôi nha
Thử xem... Ẹc... Ẹc...
Nếu em nhập vào A1 số 0 thì... tèo :-=
 
Thuật toán nói chung là bạn lấy số cần tính chia cho 10 lấy số dư và thương. Số dư gán vào 1 biến X chả hạn.
Tiếp tục lấy thương chia cho 10 để lấy số dư và thương mới. Cộng tiếp số dư mới vào X. Cứ làm vậy đến khi kết quả phép chia bằng 0.
Ví dụ số 123.
123/10 = 12 du 3. X=3
12/10=1 du 2. X=3+2=5
1/10=0 ( kết thúc vòng lặp) du 1. X=5+1=6.
Không biết có cách nào nhanh hơn không.
 
Ý bạn là sao? Có phải như thế này không?
Giả sử:
Ô [A1] = 12345678
Ô [B1] cần tính = 1+2+3+4+5+6+7+8 = 36

Nếu đúng vậy thì dùng công thức sau:
PHP:
B1 = SUMPRODUCT(--MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))



Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19

Em cảm ơn nhiều ạ!
Bài đã được tự động gộp:

Mình muốn hỏi 1 chút, ở đây bạn dùng SUMPRODUCT có phải là với mục đích chuyển cả hàm ROW đó thành 1 mảng {1,2,3,4,5,6,7,8} hay không, mình thử với SUM cũng cho ra cùng kết quả nhưng phải kết thúc với Ctrl Shift Enter, còn công thức của bạn thì chỉ cần nhấn Enter thôi.

Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19

Em cảm ơn nhiều ạ!
Bài đã được tự động gộp:

Dùng công thức được không?
Giả sừ bạn gõ số gì đó tại A1 thì yêu cầu của bạn có thể thực hiện bằng công thức thế này tại B1:
=MOD(A1-1,9)+1
Chắc vậy! Và đương nhiên chỉ tính số nguyên thôi nha
Thử xem... Ẹc... Ẹc...


Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19

Em cảm ơn nhiều ạ!
 
Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19

Em cảm ơn nhiều ạ!
Bài đã được tự động gộp:



Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19

Em cảm ơn nhiều ạ!
Bài đã được tự động gộp:




Em muốn hỏi chút ạ:
Ví dụ dãy số của e trong ô A1 hiển thị thế này: 1-2-5-1-3-4-2-1
Bây giờ e muốn cộng kiểu tịnh tiến dãy số trên thì làm thế nào ạ?
Cộng tịnh tiến bằng tay thì dãy số trên sẽ ra là 1-3-8-9-12-16-18-19

Em cảm ơn nhiều ạ!
PHP:
Public Function fGpe(ByVal Txt As String, Byval Deli As String) As String
Dim j As Long, N As Long, Tmp
    Tmp = Split(Txt, Deli)
    N = Tmp(0)
    fGpe = N
If UBound(Tmp) > 0 Then
    For j = 1 To UBound(Tmp)
        N = N + Tmp(j)
        fGpe = fGpe & Deli & N
    Next j
End If
End Function
A1= '1-2-3-4-5-6-7-8-9
PHP:
B1= fGpe(A1;"-")
 
PHP:
Public Function fGpe(ByVal Txt As String, Byval Deli As String) As String
Dim j As Long, N As Long, Tmp
    Tmp = Split(Txt, Deli)
    N = Tmp(0)
    fGpe = N
If UBound(Tmp) > 0 Then
    For j = 1 To UBound(Tmp)
        N = N + Tmp(j)
        fGpe = fGpe & Deli & N
    Next j
End If
End Function
A1= '1-2-3-4-5-6-7-8-9
PHP:
B1= fGpe(A1;"-")


Thầy ơi!
E đã add đoạn code trên vào Visual basic và sử dụng hàm" fGpe" theo hướng dẫn của thầy nhưng vẫn không ra kết quả ạ. Thầy xem lại giúp e với ạ!
E hỏi thêm nữa là trên Google trang tính có add được code vào không ạ?
E cảm ơn nhiều!s1.PNGs2.PNGs3.PNG
 
Web KT
Back
Top Bottom