xingxing120384
Thành viên mới

- Tham gia
- 1/8/10
- Bài viết
- 13
- Được thích
- 0
Loại bài này có đầy trên diển đàn rồi, thậm chí yêu cầu khó hơn cũng tách được... Bài của bạn thuộc dạng dễ thôiTôi có 01 một cột dữ liệu gồm ký tự chữ và số, tôi muốn tách ký tự chữ ra khỏi ký tự số bằng hàm excel
ví dụ file đính kèm :
Loại bài này có đầy trên diển đàn rồi, thậm chí yêu cầu khó hơn cũng tách được... Bài của bạn thuộc dạng dễ thôi
Xem file
Bạn tham khảo bài viết sau bằng hàm tự tạo nhéCông thức của Thầy rất hay, nhưng nếu chuỗi là dạng như thế này thì sao ạ?
Anh123Tuan1066hay456qua
Bài này cũng có nói rồi ---> Giờ hổng biết nằm đâu! Thôi làm lại vậyCông thức của Thầy rất hay, nhưng nếu chuỗi là dạng như thế này thì sao ạ?
Anh123Tuan1066hay456qua
Muốn tốt hơn thì đừng xài công thức, dùng VBA là nhanh thôi, ví dụ cái này:hjx, theo như bác thì công thức dài quá! mà nếu nhiều dữ liệu thì file rất nặng, thật là "lợi bất cập hại" nhưng mà muốn tốt cho công việc thì phải làm thế thôi!
bạn thử hàm tự tạo này xem saoTôi có 01 một cột dữ liệu gồm ký tự chữ và số, tôi muốn tách ký tự chữ ra khỏi ký tự số bằng hàm excel
ví dụ file đính kèm :
Mình có tải file 2222.xls của các bạn về để sử dụng tách số trong dãy ký tự có text, công thức sử dụng tốt trong file này, nhưng không sử dụng được trong file mới.
Vậy, Làm thế nào để sử dụng hàm dưới đây trong 1 file khác? Nhờ các Pro giúp!
=IF($A3="";"";IF(Pos=0;$A3;LEFT($A3;Pos-1)))
*Tại sao không sử dụng được trong file mới ?
là do bạn chưa đặt 1 Name có tên là Pos trong file mới của mình ?, hay là dữ liệu trong file mới của bạn khác với dữ liệu đã có ??
* Trong hàm trên Pos là 1 Name được khai báo, để công thức gọn và nhẹ hơn. cụ thể
Pos = =MIN(IF(ISERROR(FIND({0,1,2,3,4,5,6,7,8,9},Sheet1!$A2)),"",FIND({0,1,2,3,4,5,6,7,8,9},Sheet1!$A2)))
bạn đã tìm đúng cách chưa ?Em cũng luôn bị đau đầu với cái Name này. Nhìn vào thì biết vậy nhưng cách tạo ra nó thế nào thì không thấy.
Em cũng tìm trên diễn đàn nhưng chưa thấy tài liệu nào viết về cái này.
Bác nào có cho em xin với. Mục đích làm ngắn và gọn công thức cho file nó nhẹ.
Cảm ơn các bác
bạn thử hàm tự tạo này xem sao
Function TachSoVaChu(ByVal Cll As String) As Variant
Dim a(0 To 1)
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\D+"
a(0) = .Replace(Cll, "")
.Pattern = "\d+"
a(1) = .Replace(Cll, "")
End With
TachSoVaChu = a
End Function
Function SoHoacChu(ByVal Cll As String, ByVal chu As Boolean) As String
SoHoacChu = TachSoVaChu(Cll)(IIf(chu, 1, 0))
End Function
Thầy cho em hỏi, Pos ,Temp ,Text là những hàm gì ạ. Làm thế nào để tạo ra nó ạ. Cảm ơn thầy nhiều.Bài này cũng có nói rồi ---> Giờ hổng biết nằm đâu! Thôi làm lại vậy
Xem file
File tại bài #5 tôi đã thử tách được 15 số. Với cụm chữ số mà có số lớn hơn 15 thì ra nhiều số 0 đằng sau số thứ 15.Cho mình hỏi mình làm theo công thức trong file tachso_06, nhưng sao chỉ tách được 11 số, muốn tách được nhiều số hơn thì làm sao
Cho mình hỏi =IF($A17="","",IF(Pos=0,$A17,LEFT($A17,Pos-1))) vậy "Pos" là gì vậy ạ? vì mình có làm nhưng do không biết "Pos" là gì để làm nên nó chạy ra #Name# không thôiLoại bài này có đầy trên diển đàn rồi, thậm chí yêu cầu khó hơn cũng tách được... Bài của bạn thuộc dạng dễ thôi
Xem file
Nhấn Ctrl-F3 vào Username xem nhé bạnCho mình hỏi =IF($A17="","",IF(Pos=0,$A17,LEFT($A17,Pos-1))) vậy "Pos" là gì vậy ạ? vì mình có làm nhưng do không biết "Pos" là gì để làm nên nó chạy ra #Name# không thôi
Thử vầy xem đúng ý chưa nhen!Mọi người làm ơn cho mình hỏi, trong các hàm của excel có hàm nào để biết trong một chuỗi có chữ hay không?
Mình có 2 cột A và B, kết quả mình muốn là nếu trong ô A có chữ thì ô C = B & ký tự đầu của ô A, nếu chỉ có số thì C = B
C2=B2&IF(ISERR(--A2),LEFT(A2),"")
Hoặc:
C2=B2&LEFT(IFERROR(T(A2*0),A2))
Cám ơn bạn rất nhiều, mình muốn hỏi thêm bạn là --A2 là công thức gì bạn mình chưa gặp công thức kiểu này bao giờThử vầy xem đúng ý chưa nhen!
Enter, rồi fill xuống.Mã:C2=B2&IF(ISERR(--A2),LEFT(A2),"") Hoặc: C2=B2&LEFT(IFERROR(T(A2*0),A2))
hihi ^o^
Ngày xưa hồi học cấp 2, khi học tới số nguyên âm thì biết trừ trừ bằng cộng. Vậy thôi.mình muốn hỏi thêm bạn là --A2 là công thức gì bạn mình chưa gặp công thức kiểu này bao giờ
Như cách giải thích của anh @befaint ở trên cũng là một cách dễ hiểu.Cám ơn bạn rất nhiều, mình muốn hỏi thêm bạn là --A2 là công thức gì bạn mình chưa gặp công thức kiểu này bao giờ
Chỉ hiểu là nếu là số thì kết quả là số nếu có chữ thì kết quả là #VALUE!
Bạn thử code này xem!!!Chào thầy.
Em nhờ thầy giúp tách số ra từ chuỗi theo yêu cầu. Code VBA.
File đính kèm.
Em rất cám ơn thầy.
Function joinn(str As String) As String
If IsNumeric(str) Then Exit Function
Dim item As Object
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = "\d{7}"
For Each item In .Execute(str)
joinn = joinn & IIf(joinn = "", "", "-") & item
Next
End With
End Function
TBạn thử code này xem!!!
PHP:Function joinn(str As String) As String If IsNumeric(str) Then Exit Function Dim item As Object With CreateObject("vbscript.regexp") .Global = True: .Pattern = "\d{7}" For Each item In .Execute(str) joinn = joinn & IIf(joinn = "", "", "-") & item Next End With End Function
VBA thật sự tôi không biết giải thích sao, bạn thấy được thì cứ sài thôi!!T
Bài đã được tự động gộp:
Cám ơn bạn excel lv1.5
Để mình thử xem.
Thank
Bài đã được tự động gộp:
Nhờ bạn giải thích dùm code này.
Mình gà VBA lắm.
Nhưng thấy VBA rất hay và hữu ích.
Cám ơn bạn excel lv1.5 nhiều.
T
Bài đã được tự động gộp:
Cám ơn bạn excel lv1.5
Để mình thử xem.
Thank
Bài đã được tự động gộp:
Nhờ bạn giải thích dùm code này.
Mình gà VBA lắm.
Nhưng thấy VBA rất hay và hữu ích.
Cám ơn bạn excel lv1.5 nhiều.
Không cần chỉnh code đâu bạn, bạn dùng công thức này ở ô T10:Bài đã được tự động gộp:
Code bạn viết rất hay và chạy đúng nhu cầu.
Cám ơn bạn nhiều.
Nhưng còn 1 ý là tại các ô có merge cell thì Function chưa hiểu.
Bạn có cách nào khắc phục được giúp mình luôn ko vậy?
Lưu ý: các ô có merge cell là có cùng mã hoặc hàng KM nên có thể lấy từ dòng merge đầu làm dữ kiện cho các ô sau.
Nhờ bạn giúp dùm.
Cám ơn rất nhiều.
T10=IFERROR(joinn(LOOKUP("zzzz",$K$10:K10)),"")
Không cần chỉnh code đâu bạn, bạn dùng công thức này ở ô T10:
Rồi copy xuống!!!Mã:T10=IFERROR(joinn(LOOKUP("zzzz",$K$10:K10)),"")
Bạn sửa code lại như vầy:Bài đã được tự động gộp:
Vẫn còn lỗi do ô trống lại có dữ liệu?
File đính kèm.
Bạn xem lại giúp.
Cám ơn
Function joinn(cell As Range) As String
If IsNumeric(cell) And cell.MergeCells = False Then Exit Function
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = "\d{7}"
For Each item In .Execute(cell.MergeArea(1, 1))
joinn = joinn & IIf(joinn = "", "", "-") & item
Next
End With
End Function
Bạn sửa code lại như vầy:
PHP:Function joinn(cell As Range) As String If IsNumeric(cell) And cell.MergeCells = False Then Exit Function With CreateObject("vbscript.regexp") .Global = True: .Pattern = "\d{7}" For Each item In .Execute(cell.MergeArea(1, 1)) joinn = joinn & IIf(joinn = "", "", "-") & item Next End With End Function
Dữ liệu ít quá!Các cao nhân giúp em cái tách số này với , chỉ cần lấy cái số sau chữ VAT Amt như ở mục C4 ạ ! e cám ơn các bác !
=LOOKUP(10^10,--MID(B4,SEARCH("vat amt:",B4)+8,ROW($1:$15)))
Đúng là máy em đang để phân cách hàng nghìn là dấu "." thì sẽ bị sai.Nếu gửi cho đối tác, vd. là tôi, thì sẽ có thể kết quả sai. Cái nguy hiểm nhất không phải là là kết quả sai mà là vẫn có kết quả nên đối tác sẽ không biết, không ý thức được là sai.
Còn nếu một mình trong vũ trụ, ta làm ta hưởng thì thế nào cũng được.
Trên máy tôi:View attachment 205594
C4=--SUBSTITUTE(MID(B4;SEARCH("VAT Amt:";B4)+8;SEARCH(".00";B4;SEARCH("VAT Amt:";B4))-SEARCH("VAT Amt:";B4)-8);",";"")
Khà khà khà!Đúng là máy em đang để phân cách hàng nghìn là dấu "." thì sẽ bị sai.
Em thử dùng công thức này thì đúng, hi vọng sẽ đúng cho được nhiều trường hợp
Mã:C4=--SUBSTITUTE(MID(B4;SEARCH("VAT Amt:";B4)+8;SEARCH(".00";B4;SEARCH("VAT Amt:";B4))-SEARCH("VAT Amt:";B4)-8);",";"")
=LOOKUP(10^10,--MID(SUBSTITUTE(B4,",",IF(MID(1/2,2,1)=".",",",".")),SEARCH("vat amt:",B4)+8,ROW($1:$15)))
=LOOKUP(10^10,--SUBSTITUTE(MID(B4,SEARCH("vat amt:",B4)+8,ROW($1:$15)),",",""))
Cám ơn bác Hiệp và các bác khác nha , em thấy ổn lắm rồi nhưng mà phát sinh thêm cái này này nữa bác ơi ! Em chỉ cần lấy cái số sau TONG TIEN:Dữ liệu ít quá!
Thử:
EnterMã:=LOOKUP(10^10,--MID(B4,SEARCH("vat amt:",B4)+8,ROW($1:$15)))
Thân
Vậy là bạn lấy thêm 1 điều kiện nữa, ngoài điều kiện "vat amt:"? tức là truy tìm và lấy số liệu phía sau các chữ, hoặc: "vat amt:" hoặc "Tong tien:"?Cám ơn bác Hiệp và các bác khác nha , em thấy ổn lắm rồi nhưng mà phát sinh thêm cái này này nữa bác ơi ! Em chỉ cần lấy cái số sau TONG TIEN:
C4=AGGREGATE(14,6,--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",",""),1)
(excel 2007) C4=MAX(IFERROR(--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",",""),))
(excel 97-2003) C4=MAX(IF(ISERROR(--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",","")),,--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",","")))
Fill xuống là e bấm CTRL + C và đè Shift kéo xuống rồi Enter hả bác ? có cách nào Fill nhanh hơn ko ạ , e dùng exel 2010Vậy là bạn lấy thêm 1 điều kiện nữa, ngoài điều kiện "vat amt:"? tức là truy tìm và lấy số liệu phía sau các chữ, hoặc: "vat amt:" hoặc "Tong tien:"?
Nếu đúng thì bạn dùng công thức sau:
(áp dụng cho excel 2010 trở lên)
Enter fill xuống.Mã:C4=AGGREGATE(14,6,--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",",""),1)
Nếu excel của bạn dưới 2010, bạn dùng:
Ctrl+Shift+Enter fill xuống.Mã:(excel 2007) C4=MAX(IFERROR(--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",",""),)) (excel 97-2003) C4=MAX(IF(ISERROR(--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",","")),,--SUBSTITUTE(MID(B4,SEARCH({"vat amt:","tong tien:"},B4)+{8,10},ROW($1:$15)),",","")))
Thân
Sau khi dán công thức vào ô đầu, bạn có thể làm theo các cách sau đây:Fill xuống là e bấm CTRL + C và đè Shift kéo xuống rồi Enter hả bác ? có cách nào Fill nhanh hơn ko ạ , e dùng exel 2010
Nếu ko dùng chuột thì có phím nào khác ko bác ?Sau khi dán công thức vào ô đầu, bạn có thể làm theo các cách sau đây:
1. Copy ô có công thức đúng, nhấn Ctrl+C, sau đó chọn Vùng muốn dán, nhấn Ctrl+V
2. Chọn ô có công thức, sẽ hiện vùng biên màu xanh, góc phải dưới có ô vuông nhỏ, đưa chuột vào ô vuông nhỏ đó, nhấn lì chuột trái rồi kéo xuống. (Cái này gọi là 'fill').
3. Hoặc giả: nếu cột trước hay sau nó có dữ liệu gì bất kỳ, tức không phải ô rỗng, khi đưa trỏ vào ô vuông nhỏ, click chuột trái liền 2 lần.
View attachment 205695
Thân
Đứng tại ô đầu tiên, nhấn lì Shift, rồi gõ mũi tên xuống cho đến ô nào bạn muốn, xong nhấn Ctrl+DNếu ko dùng chuột thì có phím nào khác ko bác ?
Nhấp chuột vào ô đầu tiên.Nếu ko dùng chuột thì có phím nào khác ko bác ?
Nói chung cái gì thì cũng phải sử dụng phím, ví dụ:Nếu ko dùng chuột thì có phím nào khác ko bác ?
Chiêu này cũng mới hỉ, nhấn lì Shift,
Thân
Nếu bạn thích sử dụng phím tắt cho các hoạt động khác, thì tham khảo:Nếu ko dùng chuột thì có phím nào khác ko bác ?
E cám ơn các bác nhiều , bây h mới biết thêm CTRL + F2 là in , e bị thêm cái này là ko mở 1 lúc 2 excel ở 2 cửa sổ khác nhau được , có bác nào biết cách làm cho 2 file excel mở song song để dễ làm ko ạ ?
Xem file kèm.Em muốn dùng hàm IF để C4 tự cho kết quả mà mò mãi không được và có cách nào nhanh hơn không ạ ?
ng file mới của mình ?, hay là dữ liệu trong file mới của bạn khác với dữ liệu đã có ??
* Trong hàm trên Pos là 1 Name được khai báo, để công thức gọn và nhẹ hơn. cụ thể
Pos = =MIN(IF(ISERROR(FIND({0,1,2,3,4,5,6,7,8,9},Sheet1!$A2)),"",FIND({0,1,2,3,4,5,6,7