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

khocthet296

Thành viên mới
Tham gia ngày
13 Tháng sáu 2011
Bài viết
12
Thích
2
Điểm
0
Tuổi
33
#1
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,
Cảm ơn các bạn giúp đỡ:D
 

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Thích
52,192
Điểm
11,910
#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,
Cảm ơn 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
 

khocthet296

Thành viên mới
Tham gia ngày
13 Tháng sáu 2011
Bài viết
12
Thích
2
Điểm
0
Tuổi
33
#3
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.
Cảm ơn bác rất nhiều.
 

File đính kèm

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Thích
52,192
Điểm
11,910
#4
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.
Cảm ơn 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

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
3,861
Thích
9,205
Điểm
860
#5
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.
Cảm ơn 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

Luc Van

Thành viên tích cực
Tham gia ngày
1 Tháng mười hai 2009
Bài viết
799
Thích
573
Điểm
0
#6
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.
 

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Thích
52,192
Điểm
11,910
#7
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:

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia ngày
13 Tháng sáu 2006
Bài viết
3,861
Thích
9,205
Điểm
860
#8
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
 

khocthet296

Thành viên mới
Tham gia ngày
13 Tháng sáu 2011
Bài viết
12
Thích
2
Điểm
0
Tuổi
33
#10
đú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:
Tham gia ngày
18 Tháng mười 2012
Bài viết
1
Thích
0
Điểm
0
Tuổi
30
#11
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 đở.
 

Khainv

Thành viên chính thức
Tham gia ngày
23 Tháng mười hai 2010
Bài viết
99
Thích
55
Điểm
0
#12
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,
 

tueyennhi

Thành viên tích cực
Tham gia ngày
18 Tháng mười 2010
Bài viết
1,032
Thích
73
Điểm
420
Tuổi
29
#14
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:

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
5,827
Thích
6,693
Điểm
560
#15
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?
 

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
5,827
Thích
6,693
Điểm
560
#17

tueyennhi

Thành viên tích cực
Tham gia ngày
18 Tháng mười 2010
Bài viết
1,032
Thích
73
Điểm
420
Tuổi
29
#18
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
 

AutoReply

Thành viên tích cực
Tham gia ngày
18 Tháng hai 2016
Bài viết
446
Thích
565
Điểm
335
#19
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ì?
trả về y nguyên đoạn chuỗi đã truyền vào đó bạn. :)
 

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
5,827
Thích
6,693
Điểm
560
#20
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
 
Top