Nhờ các bạn giúp hộ hàm tính tổng các số có trong chuỗi kí tự!

Liên hệ QC

khocthet296

Thành viên mới
Tham gia
13/6/11
Bài viết
12
Được thích
2
Mình là mem mới của 4rum.
nhờ các bạn 1 hàm tính tổng các số có hoặc xuất hiện trong dãy có phân biệt bằng 1 kí tự.
Ví dụ như: chuỗi "8R+8L" mark là "+" khi tách số ra còn 88= 8+8 =16
nhưng cách mình làm chỉ làm đc với số có 1 chữ số, với những số có từ 2 chữ số trở lên thì không làm đc
ví dụ như mình đang cần làm chuỗi "12R+12L" thì mình chỉ làm tách số đc ra là 1212 và tính được tổng các chữ số trong chuỗi =6 chứ không phải =24, là đáp án mình cần.
Mình rất gà khoản này,
thanks các bạn giúp đỡ:D
 
Mình là mem mới của 4rum.
nhờ các bạn 1 hàm tính tổng các số có hoặc xuất hiện trong dãy có phân biệt bằng 1 kí tự.
Ví dụ như: chuỗi "8R+8L" mark là "+" khi tách số ra còn 88= 8+8 =16
nhưng cách mình làm chỉ làm đc với số có 1 chữ số, với những số có từ 2 chữ số trở lên thì không làm đc
ví dụ như mình đang cần làm chuỗi "12R+12L" thì mình chỉ làm tách số đc ra là 1212 và tính được tổng các chữ số trong chuỗi =6 chứ không phải =24, là đáp án mình cần.
Mình rất gà khoản này,
thanks các bạn giúp đỡ:D
Hỏi lại đây:
- Chuổi của bạn có phải luôn có 2 thành phần cách nhau bởi dấu cộng?
- Ký tự mà bạn muốn loại bỏ luôn là R và L?
Đúng không?
Nếu có khác hơn, tốt nhất cho file lên đây đi
 
Upvote 0
vâng, chính xác là như vậy, chuỗi luôn có 2 phần tách nhau bởi "+"
Kí tự thì không nhất thiết phải là L và R, có thể là TL&TR......
có file tham khảo bác thử hộ em với.
thanks bác rất nhiều.
 

File đính kèm

  • tach so 2 chu so.xls
    16.5 KB · Đọc: 68
Upvote 0
vâng, chính xác là như vậy, chuỗi luôn có 2 phần tách nhau bởi "+"
Kí tự thì không nhất thiết phải là L và R, có thể là TL&TR......
có file tham khảo bác thử hộ em với.
thanks bác rất nhiều.
Bài này cũng hơi.. tê vì các ký tự không cố định
Thôi thì chơi kiểu bùn bằng cách đặt name
PHP:
Tmp1=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A2,"0",""),"1",""),"2",""),"3",""),"4","")
PHP:
Tmp2=EVALUATE("{"""&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Tmp1,"5",""),"6",""),"7",""),"8",""),"9",""),"+",""",""")&"""}")
PHP:
=SUBSTITUTE(SUBSTITUTE(Sheet1!$A2,INDEX(Tmp2,,1),""),INDEX(Tmp2,,2),"")
PHP:
=IF(ISERROR(EVALUATE(Tmp)),"",EVALUATE(Tmp))
Công thức tại B2: =Eval rồi kéo fill xuống
 

File đính kèm

  • tach so 2 chu so.xls
    16 KB · Đọc: 70
Upvote 0
vâng, chính xác là như vậy, chuỗi luôn có 2 phần tách nhau bởi "+"
Kí tự thì không nhất thiết phải là L và R, có thể là TL&TR......
có file tham khảo bác thử hộ em với.
thanks bác rất nhiều.

Tôi gửi bạn hàm viết bằng VBA. Code hàm dưới đây:

Mã:
Function SumStr(ByVal Text As String) As Double
    Dim I&, sChar$
    For I = 1 To Len(Text)
        sChar = Mid(Text, I, 1)
        If IsNumeric(sChar) Then
            SumStr = SumStr + CDbl(sChar)
        End If
    Next I
End Function

Bạn có thể download file đính kèm.
 

File đính kèm

  • tach so 2 chu so.xls
    37.5 KB · Đọc: 42
Upvote 0
Tôi gửi bạn hàm viết bằng VBA. Code hàm dưới đây:

Mã:
Function SumStr(ByVal Text As String) As Double
Dim I&, sChar$
For I = 1 To Len(Text)
sChar = Mid(Text, I, 1)
If IsNumeric(sChar) Then
SumStr = SumStr + CDbl(sChar)
End If
Next I
End Function

Bạn có thể download file đính kèm.

Hình như không đúng ý chủ topic Thầy Tuân ơi, giống như cách của Thầy Ndu thì đúng hơn.
 
Upvote 0
Tôi gửi bạn hàm viết bằng VBA. Code hàm dưới đây:

Mã:
Function SumStr(ByVal Text As String) As Double
    Dim I&, sChar$
    For I = 1 To Len(Text)
        sChar = Mid(Text, I, 1)
        If IsNumeric(sChar) Then
            SumStr = SumStr + CDbl(sChar)
        End If
    Next I
End Function
Bạn có thể download file đính kèm.
Nếu dùng code thì bài này không cần vòng lập đâu Tuân à:
PHP:
Function EvalStr(ByVal Text As String) As Double
  On Error Resume Next
  With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[^0-9+]"
    EvalStr = Evaluate(.Replace(Text, ""))
  End With
End Function
Với lại hàm của Tuân là cộng từng ký tự... Ví dụ chuổi 20L+21R thì hàm của Tuân cho kết quả =5 mà lý ra phải =41 mới đúng
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu dùng code thì bài này không cần vòng lập đâu Tuân à:
PHP:
Function EvalStr(ByVal Text As String) As Double
  On Error Resume Next
  With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[^0-9+]"
    EvalStr = Evaluate(.Replace(Text, ""))
  End With
End Function
Với lại hàm của Tuân là cộng từng ký tự... Ví dụ chuổi 20L+21R thì hàm của Tuân cho kết quả =5 mà lý ra phải =41 mới đúng

Em hiểu nhầm ý đồ tác giả rồi. :D
 
Upvote 0
Em hiểu nhầm ý đồ tác giả rồi. :D
đúng là như thế thầy ạ, em cũng làm như thế thì ví dụ như ở trên đã nêu, nếu là 20L+20R thì kết quả phải là 40 đơn vị, nhưng theo cách trên thì kết quả chỉ ra bằng 4.
mong các thầy giúp em ạ:D

Rất cảm ơn thầy Ndu và các thầy, em đã thử mẫu của thầy và kết quả rất ok.
 
Lần chỉnh sửa cuối:
Upvote 0
xin chào mọi người.

mình muốn tính tổng các số trong ô vd: ô a1: cd12, a2 : c8, a3 : d12,5. mình muốn hỏi có cách nào để tính tổng số 3 ô = 12+8+12.5= 32,5 ko? mong các bạn giúp đở.
 
Upvote 0
Xây dựng một bài giải tổng quát thì khó, nhưng khéo xử lý theo từng trường hợp tùy theo dữ liệu thực thì có lẽ không quá phức tạp, nhất là nếu bạn chỉ cần làm một lần.

Trong trường hợp này có thể tìm quy luật về số chữ có trong chuỗi 1, 2, 3 , ... chữ rồi xử lý cắt ra sau đó cộng chẳng hạn,
 
Upvote 0
nếu như chuỗi k phải 2 phần mà là 3 hoặc 4 phần thì sao ?
mình thử cách của bạn ndu thì k ra kết quả ?
vd : 10L+10R+10E = ??
 
Upvote 0
Nếu dùng code thì bài này không cần vòng lập đâu Tuân à:
PHP:
Function EvalStr(ByVal Text As String) As Double
  On Error Resume Next
  With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[^0-9+]"
    EvalStr = Evaluate(.Replace(Text, ""))
  End With
End Function
Với lại hàm của Tuân là cộng từng ký tự... Ví dụ chuổi 20L+21R thì hàm của Tuân cho kết quả =5 mà lý ra phải =41 mới đúng
Thầy ơi nếu như chỉ tính tổng chuỗi, bỏ qua ô mà chỉ có số thì làm thế nào ạ? Ví dụ em chỉ tính tổng dãy các chuỗi có duy nhất ký tự D thì hàm trên cần thay đổi thế nào (Lưu ý trong dãy chuỗi đó có thể có ô có giá trị là "DN"
 
Lần chỉnh sửa cuối:
Upvote 0
Thầy ơi nếu như chỉ tính tổng chuỗi, bỏ qua ô mà chỉ có số thì làm thế nào ạ? Ví dụ em chỉ tính tổng dãy các chuỗi có duy nhất ký tự D thì hàm trên cần thay đổi thế nào (Lưu ý trong dãy chuỗi đó có thể có ô có giá trị là "DN"
DD thì sao?
 
Upvote 0
Bỏ thì bỏ.
Hỏi tiếp: cái hàm trên nó không phân biệt kết quả tính ra 0 thực thụ (1-1=0) hay do chả có số nào để tính. Bây giờ nếu bỏ qua thì muốn nó trả về cái gì?
Trong dãy của em có
Tại ô A1: 1D
Tại ô B1: 0.95D
Tại ô C1: DN
Tại ô D1: P
Tại ô E1: 1

Em muốn ra kết quả cuối là 1.95
 
Upvote 0
Function SumTumLum(byVal rg As Range) As Double
Dim cll, str
for each cll in rg
str = Replace(cll.value, "D", "")
If Len(str) = Len(cll.Value) - 1 Then ' co 1 ky tu D
If IsNumeric(str) Then SumTumLum = SumTumLum + Val(sttr)
End If
next cll
 
Upvote 0
Web KT
Back
Top Bottom