Tách lấy số trong Lý trình trong nhiều trường hợp
Như tiêu đề, tôi mong các thành viên giúp đỡ công thức tại cell C28 và C32 sheet "Cao do – Ho mong' với các trường hợp của dữ liệu khác nhau ở cột E sheet "Khai bao DL" với các yêu cầu:
1) Bằng công thức càng đơn giản càng tốt. Trong Excel 2010.
2) Với dữ liệu ở E9 sheet "Khai bao DL" thì kết quả đúng ở C28 sheet "Cao do – Ho mong" là 684,51
Với dữ liệu ở E35 sheet "Khai bao DL" thì kết quả đúng ở C28 sheet "Cao do – Ho mong" là 299,85
Với dữ liệu ở E36 sheet "Khai bao DL" thì kết quả đúng ở C28 sheet "Cao do – Ho mong" là 1.158,43
Với dữ liệu ở E38 sheet "Khai bao DL" thì kết quả đúng ở C28 sheet "Cao do – Ho mong" là 1.334,68
3) Cell C32 thì lấy các dữ liệu tương tự là các số ở bên phải các cell E9, E35, E36, E38 [Tôi đang dùng hàm RIGHT].
Xin trân trọng cảm ơn!
Hàm này chỉ giải quyết được theo bài 1, thêm yêu cầu là tịt, lâu rồi tưởng bài này xong rồi chứ.
Nhưng mà nói thật, sao mà cảm giác cực rối rối, lại còn file thì xấu quá, tốt nhất là công ty mua phần mềm QLCL về dùng, nó in xẹt xẹt, đến tháng chỉ lãnh lương thôi.
C28 =TEXT(VALUE(SUBSTITUTE(MID(A9;SEARCH("Km";A9)+3;8);"+";""));"#.###,00")
C32 =TEXT(VALUE(SUBSTITUTE(MID(A9;SEARCH("Km";A9;SEARCH("Km";A9)+1)+3;8);"+";""));"#.###,00")
Cảm ơn bạn.
Với công thức của bạn đã giải quyết được 11 loại dữ liệu cột E sheet "Khai bao DL".
File chế nhiều lần cho các công trình khác nhau nên 'xấu' thật.
Mua phần mềm QLCL là 1 trong những ý hay. Để tôi nghiên cứu.
Bạn đang dùng phần mềm nào. Gợi ý cho tôi về cách mua + sử dụng với.
www.giaiphapexcel.com/diendan/threads/t%C3%A1ch-l%E1%BA%A5y-s%E1%BB%91-trong-l%C3%BD-tr%C3%ACnh-trong-nhi%E1%BB%81u-tr%C6%B0%E1%BB%9Dng-h%E1%BB%A3p.163815/#post-1093680
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Một cách khác: Tự tạo hàm người dùng (UDF)
=KM(Ô chứa Text,n)
Với tham số n=1: Km bắt đầu; n=2: Km kết thúc
Click chuột phải tại tên sheet, chọn Insert/Module rồi dán code này vào:
Option Explicit
Function KM(cellText As Range, n As Integer) As String
Dim val As String, st1 As String, st2 As String
Dim p1a&, p1b&, p2a&, p2b&
val = cellText.Value & " " ' cell chua text
p1a = InStr(1, val, "Km ") ' vi tri cua "Km" dau tien
If p1a = 0 Then ' neu khong co "Km" thi tra ve o trong
KM = ""
Exit Function
End If
p1b = InStr(InStr(p1a + 1, val, "+") + 1, val, " ") ' vi tri ky tu trang sau "Km"
st1 = Replace(Mid(val, p1a, p1b – p1a), ")", "") ' tach chuoi sau "Km"
p2a = InStr(p1b, val, "Km ") ' ' vi tri cua "Km" thu 2
p2b = InStr(InStr(p2a + 1, val, "+") + 1, val, " ") ' vi tri ky tu trang sau "Km" thu 2
If p2a > 0 Then
st2 = Replace(Mid(val, p2a, p2b – p2a), ")", "") ' tach chuoi sau "Km" thu 2
KM = IIf(n = 1, st1, st2) ' neu doi so =1 thi lay chuoi 1, 2 thì lay chuoi 2
Else
KM = st1 ' neu chi có 1 "Km" thi coi no la Km bat dau
End If
End Function
Tại ô C28, muốn chuyển lấy Km bắt đầu tại ô A9:
=KM(A9,1)
TẠi ô C32:
=KM(A9,2)
Sorry quên mất vụ này, thêm 1 chút nhé
Option Explicit
Function KM(cellText As Range, n As Integer)
Dim val As String, st1 As String, st2 As String
Dim p1a&, p1b&, p2a&, p2b&
val = Replace(cellText.Value & " ", "Km ", "Km0") ' cell chua text
p1a = InStr(1, val, "Km0") + 2 ' vi tri cua "Km" dau tien
If p1a = 0 Then ' neu khong co "Km" thi tra ve o trong
KM = ""
Exit Function
End If
p1b = InStr(InStr(p1a + 1, val, "+") + 1, val, " ") ' vi tri ky tu trang sau "Km"
st1 = Replace(Mid(val, p1a, p1b – p1a), ")", "") ' tach chuoi sau "Km"
p2a = InStr(p1b, val, "Km0") + 2 ' ' vi tri cua "Km" thu 2
p2b = InStr(InStr(p2a + 1, val, "+") + 1, val, " ") ' vi tri ky tu trang sau "Km" thu 2
If p2a > 0 Then
st2 = Replace(Mid(val, p2a, p2b – p2a), ")", "") ' tach chuoi sau "Km" thu 2
KM = IIf(n = 1, st1, st2) ' neu doi so =1 thi lay chuoi 1, 2 thì lay chuoi 2
Else
KM = st1 ' neu chi có 1 "Km" thi coi no la Km bat dau
End If
If Left(KM, 2) = "0+" Then
KM = Replace(KM, ",", "")
Else
KM = Replace(KM, ",", ".")
End If
KM = CDbl(Split(KM, "+")(0) + Split(KM, "+")(1))
End Function
Mình ra 649.26. Nếu muốn 649,26 thì chỉnh phân cách thập phân thôi.
Lạ nhỉ.
Bạn post lại file bị sai xem nào
File mình vẫn đúng.
===============================
* Khai code đầu xuân 2023
Với bài này tôi viết hàm tự tạo sử dụng Regular expression để nhìn code gọn hơn:
hàm trong excel sẽ là
= Tachlytrinh("ô dữ liệu chứa số liệu lý trình cần lấy", "vị trí cần lấy (là 1 hoặc 2)" )
ví dụ :Tachlytrinh(A1,1)
Bạn vào Tool – References tìm và tích vào ô …. Regular Expression…
2854
thử dùng dòng code dưới (hiệu chỉnh chỗ tô đỏ) xem kết quả ntn:
hoặc nếu không kết hợp thêm hàm round, hoặc hàm int lấy phần nguyên,….
Lỗi này là do nguyên nhân người nhập liệu hoặc định dạng máy của bạn về ký hiệu phân tách phần thập phân cụ thể là dấu chấm (.) hoặc dấu phẩy (,)
có thể Hiệu chỉnh lại code đề phù hợp hơn như sau:
Bạn thử dùng công thức này
C28=TEXT(AGGREGATE(14,6,0+LEFT(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(A9,"Km",REPT(" ",255),1),255)),"+",REPT(" ",255),1),255)),",",""),ROW($1:$20)),1),"###,##.00"),
C32=> thay chỗ màu đó số 1 thành số 2.
Bạn giữ nguyên 2 dấu phẩy (,) theo hình, còn lại đổi thành dấu chấm phấy (;)
Bạn thử lưu lại thành .xlsx, xong mở lại xem sao.