Tách ký tự chữ lẫn trong ký tự số bằng hàm

Liên hệ QC

xingxing120384

Thành viên mới
Tham gia
1/8/10
Bài viết
13
Được thích
0
Tô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 :
 

File đính kèm

  • 2222.xls
    13.5 KB · Đọc: 417
Tô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
 

File đính kèm

  • 2222.xls
    13.5 KB · Đọc: 1,268
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!
 
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)))
 
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)))
 
*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)))

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
 
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 đã tìm đúng cách chưa ?
http://www.giaiphapexcel.com/forum/showthread.php?7340-Hỏi-đáp-về-Name-trong-Excel
 
bạn thử hàm tự tạo này xem sao

Mẹo nhỏ về kỹ thuật viết hàm người dùng:

Thông thuờng với loại yêu cầu nhiều kết quả thế này, dùng hàm trả về mảng tiện lợi hơn.
Kế tiếp viết thêm một hàm trả về 1 phần tử mảng. Như vậy có thể dùng được nhiều cách.

Mã:
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

Muốn dùng hàm mảng thì bôi đen hai ô B2:C2 và gõ =TachSoVaChu(A2)
Dĩ nhiên phải dùng Ctrl+Shift+Enter vì đây là hàm mảng. Nếu Enter thường thì cả hai ô đều lấy trị mặc định, tức là phần tử đầu tiên.

Không muốn dùng mảng thì
B2: =SoHoacChu(A2,0)
C2: =SoHoacChu(A2,1)

Nếu không muón viết thêm cái hàm chọn lựa thì vẫn có thể dùng hàm INDEX để lấy từng phân tử của hàm mảng

B2: =INDEX(TachSoVaChu(A2),1)
C2: =INDEX(TachSoVaChu(A2),2)

Lưu ý cái pattern ở trên. Trong code củaa bạn dùng pattern từng ký tự. Như vậy RegEx phải replace từng ký tự riêng rẻ mà nó tìm được.
Nếu ta có thể lợi dụng tính chất tham lam của RegEx thì nên bảo nó thay từng cụm ký tự nó tìm được.

Lưu ý 2: RegEx là một cổ máy khá nặng nề. Cộng thêm viết code thế này thì mỗi lần hàm chạy lại phải dựng một đói tượng (object), chạy xong rồi huỷ đi, rất phí. Nếu viết hàm sử dụng nhiều trên bảng tính thì cũng có thủ thuật chỉ dựng đối tượng 1 lần. Nhưng để dịp khác sẽ bàn.
 
Lần chỉnh sửa cuối:
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 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
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.
 
sao mình dùng công thức của bạn sang 1 file mới lại bị lỗi là như nào nhỉ
 
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
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ôi
 
Web KT
Back
Top Bottom