Yêu cầu này, có lẽ phải dùng UDF.Nhờ mọi người viết dùm công thức để loại bỏ tất cả ký tự chữ trong 1 chuỗi văn bản có số và chữ với ạ.
Khủng thì đã sao? Hơi bất tiện nhưng dùng được là mừng rồi. Bác còn nhớ có người nhờ GPE rút gọn công thức dài hơn trang A4 không?Ở đây có mấy tay lọc giỏi lắm. Cái này dùng công thức khủng cũng được. Bạn bảo thớt chịu khó tìm (nhìn cái câu tâm niệm thì đáng lẽ phải là tay chịu khó).
Công thức khủng hơi khó hiểu cho nên:Khủng thì đã sao? Hơi bất tiện nhưng dùng được là mừng rồi. Bác còn nhớ có người nhờ GPE rút gọn công thức dài hơn trang A4 không?
Chào a VetMini,Công thức khủng hơi khó hiểu cho nên:
1. có thể lúc tìm, nó ngay trước mắt mà không biết
2. code và công thức ở đây viết theo kiểu đặc thù cho thân chủ. Người hỏi bài ở đây thì chỉ muốn a đến z. Có lụm được đúng cái công thức chưa chắc đã chịu tự chỉnh sửa (chỗ tham chiếu) cho hợp với mình.
Cảm ơn anh đã nhắc nhở, em không phải phất lờ, mà tìm hiểu thuật ngữ trên mà không tìm được.Trao đổi mà phải đợi hơn 2 tuần mới nhận được phản hồi thì nhiều người ngại. Mà người muốn giúp người ta hỏi thì lại lờ người ta đi, không thèm trả lời.
Anh Phuocam,Yêu cầu này, có lẽ phải dùng UDF.
Bạn có muốn dùng nó?
.
User-Defined Function viết tắt là UDF là hàm do người dùng định nghĩa.Cảm ơn anh đã nhắc nhở, em không phải phất lờ, mà tìm hiểu thuật ngữ trên mà không tìm được.
Bài đã được tự động gộp:
Anh Phuocam,
Cho em hỏi UDF là gì được không ? Em hơi gà mong anh thông cảm
Chào anh Phuocam,User-Defined Function viết tắt là UDF là hàm do người dùng định nghĩa.
Có những yêu cầu mà hàm có sẵn của Excel khó có thể đáp ứng được. Ví dụ trường hợp của bạn, dùng hơn 26 hàm SUBSTITUTE để thay thế a-z và các ký tự không mong muốn thành ký tự rỗng, người dùng có thể viết hàm riêng và sử dụng như:
=loaikytu(B2) hoặc =loaikytu("abcd1256n~gay895")
Kết quả là : 1256~895
Xem thêm: https://filegi.com/tech-term/user-defined-function-udf-2134/
=CONCAT(IF(MMULT(--(MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1)=CHAR(TRANSPOSE(ROW($65:$90)))),ROW($65:$90)^0),"",MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1)))
Có 2 cách:Chào anh Phuocam,
Trường hợp dùng hàm tự định nghĩa thì khi cần xử lý dữ liệu ở file excel khác, người dùng phải nạp vào file khác như các code vba hả anh ?
Để viết hàm UDF thay cho 26 hàm SUBSTITUTE thì nó như thế nào? anh có thể viết dùm 1 hàm không ạ?
Còn cách thứ 3 nữa bạn ạ. Chỉ tại diễn đàn này khoái Add-ins cho nên tảng lờ nó đi.Có 2 cách:
1. Hàm để trong file, phải lưu với phần mở rộng là ".xlsm" hoặc "xlsb". File này đem đi máy nào cũng sử dụng đươc.
2. Lưu riêng dưới dạng addin, bất cứ file nào trong máy này cũng sử dụng được. Đem file đi máy khác, hàm sẽ báo lỗi #NAME?
.
Code này luôn chạy 52 lần. Khà khà khà!Còn cách thứ 3 nữa bạn ạ. Chỉ tại diễn đàn này khoái Add-ins cho nên tảng lờ nó đi.
3. Cho vào file PERSONAL.xlsm
Cũng như cách 1, phải tải file này vào các máy sử dụng nó. Tuy nhiên, nó giản dị hơn Add-ins nhiều.
Code:
Function LoaiKyTuAlpha(chuoi As String)
Const LOAI = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
chuoiLoai = LOAI & LCase(LOAI)
LoaiKyTuAlpha = chuoi
For i = 1 To Len(chuoiLoai)
LoaiKyTuAlpha = Replace(LoaiKyTuAlpha, Mid(chuoiLoai, i, 1), "")
Next i
End Function
Chú thích: tôi lười viết code loại này lắm. Đáng lẽ như thớt nói:
View attachment 273181
Công việc thường ngày, đụng chạm hoài mà không chịu học Power Query thì chắc chắn là "Không có gì là có thể với bạn" rồi.
Hai cái này chúng có vẻ không hạp nhau:
View attachment 273182
View attachment 273183
Với điều kiện là chuỗi không dài lắm.Code này luôn chạy 52 lần. Khà khà khà!
Một cách viết khác là chạy theo độ dài của chuỗi.
.
Cách này dùng toán tử "Like".Thêm: tôi quên nữa, cái hàm UDF này làm đẹp nhất là dùng RegEx. Và tôi tin là GPE có cả đống bài về cái này.
Thớt bao rằng mình tìm không có cái nào hợp. Tôi đặt câu hỏi: thớt có hiểu cái hàm ấy để nói rằng nó "hợp hay không hợp"? Hay là thớt đòi hỏi cái chỗ "tối ưu và ngắn gọn [sic]"?
Với điều kiện là chuỗi không dài lắm.
Chạy theo chuỗi nè:
Function LoaiKyTuAlpha(chuoi As String)
LoaiKyTuAlpha = Space(Len(chuoi))
For i = 1 To Len(chuoi)
Select Case Asc(Mid(chuoi, i, 1))
Case 65 To 90, 97 To 122
Case Else
i2 = i2 + 1
Mid(LoaiKyTuAlpha, i2, 1) = Mid(chuoi, i, 1)
End Select
Next i
LoaiKyTuAlpha = Left(LoaiKyTuAlpha, i2)
End Function
Code này dò thì nhiều nhưng xử lý chuỗi rất ít. Nó dùng hàm Mid để chỉnh ký tự tại chỗ cho nên không phải lập chuõi mới và bỏ chuỗi cũ như hàm replace.
Ưu điểm là nó không sợ chuỗi dài. Nhược điểm là nó hơi khó sửa, thêm bớt các ký tự cần loại.
Function LoaiKyTuAlpha(ByVal chuoi As String) As String
Dim i As Long
For i = 1 To Len(chuoi)
If Mid(chuoi, i, 1) Like "[a-zA-Z]" Then Mid(chuoi, i, 1) = "a"
Next i
LoaiKyTuAlpha = Replace(chuoi, "a", "")
End Function
Toi có nói là cách "theo độ dài chuỗi" hiệu quả hơn nếu chuỗi ngắn.Cách này dùng toán tử "Like".
PHP:Function LoaiKyTuAlpha(ByVal chuoi As String) As String Dim i As Long For i = 1 To Len(chuoi) If Mid(chuoi, i, 1) Like "[a-zA-Z]" Then Mid(chuoi, i, 1) = "a" ' dùng "b" thì giảm đi được 1 ký tự để dò Next i LoaiKyTuAlpha = Replace(chuoi, "a", "") End Function
.
Chào anh VetMini và anh Phuocam,Còn cách thứ 3 nữa bạn ạ. Chỉ tại diễn đàn này khoái Add-ins cho nên tảng lờ nó đi.
3. Cho vào file PERSONAL.xlsm
Cũng như cách 1, phải tải file này vào các máy sử dụng nó. Tuy nhiên, nó giản dị hơn Add-ins nhiều.
Code:
Function LoaiKyTuAlpha(chuoi As String)
Const LOAI = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
chuoiLoai = LOAI & LCase(LOAI)
LoaiKyTuAlpha = chuoi
For i = 1 To Len(chuoiLoai)
LoaiKyTuAlpha = Replace(LoaiKyTuAlpha, Mid(chuoiLoai, i, 1), "")
Next i
End Function
Chú thích: tôi lười viết code loại này lắm. Đáng lẽ như thớt nói:
View attachment 273181
Công việc thường ngày, đụng chạm hoài mà không chịu học Power Query thì chắc chắn là "Không có gì là có thể với bạn" rồi.
Hai cái này chúng có vẻ không hạp nhau:
View attachment 273182
View attachment 273183
Khi hỏi thì sao không mô tả kỹ, nói to nói rõ nói huỵch toẹt ra? Người ta làm cho trường hợp chỉ có các ký tự a-zA-Z chứ không cho cả ký tự tiếng Việt.Chào anh VetMini và anh Phuocam,
Không biết em có áp dụng sai ý các anh hay không ?
Em cho vào file .xlsm mà sử dụng không được.
2 anh chỉ dẫn thêm nhé,
Cảm ơn 2 anh.
Function LoaiKyTuAlpha1(chuoi As String)
Const LOAI = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
chuoiLoai = LOAI & LCase(LOAI)
LoaiKyTuAlpha = chuoi
For i = 1 To Len(chuoiLoai)
LoaiKyTuAlpha = Replace(LoaiKyTuAlpha, Mid(chuoiLoai, i, 1), "")
Next i
End Function
Anh batman1,Khi hỏi thì sao không mô tả kỹ, nói to nói rõ nói huỵch toẹt ra? Người ta làm cho trường hợp chỉ có các ký tự a-zA-Z chứ không cho cả ký tự tiếng Việt.