Đố vui nho nhỏ về công thức tính tổng. (1 người xem)

Liên hệ QC

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

Pansy_flower

...nợ người, nợ đời...
Thành viên danh dự
Tham gia
3/6/06
Bài viết
1,611
Được thích
14,002
Nghề nghiệp
...thiết kế máy bay cho VOI tự lái...^.^
Hôm nay sẳn đọc lại công thức tính tổng tích lũy của chị handung107 nên em nghĩ ra bài toán này. Em cũng không nhớ là trên diễn đàn đã có bài này chưa, thôii thì ta ôn lại chút xíu- thư giản cuối tuần các bác nhé.

Đề bài như sau:

Lập công thức tính tổng của một dãy số.

Ví dụ:

A1=123456789012345
ô B1 lập công thức để tính dãy số này

(123456789012345=1+2+3+4+5+6+7+8+9+0+1+2+3+4+5=60)

Đây chỉ là số ví dụ, số thật có thể nhiều hơn hoặc ít hơn. Có nghĩa là công thức phải tổng quát tất cả các trường hợp.

Em có câu hỏi nhỏ nữa:

Trong excel khi ta gõ một dãy số trên 15 ký tự thì các số đuôi của nó sẽ là các số 0. Ví dụ: 1234567890123456789123456789 thì nó sẽ hiện ra như sau: 1.23E+27. Khi format lại dạng number thì nó sẽ hiển thị là : 1,234,567,890,123,450,000,000,000,000

Làm sao để khắc phục tình trạng này?
 
Lần chỉnh sửa cuối:
Dùng VBA có được không S-G? Dùng công thức thôi e hơi mất Time
 
Secret_grasses đã viết:
Hôm nay sẳn đọc lại công thức tính tổng tích lũy của chị handung107 nên em nghĩ ra bài toán này. Em cũng không nhớ là trên diễn đàn đã có bài này chưa, thôii thì ta ôn lại chút xíu- thư giản cuối tuần các bác nhé.

Đề bài như sau:
Lập công thức tính tổng của một dãy số.

Ví dụ:

A1=123456789012345
ô B1 lập công thức để tính dãy số này

(123456789012345=1+2+3+4+5+6+7+8+9+0+1+2+3+4+5=60)

Đây chỉ là số ví dụ, số thật có thể nhiều hơn hoặc ít hơn. Có nghĩa là công thức phải tổng quát tất cả các trường hợp.



Em có câu hỏi nhỏ nữa:


Dãy số này phải có quy luật gì chứ ??? Chứ cho lung tung thì chắc là chỉ dùng MID cho chắc ăn--=0--=0

Còn nếu luôn có liên tiếp từ 1234567890 thì còn dễ nữa.
???????????????
Thân!
 
Trong Excel chỉ thể hiện 15 chữ số của một số. Nếu muốn excel lưu trữ trên 15 số để tính toán thì tích dấu kiểm vào Precision as Displayed của Tab Options/Calculation
 
Ô A1 chứa số cần tính tổng các chữ số 123456789012345

Dùng công thức sau:
{=SUM(VALUE(MID(ABS(A1),ROW(INDIRECT("1:"&LEN(ABS(A1)))),1)))}

LM
 
Em nghĩ nếu dùng công thức thì phải cho giới hạn số chữ số chứ nhỉ, ví dụ <=1000 chẳng hạn. Em nghĩ đến phương pháp dùng hàm LEN để đếm số ký tự ô A1, còn B1= MID(A1,LEN(A1),1)+ MID(A1,(LEN(A1)-1),1)+....+MID(A1,1,1).
Thế nhưng giải quyết cái chỗ ....ấy khó quá
 
LearnMore đã viết:
Ô A1 chứa số cần tính tổng các chữ số 123456789012345

Dùng công thức sau:
{=SUM(VALUE(MID(ABS(A1),ROW(INDIRECT("1:"&LEN(ABS(A1)))),1)))}

LM
Em test thấy chỉ ra kết quả =1
 
LearnMore đã viết:
Bạn xem kỹ lại, công thức này là công thức mảng, nên kết thúc = Ctrl+Shift=Enter.

LM
Tuyệt vời, cám ơn bác...bác đã giải quyết được cái chỗ....của em !
 
Em có câu hỏi nhỏ nữa:Trong excel khi ta gõ một dãy số trên 15 ký tự thì các số đuôi của nó sẽ là các số 0. Ví dụ: 1234567890123456789123456789 thì nó sẽ hiện ra
[/COLOR]
(hính xác hơn, ~ thứ đó thường được gọi là kí số!
 
duongsatdn đã viết:
Trong Excel chỉ thể hiện 15 chữ số của một số. Nếu muốn excel lưu trữ trên 15 số để tính toán thì tích dấu kiểm vào Precision as Displayed của Tab Options/Calculation

Em chọn rồi nhưng cũng hổng được anh ơi.

Mr Okebab đã viết:
Dãy số này phải có quy luật gì chứ ??? Chứ cho lung tung thì chắc là chỉ dùng MID cho chắc ăn

Còn nếu luôn có liên tiếp từ 1234567890 thì còn dễ nữa.
???????????????
Thân!

Hổng có quy luật gì hết tía ui. Đây là số tự nhiên.

LearnMore đã viết:
Dùng công thức sau:
{=SUM(VALUE(MID(ABS(A1),ROW(INDIRECT("1:"&LEN(ABS( A1)))),1)))}

Hihi, anh LM nhanh ghê. Công thức này đúng nhưng chưa chính xác. Anh xem lại công thức này sẽ cho kết quả là #VALUE! trong trường hợp nào nha!.
a32.gif
 
Lần chỉnh sửa cuối:
duongsatdn đã viết:
Trong Excel chỉ thể hiện 15 chữ số của một số. Nếu muốn excel lưu trữ trên 15 số để tính toán thì tích dấu kiểm vào Precision as Displayed của Tab Options/Calculation

Mình đã tích vào rồi, vẫn không hiển thị hơn được 15 chữ số.

Bác LM nhanh thiệt, trao giải cho LM thôi SG ui!!!
 
SoiBien đã viết:
Mình đã tích vào rồi, vẫn không hiển thị hơn được 15 chữ số.

Bác LM nhanh thiệt, trao giải cho LM thôi SG ui!!!



Chưa đúng hoàn toàn mà anh.

Secret_grasses đã viết:
Hihi, anh LM nhanh ghê. Công thức này đúng nhưng chưa chính xác. Anh xem lại công thức này sẽ cho kết quả là #VALUE! trong trường hợp nào nha!||||| .

Với lại đây là trò thư giản cuối tuần thui mà. Em biết mấy anh siu lém, đâu giám múa rìu qua mắt thợ. Chỉ vì thấy mọi người ham VBA quá, hơi lười trong việc sd công thức nên em post bài này.-\\/.
 
[FONT=&quot]
[/FONT]
[FONT=&quot]{=SUM(VALUE(MID(ABS(A1),ROW(INDIRECT("1:"&LEN(ABS(A1)))),1)))}[/FONT]

Công thức này vẫn còn lỗi #VALUE! nếu chuỗi số cho là số thập phân.

LM
 
hì hì, tới đó coi như xong đi, phần kia thì gắn cái iserror nữa là xong í mờ đúng không LM ơi! thưởng đê, Kiss phát nhỉ! :D
 
LearnMore đã viết:
[FONT=&quot]
[/FONT]
[FONT=&quot]{=SUM(VALUE(MID(ABS(A1),ROW(INDIRECT("1:"&LEN(ABS(A1)))),1)))}[/FONT]

Công thức này vẫn còn lỗi #VALUE! nếu chuỗi số cho là số thập phân.

LM

Em nói là số tự nhiên thôi ạ. Nếu số đó trên 15 ký số thì công thức sẽ cho ra lỗi này.

SoiBien đã viết:
hì hì, tới đó coi như xong đi, phần kia thì gắn cái iserror nữa là xong í mờ đúng không LM ơi! thưởng đê, Kiss phát nhỉ! :D

Hì hì, anh nhanh cái nhảu quá nhỉ!. Anh xem lại đề bài đi nhá!.

Có nghĩa là công thức phải tổng quát tất cả các trường hợp.
 
Secret_grasses đã viết:


Em nói là số tự nhiên thôi ạ. Nếu số đó trên 15 ký số thì công thức sẽ cho ra lỗi này.

Nếu là > 15 số thì vẫn tính bình thường (dĩ nhiên là không đúng do Excel đã làm tròn)
Chỉ đến khi lớn hơn 20 số thì mới báo lỗi.

Thân!
 
Mr Okebab đã viết:
Nếu là > 15 số thì vẫn tính bình thường (dĩ nhiên là không đúng do Excel đã làm tròn)
Chỉ đến khi lớn hơn 20 số thì mới báo lỗi.

Thân!

Vậy tía chị S_G giải đêêêêêêêêêêêêêêêêêêêêê!
 
hoangaccounting đã viết:
Vậy tía chị S_G giải đêêêêêêêêêêêêêêêêêêêêê!

Cậu ép tớ quá, tớ giải đâu có được, chỉ phản biện thôi.

Hơn nữa do Excel chỉ thể hiện 15 con số nên từ 16 trở đi là sẽ bị thay thế = số 0.
Vì thế cũng chỉ nên tính với các con số có số chữ số <=15.

Thân!

P/S : Lâu quá không gặp cậu đấy.:=\+
 
=SUMPRODUCT(((LEN($A$1)-LEN(SUBSTITUTE($A$1,ROW(INDIRECT("1:9")),""))))*ROW(INDIRECT("1:9")))
Có thể A1 là tẽtt sẽ nhập 100 số, vd: '1234567897011122222221111...n
 
ThuNghi đã viết:
=SUMPRODUCT(((LEN($A$1)-LEN(SUBSTITUTE($A$1,ROW(INDIRECT("1:9")),""))))*ROW(INDIRECT("1:9")))
Có thể A1 là tẽtt sẽ nhập 100 số, vd: '1234567897011122222221111...n
hình như vẫn chưa ổn bác ơi....
 
Sao lại hình như, cụ thể đi.
=SUMPRODUCT(((LEN($A$1)-LEN(SUBSTITUTE($A$1,ROW(INDIRECT("1:9")),""))))*RO W(INDIRECT("1:9")))
SUMPRODUCT((LEN($A$1)-LEN(SUBSTITUTE($A$1,2,""))))*1)
là đếm bao nhiêu ký tự = 2 tương tự với ROW(INDIRECT("1:9")) (1-9)
Mà nhân ROW(INDIRECT("1:9")) ie X 1-9
 
Lần chỉnh sửa cuối:
Có lẽ vẫn mắc ở chỗ A1 không hiển thị được quá 15 số bác ạ
 
Thì bạn vận là text đi, nhập '1111111122234455333333111, yêu cầu là tính tổng các số hạng mà.
 
Trao giải thưởng cho bác LM và bác Thunghi được đi thôi S_G ơiiii
 
Trong excel khi ta gõ một dãy số trên 15 ký tự thì các số đuôi của nó sẽ là các số 0. Ví dụ: 1234567890123456789123456789 thì nó sẽ hiện ra như sau: 1.23E+27. Khi format lại dạng number thì nó sẽ hiển thị là : 1,234,567,890,123,450,000,000,000,000
Theo tôi biết Excel chỉ lưu giữ số chính xác đến 15 chữ số đầu. Và trong VBA cũng vậy.
Nhập số 222222222222222222 vào VBA thì số trở thành 2.22222222222222E+17. Nếu nhập dạng chuỗi VBA cũng tính.
Ví dụ:
a = "222222222222222222" * 2
cho kết quả a=4,44444444444444E+17
và số đó cũng là 444444444444444000 thay vì 444444444444444444.
Tôi mới vào Help của Excel 2003 với từ khóa number, tìm thấy mục Lagre number math checker và nó down về một xls xử lý trường hợp này. Các bạn tải về tham khảo.
 

File đính kèm

Cám ơn anh Thu Nghi , anh TuanUNIVN và thầy Phạm Duy Long nhiều. Thực ra em ra, em hỏi câu hỏi một chỉ cho vui thôi ạ, còn câu hỏi thứ 2 mới là câu em cần tìm hiểu. Cám ơn các anh rất nhiều. Nếu anh nào ở SG thì hôm nào CF nhé.

Em cũng tìm thấy cái limit này trong Help của Excel.

untitled-1.jpg

 
Large number math checker1.zip giải quyết bài toán bằng cách tách các số nhân, bị nhân ra từng ô. Rồi làm bài toán nhân như chúng ta làm hồi học cấp 1. Kết quả mỗi chữ số nằm ở một ô nên khó coi.
Đang tìm cách giải quyết vấn đề trên bằng 1 hàm.
 
Từ cách làm của Large number math checker1.zip, tôi viết hàm MultStr dùng để nhân 2 số với nhau nhưng kết quả là chuỗi để Excel không làm tròn các số lớn hơn 15 chữ số.
Ví dụ ô A1 = "12345678901234567", ô A2 = "456789"
Công thức tại A3 = A1 * A2 cho kết quả 5639370319616010000000
MultStr(A1,A2) cho kết quả dạng chuỗi " 5639370319616036625363"
Nếu A1, A2 là số lớn hơn 15 chữ số phải định dạng chuỗi, nếu không Excel sẽ làm tròn số thành 0.
Mã:
Function MultStr(SoBiNhan As String, SoNhan As String) As String
Dim ArrNhan()
Dim giu As Byte, sy2 As Byte, ketqua As String
Dim len1 As Byte, len2 As Byte, lenMax As Byte, soy As Byte
len1 = Len(SoBiNhan)
len2 = Len(SoNhan)
ReDim ArrNhan(1 To len2)
For y = 1 To len2
  soy = Mid(SoNhan, y, 1)
  ketqua = ""
  For m = len1 To 1 Step -1
    sy2 = Mid(SoBiNhan, m, 1) * soy + giu
    ketqua = Right(sy2, 1) & ketqua
    If sy2 > 9 Then giu = Left(sy2, 1) Else giu = 0
  Next
  If giu > 0 Then ketqua = giu & ketqua
  If len2 - y > 0 Then ketqua = ketqua & String(len2 - y, "0")
  If y = 1 Then
    lenMax = Len(ketqua)
  ElseIf Len(ketqua) < lenMax Then
    ketqua = String(lenMax - Len(ketqua), "0") & ketqua
  End If
  ArrNhan(y) = ketqua
Next
ketqua = "": giu = 0
For y = lenMax To 1 Step -1
  tong = 0
  For m = len2 To 1 Step -1
    tong = tong + CInt(Mid(ArrNhan(m), y, 1))
  Next
  tong = tong + giu
  ketqua = Right(tong, 1) & ketqua
  If tong > 9 Then giu = Left(tong, 1) Else giu = 0
Next
MultStr = " " & ketqua
End Function
 

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

Back
Top Bottom