Chỉ cộng các ký tự số trong 1 ô

  • Thread starter minhtoyou
  • Ngày gửi
M

minhtoyou

Sơ cấp
1/6/12
4
1
3
39
ha nam
mình có một file excel mà trong 1 ô có các ký tự cả số lẫn chữ như sau
VD:
ô A1: 2 - nhập mới
ô A2: 6
ô A3: 9 - thu hồi
ô A4: 157
Ô A5: 6 - mất
v.v....
Mình muốn cộng tổng cột A này nhưng chỉ cộng các ký tự số, như ví dụ trên thì sẽ là: 2 + 6 + 9 + 157 + 6
nhưng vấn đề là trong một ô có cả số và chữ nên không thể dùng hàm SUM được
bạn nào có giải pháp nào để cho mình chỉ cộng các số trong một ô không.
mình cảm ơn các bạn :)
 
  • Like
Reactions: eTax
kuldokk

kuldokk

Sơ cấp
26/4/14
39
11
8
31
Frankfurt am Main
www.youtube.com
Bạn tham khảo thêm:

PHP:
Function congsotrongchuoi(r As Range)
Dim strPattern As String: strPattern = "[^0-9]"
Dim strReplace As String: strReplace = ""
Dim cell As Range
Dim res As Long
res = 0
Set RE = CreateObject("VBScript.RegExp")
With RE
    .Global = True
    .Pattern = strPattern
End With

For Each cell In r
    If IsNumeric(cell.Value) Then
        res = res + cell.Value
    Else
        res = res + CInt(RE.Replace(cell.Value, strReplace))
    End If
Next
congsotrongchuoi = res
End Function
 
Hùng Lương

Hùng Lương

Sơ cấp
2/10/14
18
2
3
28
Bạn tham khảo thêm:

PHP:
Function congsotrongchuoi(r As Range)
Dim strPattern As String: strPattern = "[^0-9]"
Dim strReplace As String: strReplace = ""
Dim cell As Range
Dim res As Long
res = 0
Set RE = CreateObject("VBScript.RegExp")
With RE
    .Global = True
    .Pattern = strPattern
End With

For Each cell In r
    If IsNumeric(cell.Value) Then
        res = res + cell.Value
    Else
        res = res + CInt(RE.Replace(cell.Value, strReplace))
    End If
Next
congsotrongchuoi = res
bạn có thể vui lòng hướng dẫn chi tiết hơn được không ak???
End Function
 
kuldokk

kuldokk

Sơ cấp
26/4/14
39
11
8
31
Frankfurt am Main
www.youtube.com
1. Trong excel bạn mở VBA Editor bằng cách bấm tổ hợp phím Alt + F11
2. Trong VBE tạo module mới bằng cách bấm insert/new module
3. Dán code ở trên vào module này
4. Trở lại bảng tính, và sử dụng bằng cách bấm vào 1 ô rồi "=congsotrongchuoi( vùng muốn tính tổng)"

Tham khảo video này để biết thêm về VBA này
 
M

minhtoyou

Sơ cấp
1/6/12
4
1
3
39
ha nam
để mình thử xem thế nào, rất cảm ơn các bạn đã nhiệt tình giúp đỡ mình :)
 
M

minhtoyou

Sơ cấp
1/6/12
4
1
3
39
ha nam
mình đã làm theo các bạn và giải quyết được vấn đề mình đưa ra. Nhưng bây giờ lại nảy sinh một số trường hợp khác, đó là sẽ có một số ô có dạng: "1250 - nhập mới 250" hoặc "78 - nhập mới 12 thu hồi 06" Tức là phần phía sau lại xuất hiện cả số lẫn chữ. Mình đã rà soát lại danh mục vật tư và nhận thấy rằng không có giá trị nào lớn hơn 10.000 có nghĩa là số đầu tiên chỉ có tối đa 4 ký tự. Vấn đề bây giờ sẽ trở thành: chỉ cộng tổng các số đầu tiên của một ô (số này chạy từ 1 đến 9999). Các bạn giúp mình với, mình mù tịt về code :(
 
kuldokk

kuldokk

Sơ cấp
26/4/14
39
11
8
31
Frankfurt am Main
www.youtube.com
mình đã làm theo các bạn và giải quyết được vấn đề mình đưa ra. Nhưng bây giờ lại nảy sinh một số trường hợp khác, đó là sẽ có một số ô có dạng: "1250 - nhập mới 250" hoặc "78 - nhập mới 12 thu hồi 06" Tức là phần phía sau lại xuất hiện cả số lẫn chữ. Mình đã rà soát lại danh mục vật tư và nhận thấy rằng không có giá trị nào lớn hơn 10.000 có nghĩa là số đầu tiên chỉ có tối đa 4 ký tự. Vấn đề bây giờ sẽ trở thành: chỉ cộng tổng các số đầu tiên của một ô (số này chạy từ 1 đến 9999). Các bạn giúp mình với, mình mù tịt về code :(
bạn thử code này nhé, nhưng nhớ test lại trong các trường hợp của bạn ( chỉ tính tổng của 1 đến 4 kí tự đầu tiên )

PHP:
Function congsotrongchuoi(r As Range)
Dim strPattern As String: strPattern = "[^0-9]"
Dim strReplace As String: strReplace = ""
Dim cell As Range
Dim res As Long
res = 0
Set RE = CreateObject("VBScript.RegExp")
With RE
    .Global = True
    .Pattern = strPattern
End With

For Each cell In r
    If IsNumeric(cell.Value) Then
        res = res + cell.Value
    Else
        res = res + CInt(RE.Replace(Left(cell.Value, 4), strReplace))
    End If
Next
congsotrongchuoi = res
End Function
 
  • Like
Reactions: minhtoyou
M

minhtoyou

Sơ cấp
1/6/12
4
1
3
39
ha nam
mình làm được rồi, cảm ơn bạn rất nhiều, hic, cái code này là bạn học từ đâu ra và học như nào thế, có khó không vậy bạn
 
kuldokk

kuldokk

Sơ cấp
26/4/14
39
11
8
31
Frankfurt am Main
www.youtube.com
mình làm được rồi, cảm ơn bạn rất nhiều, hic, cái code này là bạn học từ đâu ra và học như nào thế, có khó không vậy bạn
Mình tự học qua sách vở với do yêu cầu công việc và cũng nhờ giải quyết những vẫn đề của các bạn khác trên các diễn đàn nên biết thôi :D
 
  • Like
Reactions: minhtoyou

Thành viên trực tuyến

  • xuanquang1931999

Xem nhiều

TEXT LINK