xin các thày giúp em hàm tách láy số không lấy chữ (1 người xem)

Liên hệ QC

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

gamegamegamegame

Thành viên hoạt động
Tham gia
5/6/15
Bài viết
144
Được thích
5
[TABLE="width: 72"]
[TR]
[TD="width: 72"]1aaaaa[/TD]
[/TR]
[TR]
[TD]20bbbb[/TD]
[/TR]
[TR]
[TD]100ccccc[/TD]
[/TR]
[/TABLE]

em mường tách lấy số ko lấy chữ thi phai dung ham gi
 

File đính kèm

File đính kèm

Upvote 0
Nhân tiện xin hỏi các anh chị ví dụ mã như thế này 1FD581C thì có thể lấy hết các số ra được không ạ!
 
Upvote 0
Nhân tiện xin hỏi các anh chị ví dụ mã như thế này 1FD581C thì có thể lấy hết các số ra được không ạ!

Bạn thử cả 2 cách trên xem kết quả thế nào. Mọi người đã up hết File trong đó có CT bên trong cả rồi sao bạn không thử luôn !
 
Upvote 0
Theo mô tả của tác giả thì tôi hiểu rằng tác giả cần tách lấy những con số bên trái chuỗi.
Vậy nếu dùng công thức thì:
Mã:
=LEFT(E5,COUNT(--LEFT(E5,ROW($1:$15))))
Ctrl + Shift + Enter
Nếu dùng VBA thì:
Mã:
Public Function TachSo(ByVal Text As String) As Double
  TachSo = Val(Text)
End Function
Chỉ vậy thôi là đủ
 
Upvote 0
Theo mô tả của tác giả thì tôi hiểu rằng tác giả cần tách lấy những con số bên trái chuỗi.
Vậy nếu dùng công thức thì:
Mã:
=LEFT(E5,COUNT(--LEFT(E5,ROW($1:$15))))
Ctrl + Shift + Enter
Nếu dùng VBA thì:
Mã:
Public Function TachSo(ByVal Text As String) As Double
  TachSo = Val(Text)
End Function
Chỉ vậy thôi là đủ

Thầy ơi thầy cho em hỏi, giả sử em có 1 chuỗi là: Km1800+450 ÷ Km1800+756 (trái tuyến)
giờ em muốn tách chuỗi trên thành 2 ô riêng biệt, 1 ô là 1800450, còn ô khác là 1800756 thì phải làm cách nào ạ
 
Upvote 0
Thầy ơi thầy cho em hỏi, giả sử em có 1 chuỗi là: Km1800+450 ÷ Km1800+756 (trái tuyến)
giờ em muốn tách chuỗi trên thành 2 ô riêng biệt, 1 ô là 1800450, còn ô khác là 1800756 thì phải làm cách nào ạ

Yêu cầu cái gì cũng vậy, nên cho file thực tế lên sẽ hay hơn (mất công hỏi đi hỏi lại nhiều lần)
 
Upvote 0
Theo mô tả của tác giả thì tôi hiểu rằng tác giả cần tách lấy những con số bên trái chuỗi.


Nếu dùng VBA thì:
Mã:
Public Function [COLOR=#ff0000]TachSo(ByVal Text As String)[/COLOR] As Double
  TachSo = Val(Text)
End Function
Chỉ vậy thôi là đủ

Chú Ndu cho con hỏi , byVal Text nghĩa là thế nào ạ, khi nào thì mình dùng byVal Text và viết như cách của chú thì có lợi gì hơn so với viết

như thế này ạ : tachso(rg As Range) As Double .

Con cảm ơn chú !
 
Upvote 0
Chú Ndu cho con hỏi , byVal Text nghĩa là thế nào ạ, khi nào thì mình dùng byVal Text và viết như cách của chú thì có lợi gì hơn so với viết

như thế này ạ : tachso(rg As Range) As Double .

Con cảm ơn chú !

Nếu không ghi byVal thì ngầm định là byRef (tức rg as Range sẽ tương đương byRef rg as Range)
Tìm trên diễn đàn sự khác biệt của byValbyRef để biết thêm chi tiết:
http://www.giaiphapexcel.com/forum/...ange(ByVal-Target-As-Range)&p=27667#post27667
http://www.giaiphapexcel.com/forum/...-hữu-ích-của-Lê-Văn-Duyệt&p=235377#post235377
Lời khuyên: Cứ nên dùng byVal nếu bạn không nắm chắc byRef nó hoạt động như thế nào
 
Upvote 0
Em gửi file lên thầy kiểm tra giúp em với, em cảm ơn!

Dùng phương pháp tách tên mà làm:
1> Công thức cho cell B1:
Mã:
=--TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(MID($A1,1,FIND("(",$A1)-1),"Km",""),"+","")),"÷",REPT(" ",1000)),1000))
2> Công thức cho cell C1:
Mã:
=--TRIM(RIGHT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(MID($A1,1,FIND("(",$A1)-1),"Km",""),"+","")),"÷",REPT(" ",1000)),1000))
 
Upvote 0
Dùng phương pháp tách tên mà làm:
1> Công thức cho cell B1:
Mã:
=--TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(MID($A1,1,FIND("(",$A1)-1),"Km",""),"+","")),"÷",REPT(" ",1000)),1000))
2> Công thức cho cell C1:
Mã:
=--TRIM(RIGHT(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(MID($A1,1,FIND("(",$A1)-1),"Km",""),"+","")),"÷",REPT(" ",1000)),1000))

Em cảm ơn thầy nhiều, nhìn công thức choáng luôn, thầy cho em hỏi tại sao lại có 2 dấu gạch ngang ở trước hàm trim ạ, với trong file em gửi thầy còn có 1 yêu cầu nhờ thầy giúp công thức ở ô C1 để tách trái, phải riêng nữa, thầy xem giúp em với
 
Upvote 0
Em cảm ơn thầy nhiều, nhìn công thức choáng luôn, thầy cho em hỏi tại sao lại có 2 dấu gạch ngang ở trước hàm trim ạ, với trong file em gửi thầy còn có 1 yêu cầu nhờ thầy giúp công thức ở ô C1 để tách trái, phải riêng nữa, thầy xem giúp em với

Có 2 dấu -- để chuyển chuỗi thành số. Bạn thử bỏ 2 dấu -- để kiểm chứng kết quả
Công thức D1 dễ rồi:
Mã:
=IF(COUNTIF(A1,"*(trái *"),B1,C1)
 
Upvote 0
Có 2 dấu -- để chuyển chuỗi thành số. Bạn thử bỏ 2 dấu -- để kiểm chứng kết quả
Công thức D1 dễ rồi:
Mã:
=IF(COUNTIF(A1,"*(trái *"),B1,C1)
Không hiểu sao em gõ công thức ở ô D1 lại không tách ra kết quả trái, hoặc phải, mà lại ra toàn giá trị số thôi thầy ạ
 
Upvote 0
Bạn xem file đính kèm xem đúng ý bạn chưa?

B1 = --TRIM(SUBSTITUTE(SUBSTITUTE(LEFT(A1;FIND(".";A1)-1);"Km";"");"+";""))

C1 = IF(MID(A1;FIND("(";A1)+1;1)="t";SUBSTITUTE(MID(A1;FIND("Km";A1;2)+2;FIND("(";A1)-FIND("Km";A1;2)-2);"+";"");--SUBSTITUTE(MID(A1;FIND("Km";A1;2)+2;FIND(".";A1;FIND("÷";A1))-FIND("Km";A1;2)-2);"+";""))

D1 = MID(A1;FIND("(";A1)+1;4)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Có 2 dấu -- để chuyển chuỗi thành số. Bạn thử bỏ 2 dấu -- để kiểm chứng kết quả
Công thức D1 dễ rồi:
Mã:
=IF(COUNTIF(A1,"*(trái *"),B1,C1)
thầy có thể cho em tài liệu liên quan đến mấy cái ký tự đó không thầy. tại sao lại biết -- là chuyển text sang value. có vài công thức em thấy có mấy dấu phẩy liên tiếp nhau ấy. hình như là offset thì phải. học tin học căn bản thì chả được biết mấy cái đó với mấy vụ hàm dò tìm offset index với mảng.
 
Upvote 0
thầy có thể cho em tài liệu liên quan đến mấy cái ký tự đó không thầy. tại sao lại biết -- là chuyển text sang value. có vài công thức em thấy có mấy dấu phẩy liên tiếp nhau ấy. hình như là offset thì phải. học tin học căn bản thì chả được biết mấy cái đó với mấy vụ hàm dò tìm offset index với mảng.

-- là 2 dấu trừ ấy mà. Trừ của Trừ thì bằng Cộng. Vậy thôi
--(chuỗi) sẽ tương đương với 1*(chuỗi) hoặc Value(chuỗi)
(viết theo kiểu nào cũng được)
 
Upvote 0
Bạn xem file đính kèm xem đúng ý bạn chưa?

B1 = --TRIM(SUBSTITUTE(SUBSTITUTE(LEFT(A1;FIND(".";A1)-1);"Km";"");"+";""))

C1 = IF(MID(A1;FIND("(";A1)+1;1)="t";SUBSTITUTE(MID(A1;FIND("Km";A1;2)+2;FIND("(";A1)-FIND("Km";A1;2)-2);"+";"");--SUBSTITUTE(MID(A1;FIND("Km";A1;2)+2;FIND(".";A1;FIND("÷";A1))-FIND("Km";A1;2)-2);"+";""))

D1 = MID(A1;FIND("(";A1)+1;4)

dạ file anh gửi đúng ý em rồi, em cảm ơn anh ạ
 
Upvote 0
Đã là box lập trình thì không nên dung hàm. Xin góp vui với mọi người bằng file
 

File đính kèm

Upvote 0
Đã là box lập trình thì không nên dung hàm. Xin góp vui với mọi người bằng file

Lỡ chơi lập trình rồi thì hãy thử với 10000 dòng dữ liệu xem code chạy ra kết quả trong thời gian bao lâu?
Nếu thấy rảnh nữa, hãy thử với 60000 dòng dữ liệu
Ẹc... Ẹc...
 
Upvote 0
Đã là box lập trình thì không nên dung hàm. Xin góp vui với mọi người bằng file

Có lẻ bạn cũng mới bước vào VBA, nhưng như vậy là bạn có sự cố gắng rất tuyệt vời.
Tuy nhiên kết quả chưa chính xác bạn ơi, mình copy ra đây 2 dòng để bạn thấy
[TABLE="width: 446"]
[TR]
[TD]1801000[/TD]
[TD]1801403,02[/TD]
[TD]Trái[/TD]
[/TR]
[TR]
[TD]1801000[/TD]
[TD]1801403,02[/TD]
[TD]Phải[/TD]
[/TR]
[/TABLE]
Thừa chữ màu đỏ.
 
Upvote 0
Có lẻ bạn cũng mới bước vào VBA, nhưng như vậy là bạn có sự cố gắng rất tuyệt vời.
Tuy nhiên kết quả chưa chính xác bạn ơi, mình copy ra đây 2 dòng để bạn thấy
[TABLE="width: 446"]
[TR]
[TD]1801000[/TD]
[TD]1801403,02[/TD]
[TD]Trái[/TD]
[/TR]
[TR]
[TD]1801000[/TD]
[TD]1801403,02[/TD]
[TD]Phải[/TD]
[/TR]
[/TABLE]
Thừa chữ màu đỏ.
Bạn xem lại yêu cầu của bạn Genius111. Là mình thừa hay bạn thiếu ^^. Xem ở ô C3
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn xem lại yêu cầu của bạn Genius111. Là mình thừa hay bạn thiếu ^^. Xem ở ô C3

Mình không muốn tranh cãi với bạn, file mình làm bằng hàm đã được chủ thớt xác định là đúng yêu cầu, đối chiếu với kết quả của bạn thì mình thấy dư phần chữ đỏ, vậy thôi.

Ô C3 thể hiện: nếu là trái thì lấy luôn 2 số sau dấu , còn nếu là phải thì chỉ lấy các con số trước dấu , thôi, không biết mình hiểu vậy có sai không?
 
Upvote 0
Mình không muốn tranh cãi với bạn, file mình làm bằng hàm đã được chủ thớt xác định là đúng yêu cầu, đối chiếu với kết quả của bạn thì mình thấy dư phần chữ đỏ, vậy thôi.

Ô C3 thể hiện: nếu là trái thì lấy luôn 2 số sau dấu , còn nếu là phải thì chỉ lấy các con số trước dấu , thôi, không biết mình hiểu vậy có sai không?
Hi mình chỉ muốn bạn down lại file ở #13 xem ô C3 tác giả để gì???
 
Upvote 0
Hi mình chỉ muốn bạn down lại file ở #13 xem ô C3 tác giả để gì???
Thôi thì mình cũng chiều bạn 1 lần vậy, mình đã làm đúng lời bạn và mình copy ra đây luôn
[TABLE="width: 242"]
[TR]
[TD]1800700[/TD]
[TD]1801000[/TD]
[TD]phải[/TD]
[/TR]
[TR]
[TD]1800700[/TD]
[TD]1801000[/TD]
[TD]phải[/TD]
[/TR]
[TR]
[TD]1801000[/TD]
[TD]1801403.02[/TD]
[TD]trái[/TD]
[/TR]
[/TABLE]
bạn xem nhé.
 
Upvote 0
Thôi thì mình cũng chiều bạn 1 lần vậy, mình đã làm đúng lời bạn và mình copy ra đây luôn
[TABLE="width: 242"]
[TR]
[TD]1800700[/TD]
[TD]1801000[/TD]
[TD]phải[/TD]
[/TR]
[TR]
[TD]1800700[/TD]
[TD]1801000[/TD]
[TD]phải[/TD]
[/TR]
[TR]
[TD]1801000[/TD]
[TD]1801403.02[/TD]
[TD]trái[/TD]
[/TR]
[/TABLE]
bạn xem nhé.
Đấy có thể do định dạng máy tính giữa"." và ",". Bây giờ bạn thử xem lại file bạn cắt cụt đến đâu. 1m lệch ở công trình bạn biết tác hại ra sao???. Nhiều tác giả mừng quá mà cũng ko nhớ mình yêu cầu gì bạn ạ ^^
 
Upvote 0
Mình không muốn tranh cãi với bạn, file mình làm bằng hàm đã được chủ thớt xác định là đúng yêu cầu, đối chiếu với kết quả của bạn thì mình thấy dư phần chữ đỏ, vậy thôi.

Ô C3 thể hiện: nếu là trái thì lấy luôn 2 số sau dấu , còn nếu là phải thì chỉ lấy các con số trước dấu , thôi, không biết mình hiểu vậy có sai không?
hì ý em là công thức ở cột D của anh đúng với yêu cầu của em, còn ở cột B và C thì như ý anh doatmenhhon mới đúng, nhưng vì em lấy công thức của thầy Ndu ở 2 cột đó rồi nên không đề cập tới 2 cột đó nữa :)
 
Upvote 0

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

Back
Top Bottom