Hỗ trợ hàm UDF thay thế X thành x, MM thành mm

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Tình nghĩa giang hồ

Thanh sơn bất cải, lục thủy trường lưu
Tham gia
29/9/20
Bài viết
330
Được thích
429
Chào anh chị GPE.
Em có một số dữ liệu cần thay đổi chữ X hoa thành x thường, và MM hoa thành mm thường
Dữ liệu này có chung một kiểu nhận dạng:

Number + X + number + X + number + MM
VD: 38X2400X17MM sẽ chuyển thành 38x2400x17mm
Nếu dữ liệu này nằm ở vị trị cuối cùng thì em xử lý được.
Nhưng trường hợp như 4, 5, 6 hay 10, 11, 12, 13 ở trong hình thì dữ liệu nó không nằm ở vị trí cuối cùng thì em không xử lý được.
Nhờ anh chị xem giúp em trường hợp này.
Em cảm ơn anh chị.

Code xử lý khi dữ liệu ở vị trí cuối cùng.
Mã:
Function Thay_doi_GT_MM_va_X(chuoi As String)
Dim list
list = Split(chuoi, " ")
list(UBound(list)) = Replace(Replace(list(UBound(list)), "MM", "mm"), "X", "x")
Thay_doi_GT_MM_va_X = Join(list, " ")
End Function
 

File đính kèm

  • X-MM.PNG
    X-MM.PNG
    312.7 KB · Đọc: 23
  • X thành x MM thành mm.xlsb
    14.2 KB · Đọc: 21
Chào anh chị GPE.
Em có một số dữ liệu cần thay đổi chữ X hoa thành x thường, và MM hoa thành mm thường
Dữ liệu này có chung một kiểu nhận dạng:

Number + X + number + X + number + MM
VD: 38X2400X17MM sẽ chuyển thành 38x2400x17mm
Nếu dữ liệu này nằm ở vị trị cuối cùng thì em xử lý được.
Nhưng trường hợp như 4, 5, 6 hay 10, 11, 12, 13 ở trong hình thì dữ liệu nó không nằm ở vị trí cuối cùng thì em không xử lý được.
Nhờ anh chị xem giúp em trường hợp này.
Em cảm ơn anh chị.

Code xử lý khi dữ liệu ở vị trí cuối cùng.
Mã:
Function Thay_doi_GT_MM_va_X(chuoi As String)
Dim list
list = Split(chuoi, " ")
list(UBound(list)) = Replace(Replace(list(UBound(list)), "MM", "mm"), "X", "x")
Thay_doi_GT_MM_va_X = Join(list, " ")
End Function
Bạn thử xem đúng ý chưa.
 

File đính kèm

  • X thành x MM thành mm.xlsb
    14.2 KB · Đọc: 6
Upvote 0
Chắc thế nào cũng xin công thức. Dùng cho Excel 365 nha.
Mã:
=TEXTJOIN(" ",,MAP(TEXTSPLIT(A1," "),LAMBDA(x,IF(RIGHT(x,2)="MM",LET(y,TEXTSPLIT(LEFT(x,LEN(x)-2),"X"),IF(AND(COUNT(y+0)=3,COLUMNS(y)=3),LOWER(x),x)),x))))
 
Upvote 0
Bạn thử xem đúng ý chưa.
Dạ chưa đúng anh, phải là cụm dữ liệu Number + X + Number + X + Number + MM thì mới đúng anh
VD:
Dữ liệuMELMDF 481MM/481MM MUFSTD 1220X2440X18MM
Kết quả codeMELMDF 481mm/481mm MUFSTD 1220x2440x18mm
Kết quả mong muốnMELMDF 481MM/481MM MUFSTD 1220x2440x18mm
Dữ liệuMFC 482X/482X MUFSTD 1220X2440X18MM
Kết quả codeMFC 482x/482x MUFSTD 1220x2440x18mm
Kết quả mong muốnMFC 482X/482X MUFSTD 1220x2440x18mm
 
Lần chỉnh sửa cuối:
  • Thích
Reactions: KJT
Upvote 0
Dạ chưng đúng anh, phải là cụm dữ liệu Number + X + Number + X + Number + MM thì mới đúng anh
VD:
Dữ liệuMELMDF 481MM/481MM MUFSTD 1220X2440X18MM
Kết quả codeMELMDF 481mm/481mm MUFSTD 1220x2440x18mm
Kết quả mong muốnMELMDF 481MM/481MM MUFSTD 1220x2440x18mm
Dữ liệuMFC 482X/482X MUFSTD 1220X2440X18MM
Kết quả codeMFC 482x/482x MUFSTD 1220x2440x18mm
Kết quả mong muốnMFC 482X/482X MUFSTD 1220x2440x18mm
Vậy bạn thêm điều kiện theo ý muốn là được thôi mà, phôi có sẵn rồi.
 
Upvote 0
Dạ chưng đúng anh, phải là cụm dữ liệu Number + X + Number + X + Number + MM thì mới đúng anh
Bạn thử hàm này thử xem.
Mã:
Function Thaydoi_GT_MM_va_X(ByVal sText As String) As String
Dim i As Long, aTmp As Variant
    aTmp = Split(sText, " ")
    For i = LBound(aTmp, 1) To UBound(aTmp, 1)
        If aTmp(i) Like "#*X#*X#*MM" Then
            If IsNumeric(Replace(Left(aTmp(i), Len(aTmp(i)) - 2), "X", "", 1, 2)) Then
                aTmp(i) = LCase(aTmp(i))
            End If
        End If
    Next
    Thaydoi_GT_MM_va_X = Join(aTmp, " ")
End Function
 
Upvote 0
Nếu dùng Sub để thay cả cụm thì dùng Regex là đẹp nhất.
Nhưng nếu dùng Function thì hơi mất công dùng Static để tránh dựng đối tượng Regex nhiều lần.
 
Upvote 0
Bạn thử hàm này thử xem.
Mã:
Function Thaydoi_GT_MM_va_X(ByVal sText As String) As String
Dim i As Long, aTmp As Variant
    aTmp = Split(sText, " ")
    For i = LBound(aTmp, 1) To UBound(aTmp, 1)
        If aTmp(i) Like "#*X#*X#*MM" Then
            If IsNumeric(Replace(Left(aTmp(i), Len(aTmp(i)) - 2), "X", "", 1, 2)) Then
                aTmp(i) = LCase(aTmp(i))
            End If
        End If
    Next
    Thaydoi_GT_MM_va_X = Join(aTmp, " ")
End Function
Dạ quá đúng ý rồi anh Thắng ơi, em cảm ơn anh nhiều.
 
Upvote 0
Cái này mình nghĩ cứ Ctrl +H replace là được mà nhỉ
 
Lần chỉnh sửa cuối:
Upvote 0
Cái này mình nghĩ cứ Ctrl +H replace là được mà nhỉ
CTRL + H là với cái hình, với file Excel mình gửi. Nhưng không đúng ý đồ của mình.
Nếu chỉ thay thế X hoa thành x thường, MM hoa thành mm thường thì mình đã không dùng cụm từ:
Number + X + number + X + number + MM
Mình ghi cụm từ này có ý nghĩa: tìm đúng cụm từ có cấu trúc này mà thay đổi.
Còn CTRL + H là thay đổi tất cả chữ X và MM rồi.
Lỗi này: do file hình và Excel mình ghi thiếu một vài thông tin.
Nhưng mình có bổ sung ở bài #4 để rõ vấn đề.
 
Upvote 0
CTRL + H là với cái hình, với file Excel mình gửi. Nhưng không đúng ý đồ của mình.
Nếu chỉ thay thế X hoa thành x thường, MM hoa thành mm thường thì mình đã không dùng cụm từ:
Number + X + number + X + number + MM
Mình ghi cụm từ này có ý nghĩa: tìm đúng cụm từ có cấu trúc này mà thay đổi.
Còn CTRL + H là thay đổi tất cả chữ X và MM rồi.
Lỗi này: do file hình và Excel mình ghi thiếu một vài thông tin.
Nhưng mình có bổ sung ở bài #4 để rõ vấn đề.
Dùng được công thức mà bạn, trường hợp mà có chữ x phía trước thì bạn kết hợp LEFT nữa nhé , hoặc kết hợp MID từ cụm từ STD
=+REPLACE(REPLACE(REPLACE(B2;FIND("X";B2);1;"x");FIND("X";REPLACE(B2;FIND("X";B2);1;"x"));1;"x");FIND("MM";REPLACE(REPLACE(B2;FIND("X";B2);1;"x");FIND("X";REPLACE(B2;FIND("X";B2);1;"x"));1;"x"));2;"mm")
 

File đính kèm

  • X thành x MM thành mm.xlsb
    14 KB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Dùng được công thức mà bạn
=+REPLACE(REPLACE(REPLACE(B2;FIND("X";B2);1;"x");FIND("X";REPLACE(B2;FIND("X";B2);1;"x"));1;"x");FIND("MM";REPLACE(REPLACE(B2;FIND("X";B2);1;"x");FIND("X";REPLACE(B2;FIND("X";B2);1;"x"));1;"x"));2;"mm")
Khi nào áp dụng cho dòng màu xanh được kết quả như dòng màu đỏ thì mới đạt yêu cầu.

60X2710X09M 60X2710X09MMM 60X2710X09MM 60X27O0X09MM 60X2710X09MM 60XX271009MM 60X60X2710X09MM
60X2710X09M 60X2710X09MMM 60x2710x09mm 60X27O0X09MM 60x2710x09mm 60XX271009MM 60X60X2710X09MM
 
Upvote 0
Khi nào áp dụng cho dòng màu xanh được kết quả như dòng màu đỏ thì mới đạt yêu cầu.

60X2710X09M 60X2710X09MMM 60X2710X09MM 60X27O0X09MM 60X2710X09MM 60XX271009MM 60X60X2710X09MM
60X2710X09M 60X2710X09MMM 60x2710x09mm 60X27O0X09MM 60x2710x09mm 60XX271009MM 60X60X2710X09MM
Haha , mình nghĩ vật liệu mỗi dòng chỉ 1 kích thước :)
 
Upvote 0
Haha , mình nghĩ vật liệu mỗi dòng chỉ 1 kích thước :)
Trước hết bạn hãy thử với dữ liệu ở bài #4
--
Nếu dữ liệu có quy luật thì người đặt vấn đề phải mô tả rõ. Một khi mô tả không đề cập thì không có cơ sở nào suy đoán quy luật dữ liệu từ dữ liệu mẫu cả, trừ khi được người đặt vấn đề xác nhận.
 
Upvote 0
Trước hết bạn hãy thử với dữ liệu ở bài #4
--
Nếu dữ liệu có quy luật thì người đặt vấn đề phải mô tả rõ. Một khi mô tả không đề cập thì không có cơ sở nào suy đoán quy luật dữ liệu từ dữ liệu mẫu cả, trừ khi được người đặt vấn đề xác nhận.
À đúng rồi, mình chưa đọc bài 4 :)
 
Upvote 0
Bài này nếu dùng hàm thì có thể xài hàm sau, chắc vẫn có sai sót ở một số trường hợp đặc biệt.
Mã:
=SUBSTITUTE(B2;
      MID(B2;
          FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;
          IFERROR(FIND(" ";MID(B2;FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;100));20));
      LOWER(MID(B2;FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;IFERROR(FIND(" ";MID(B2;FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;100));20))))
 

File đính kèm

  • X thành x MM thành mm (1).xlsb
    16.5 KB · Đọc: 7
Upvote 0
Bài này nếu dùng hàm thì có thể xài hàm sau, chắc vẫn có sai sót ở một số trường hợp đặc biệt.
Mã:
=SUBSTITUTE(B2;
      MID(B2;
          FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;
          IFERROR(FIND(" ";MID(B2;FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;100));20));
      LOWER(MID(B2;FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;IFERROR(FIND(" ";MID(B2;FIND(" ";B2;SEARCH("?????X*X*MM";B2))+1;100));20))))
MELMDF 481MM/481X MUFSTD 1220X2440X18MMMELMDF 481MM/481X mufstd 1220X2440X18MM
MELMDF 481MM/481X MUFSTD 1220X2440X18MM phủ film 1 mặtMELMDF 481MM/481X mufstd 1220X2440X18MM phủ film 1 mặt

Công thức này em thử lại với trường hợp trên thì MUFSTD ở đây phải giữ nguyên, nhưng ở đây thì nó lại trở thành viết thường mufstd.
Đối với bài dạng này em nghĩ cách của A.Thắng ở bài #6 là tốt nhất.
Hoặc như cách anh VetMini nói, dùng Regex, chứ công thức thì khó lắm anh.
 
Upvote 0
Chào anh chị GPE.
Em có một số dữ liệu cần thay đổi chữ X hoa thành x thường, và MM hoa thành mm thường
Dữ liệu này có chung một kiểu nhận dạng:

Number + X + number + X + number + MM
VD: 38X2400X17MM sẽ chuyển thành 38x2400x17mm
Nếu dữ liệu này nằm ở vị trị cuối cùng thì em xử lý được.
Nhưng trường hợp như 4, 5, 6 hay 10, 11, 12, 13 ở trong hình thì dữ liệu nó không nằm ở vị trí cuối cùng thì em không xử lý được.
Nhờ anh chị xem giúp em trường hợp này.
Em cảm ơn anh chị.

Code xử lý khi dữ liệu ở vị trí cuối cùng.
Mã:
Function Thay_doi_GT_MM_va_X(chuoi As String)
Dim list
list = Split(chuoi, " ")
list(UBound(list)) = Replace(Replace(list(UBound(list)), "MM", "mm"), "X", "x")
Thay_doi_GT_MM_va_X = Join(list, " ")
End Function
Với dữ liệu trong file chỉ cần dùng các hàm đồ cổ
Mã:
=MID(B2,1,FIND("MUFSTD",B2)+6)&LOWER(MID(B2,FIND("MUFSTD",B2)+7,SEARCH("MM",B2)-FIND("MUFSTD",B2)-5))&MID(B2,SEARCH("MM",B2)+2,99)
 
Upvote 0
Nếu giả sử data này liên qua 1 vật 3D có kích thước dạng như sau: Dài x Rộng x Cao
thì chuỗi kích thước này có thể ở bất kỳ đâu trong chuỗi Master:

xxxx 1220X2440X18MM yyyyy 100X24X15MM

hoặc thậm chí, mở rộng hơn cho nhiều loại đơn vị chiều dài khác

xxxx 1220X2440X18MM yyyyy 100X24X15CM
xxxx 1220X2440X18M yyyyy 100X24X15M

Người hỏi hỏi 1, người giải phải đoán tới 2,3 ...

Dù có thể data của người hỏi không đến mức đó, nhưng trong thực tế sẽ có nhiều người google cho dạng này...
 
Upvote 0
Nếu giả sử data này liên qua 1 vật 3D có kích thước dạng như sau: Dài x Rộng x Cao
thì chuỗi kích thước này có thể ở bất kỳ đâu trong chuỗi Master:

xxxx 1220X2440X18MM yyyyy 100X24X15MM

hoặc thậm chí, mở rộng hơn cho nhiều loại đơn vị chiều dài khác

xxxx 1220X2440X18MM yyyyy 100X24X15CM
xxxx 1220X2440X18M yyyyy 100X24X15M

Người hỏi hỏi 1, người giải phải đoán tới 2,3 ...

Dù có thể data của người hỏi không đến mức đó, nhưng trong thực tế sẽ có nhiều người google cho dạng này...
Giờ anh Bebo nói thì em mới để ý lại.
Đúng là vẫn có trường hợp là: CM nhưng của một bộ phận khác.
Còn phân hệ công việc của em chỉ dùng MM thôi.
Còn M thì hầu như không thấy.
 
Upvote 0
Web KT

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

Back
Top Bottom