Đố vui nho nhỏ về công thức tính tổng.

Liên hệ QC
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
 
Web KT

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

Back
Top Bottom