Tách dữ liệu kiểu number (1 người xem)

  • Thread starter Thread starter kulyvn
  • Ngày gửi Ngày gửi

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

kulyvn

Thành viên thường trực
Tham gia
3/8/11
Bài viết
283
Được thích
4
Giả sử mình nhập tại ô A1 có kiểu dữ liệu là số
A1 = 9000+15000
Tại ô A2 mình muốn có kết quả là 15000 (nghĩa là chỉ lấy con số phía sau dấu + tại ô A1 thì phải làm thế nào ạ?
 
Lần chỉnh sửa cuối:
Giả sử mình nhập tại ô A1 có kiểu dữ liệu là số
A1 = 9000+15000
Tại ô A2 mình muốn có kết quả là 15000 (nghĩa là chỉ lấy con số phía sau dấu + tại ô A1 thì phải làm thế nào ạ?

Có một mẹo nhỏ dành cho bạn :
1. Bạn bấm Ctrl + H để gọi hộp hội thoại Find and Replace
2. Thay thế tất cả dấu "=" thành dấu " ' "
3. Sử dụng hàm xử lý chuỗi để tách.
Giả sử sau khi xong bước 1 và 2 dữ liệu cần tách nằm ở A1, công thức tách như sau :

=--RIGHT(A1,LEN(A1)-FIND("+",A1))
 
Có một mẹo nhỏ dành cho bạn :
1. Bạn bấm Ctrl + H để gọi hộp hội thoại Find and Replace
2. Thay thế tất cả dấu "=" thành dấu " ' "
3. Sử dụng hàm xử lý chuỗi để tách.
Giả sử sau khi xong bước 1 và 2 dữ liệu cần tách nằm ở A1, công thức tách như sau :

=--RIGHT(A1,LEN(A1)-FIND("+",A1))
Như vầy có vẻ nhanh hơn nè.
1. Copy A1 rồi Paste vào A2, chọn A2
2. Ctr+H, nhập "=*+" vào Find what, nhấn Replace
Nếu không muốn giữ dữ liệu gốc thì không cần copy
 
Cái này em muốn đặt công thức tại ô khác để nó lấy tự động a ạ, có cách nào khác không a?
Như vầy có vẻ nhanh hơn nè.
1. Copy A1 rồi Paste vào A2, chọn A2
2. Ctr+H, nhập "=*+" vào Find what, nhấn Replace
Nếu không muốn giữ dữ liệu gốc thì không cần copy
 
Vì dữ liệu nhiều nên e muốn đặt công thức tại ô khác để lấy tự động chứ không thể chuyển qua text rồi làm được a, có cách nào khác không a
Bạn phải chuyển công thức đó thành text rồi mới sử dụng đc công thức, mà công thức cũng phải là

cơ chứ công thức của b chưa đúng rồi
Bạn làm như chị hoamatroicoi hướng dẫn ý
 
con số phía sau dấu + không cố định là 6 ký tự nha a, nó luôn giao động từ 2 ký tự đến 7 ký tự a, đã thử nhập sau dấu + khác 5 ký tự là bị lỗi à
Ô E1 gõ lại công thức như sau:
Mã:
=RIGHT(GetFor,LEN(GetFor)-FIND("+",GetFor))
Fill CT xuống.
 
Làm thử tách ra 2 vế.
 

File đính kèm

Làm sao để có thể tính tổng của các số phía sau dấu + từ ô A1 - A6 mà không cần phải tính ra từng số ở cột E, vì dữ liệu mình khá nhiều nên làm như thế thì không tiện àh. Nghĩa là đặt công thức tại 1 ô và lấy tổng của các số phía sau dấu + từ A1-A6 luôn ạ
Ô E1 gõ lại công thức như sau:
Mã:
=RIGHT(GetFor,LEN(GetFor)-FIND("+",GetFor))
Fill CT xuống.
 
Làm sao để có thể tính tổng của các số phía sau dấu + từ ô A1 - A6 mà không cần phải tính ra từng số ở cột E, vì dữ liệu mình khá nhiều nên làm như thế thì không tiện àh. Nghĩa là đặt công thức tại 1 ô và lấy tổng của các số phía sau dấu + từ A1-A6 luôn ạ
Mình thấy cột A của bạn đều có quy luật 9000 + xx
Vậy để giải quyết nó thì chi cần: =SUM(A1:A6)-9000*COUNT(A1:A6)
 
không phải quy luật gì đâu, chỉ là mình kéo thả cho nhanh thôi mà. Có cách nào không
Vậy mình nghĩ là viết 1 function rùi dùng function đó thui. Còn công thức 1 phát thì mình chịu.
=test(Vùng cần tính tổng)
Mã:
Function test(rg As Range) As Double
Dim cell As Range, arr
For Each cell In rg
    arr = Split(cell.Formula, "+")
    test = test + arr(UBound(arr))
Next
End Function
 
Lần chỉnh sửa cuối:
không phải quy luật gì đâu, chỉ là mình kéo thả cho nhanh thôi mà. Có cách nào không
Bạn tham khảo:
PHP:
Sub SumAbc()
    Dim i As Long, LR As Long
    LR = Range("A" & Rows.Count).End(xlUp).Row
    With Sheets(1).Range("A5:A100")
        .Replace "=*+", ""
    End With
    Cells(LR + 1, 1).Formula = "=SUM(A5:A" & LR & ")"
  End Sub
 
Lần chỉnh sửa cuối:
Mình còn gà nên chưa biết tạo funtion như thế nào, bạn có thể hướng dẫn mình từng bước được chứ ạ
Vậy mình nghĩ là viết 1 function rùi dùng function đó thui. Còn công thức 1 phát thì mình chịu.
=test(Vùng cần tính tổng)
Mã:
Function test(rg As Range) As Double
Dim cell As Range, arr
For Each cell In rg
    arr = Split(cell.Formula, "+")
    test = test + arr(UBound(arr))
Next
End Function
 
Mình còn gà nên chưa biết tạo funtion như thế nào, bạn có thể hướng dẫn mình từng bước được chứ ạ
Bạn vào vùng soạn thảo VBA (ALt + F11) /Insert Module/Paste code vào thui.
Lưu ý là lưu file xlsm, xls (macro)
 
Công thức của bác hay quá. Bác giải thích giúp một chút được không? Tại sao lại sử dụng getfor vậy?? Em lần đầu biết các dùng này luôn
Cái GetFor là Name bạn nhé, để biết mặt mũi nó ra sao nhấn Ctrl+F3 sẽ thấy nó như thế nào.
 
=mid(a1,find("+",a1)+1,len(a1))
 
Mình muốn đặt 1 công thức với cách tìm như thế này có làm được không:
Nếu tìm trong A1:A20 nếu có dấu + thì sẽ cộng tổng của những số phía sau dấu cộng trong các ô có dấu +
Bởi vì dữ liệu mình quá nhiều nên cần nó tự động cập nhật chứ dùng funtion thì bất tiện quá
Không hiểu luốn, nếu file của b đã là xlsm rùi và có code trong đó rùi, thì chỉ cần làm theo #24
 
Lần chỉnh sửa cuối:
Mình muốn đặt 1 công thức với cách tìm như thế này có làm được không:
Nếu tìm trong A1:A20 nếu có dấu + thì sẽ cộng tổng của những số phía sau dấu cộng trong các ô có dấu +
Bởi vì dữ liệu mình quá nhiều nên cần nó tự động cập nhật chứ dùng funtion thì bất tiện quá
Muốn viết sub để tính 1 phát luôn thì phải lắm đc cấu trúc dữ liệu, bạn muốn thế thì upfie lên(mình thấy có bạn viết code cho bạn về cái đó rùi). Dùng Function có thể tùy biến. Mình update Function theo yêu cấu tính tổng của những ô có công thức +.
Mã:
Function test(rg As Range) As Double
Dim cell As Range, arr
For Each cell In rg
    If InStr(cell.Formula, "+") > 0 Then
        arr = Split(cell.Formula, "+")
        test = test + arr(UBound(arr))
    End If
Next
End Function
 
a xem file đính kèm giúp e với nhé, chỉ đặt công thức mà không dùng funtion vì đây là biểu mẫu tổng hợp nên có rất nhiều ô như thế nên dùng funtion rất bất tiện ạ
Muốn viết sub để tính 1 phát luôn thì phải lắm đc cấu trúc dữ liệu, bạn muốn thế thì upfie lên(mình thấy có bạn viết code cho bạn về cái đó rùi). Dùng Function có thể tùy biến. Mình update Function theo yêu cấu tính tổng của những ô có công thức +.
Mã:
Function test(rg As Range) As Double
Dim cell As Range, arr
For Each cell In rg
    If InStr(cell.Formula, "+") > 0 Then
        arr = Split(cell.Formula, "+")
        test = test + arr(UBound(arr))
    End If
Next
End Function
 

File đính kèm

a xem file đính kèm giúp e với nhé, chỉ đặt công thức mà không dùng funtion vì đây là biểu mẫu tổng hợp nên có rất nhiều ô như thế nên dùng funtion rất bất tiện ạ
Bạn thử CT này xem:
Mã:
=SUM((--IFERROR(MID(FORMULATEXT($B$1:$B$20),FIND("+",FORMULATEXT($B$1:$B$20))+1,10),0)+$H$1:$H$20)*($A$1:$A$20=1))
Ctrl+Shift+Enter
 
nó mới cộng những số ở cột H chứ chưa cộng những số phía sau dấu + ở cột A mà thoả mãn điêu kiện là A1:A20 = 1 , e có dùng sumproduct nhưng k biết áp dụng vào cái này như thế nào a
Bạn thử CT này xem:
Mã:
=SUM((--IFERROR(MID(FORMULATEXT($B$1:$B$20),FIND("+",FORMULATEXT($B$1:$B$20))+1,10),0)+$H$1:$H$20)*($A$1:$A$20=1))
Ctrl+Shift+Enter
 
a xem file đính kèm giúp e với nhé, chỉ đặt công thức mà không dùng funtion vì đây là biểu mẫu tổng hợp nên có rất nhiều ô như thế nên dùng funtion rất bất tiện ạ
Với đk nhử yêu cầu thì dùng sub sau
Mã:
Sub test1()
Dim tong As Long, arr, tg As Long
For i = 1 To Range("A1000").End(3).Row
    If Cells(i, 1) = 1 Then
        tg = 0
        If InStr(Cells(i, 2).Formula, "+") > 0 Then
            arr = Split(Cells(i, 2).Formula, "+")
            tg = arr(UBound(arr))
        End If
        tong = tong + Cells(i, 8) + tg
    End If
Next
Cells(1, 10) = tong
End Sub
 

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

Back
Top Bottom