Giúp mình xử lý 2 hàm về chuỗi.

Liên hệ QC

khocthet296

Thành viên mới
Tham gia
13/6/11
Bài viết
12
Được thích
2
Mình hay phải làm trên các bảng excel khoảng vài ngàn dòng. hay phải sort + filter,
kiến thức excel thì có hạn, mình muốn nhờ các bạn làm hộ mình :
1. hàm để chuyển tử chữ có dấu sang không dấu, vd : giải pháp excel --> giai phap excel. Mình đã dùng thử qua unikey nhưng khi chuyển hay bị lỗi font và không về hoàn chỉnh đc thành chữ không dấu, vẫn có những chữ có dấu, hic..............
2. hàm xử lý chuỗi liền nhau không dấu đc tách ra thành chữ không dấu bình thường, khi các chữ cái đc phân biệt bởi chữ hoa
, VD: GiaiPhapExcel sẽ chuyển thành : Giai Phap Excel.

có bạn nào có cao kiến giúp mình không với !

Cám ơn rất nhiều các bạn giúp đỡ và cho ý kiến.


Thankssssssssssssssssssssssssss--=0
 
Mình hay phải làm trên các bảng excel khoảng vài ngàn dòng. hay phải sort + filter,
kiến thức excel thì có hạn, mình muốn nhờ các bạn làm hộ mình :
1. hàm để chuyển tử chữ có dấu sang không dấu, vd : giải pháp excel --> giai phap excel. Mình đã dùng thử qua unikey nhưng khi chuyển hay bị lỗi font và không về hoàn chỉnh đc thành chữ không dấu, vẫn có những chữ có dấu, hic..............
2. hàm xử lý chuỗi liền nhau không dấu đc tách ra thành chữ không dấu bình thường, khi các chữ cái đc phân biệt bởi chữ hoa
, VD: GiaiPhapExcel sẽ chuyển thành : Giai Phap Excel.

có bạn nào có cao kiến giúp mình không với !

Cám ơn rất nhiều các bạn giúp đỡ và cho ý kiến.


Thankssssssssssssssssssssssssss--=0
Thất nghiệp, làm chơi 2 hàm giúp bạn:
PHP:
Function RemoveMarks(ByVal Text As String) As String
  Dim CharCode, ResText, i As Long, Tmp As String
  On Error Resume Next
  Tmp = Text
  CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
                   ChrW(7849), ChrW(7851), ChrW(7853), ChrW(225), ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), _
                   ChrW(259), ChrW(226), ChrW(273), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
                   ChrW(233), ChrW(232), ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), _
                   ChrW(7881), ChrW(297), ChrW(7883), ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), _
                   ChrW(7899), ChrW(7901), ChrW(7903), ChrW(7905), ChrW(7907), ChrW(243), ChrW(242), ChrW(7887), _
                   ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), _
                   ChrW(7921), ChrW(250), ChrW(249), ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), _
                   ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
  ResText = Array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "d", "e", _
                  "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "i", "i", "i", "i", "i", "o", "o", "o", "o", _
                  "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "u", "u", "u", "u", "u", "u", _
                  "u", "u", "u", "u", "u", "y", "y", "y", "y", "y")
  For i = 0 To UBound(CharCode)
    Tmp = Replace(Tmp, CharCode(i), ResText(i))
    Tmp = Replace(Tmp, UCase(CharCode(i)), UCase(ResText(i)))
  Next
  RemoveMarks = Tmp
End Function
PHP:
Function SeparateText(ByVal Text As String) As String
  Dim i As Long, n As Long, Tmp As String, Arr()
  On Error Resume Next
  For i = Len(Text) To 1 Step -1
    Tmp = Tmp & Mid(Text, i, 1)
    If Mid(Text, i, 1) = UCase(Mid(Text, i, 1)) Then
      ReDim Preserve Arr(n)
      Arr(n) = Tmp
      n = n + 1
      Tmp = ""
    End If
  Next
  SeparateText = StrReverse(Join(Arr, " "))
End Function
Lưu ý: Hàm thứ nhất chỉ hoạt động với chuổi Unicode. Nếu muốn dùng với bảng mã TCVN3 hoặc VNI thì có thể cải tiến (cũng gần tương tự)
 
Em nghĩ hàm thứ hai làm như thế này cho nó gọn:
PHP:
Function Con(ByVal Text As String) As String
For i = 65 To 90
    Text = Replace(Text, Chr(i), " " & Chr(i))
Next
Con = Trim(Text)
End Function
 
Cả 2 hàm của 2 anh vẫn còn nhược điểm
 

File đính kèm

  • Xu ly chuoi.xls
    31 KB · Đọc: 11
Em nghĩ hàm thứ hai làm như thế này cho nó gọn:
PHP:
Function Con(ByVal Text As String) As String
For i = 65 To 90
    Text = Replace(Text, Chr(i), " " & Chr(i))
Next
Con = Trim(Text)
End Function
Cũng được nhưng mà không xài được với các ký tự có dấu tiếng Việt
----------------
Cả 2 hàm của 2 anh vẫn còn nhược điểm
Tôi sửa thành vầy
PHP:
Function SeparateText(ByVal Text As String) As String
  Dim i As Long, sText As String, Tmp As String, Arr()
  On Error Resume Next
  sText = Text
  Do
    i = i + 1
    Tmp = Mid(sText, i, 1)
    If Tmp = UCase(Tmp) And Not IsNumeric(Tmp) And Trim(Tmp) <> "" Then
      sText = Replace(sText, Tmp, " " & Tmp)
      i = i + 1
    End If
  Loop Until i >= Len(sText)
  SeparateText = WorksheetFunction.Trim(sText)
End Function
Bạn kiểm tra lại giúp tôi nhé
 
Cũng được nhưng mà không xài được với các ký tự có dấu tiếng Việt
----------------

Tôi sửa thành vầy
PHP:
Function SeparateText(ByVal Text As String) As String
  Dim i As Long, sText As String, Tmp As String, Arr()
  On Error Resume Next
  sText = Text
  Do
    i = i + 1
    Tmp = Mid(sText, i, 1)
    If Tmp = UCase(Tmp) And Not IsNumeric(Tmp) And Trim(Tmp) <> "" Then
      sText = Replace(sText, Tmp, " " & Tmp)
      i = i + 1
    End If
  Loop Until i >= Len(sText)
  SeparateText = WorksheetFunction.Trim(sText)
End Function
Bạn kiểm tra lại giúp tôi nhé
Vẫn thấy chưa ổn sư phụ à
 

File đính kèm

  • Xu ly chuoi.xls
    31 KB · Đọc: 9
Vẫn thấy chưa ổn sư phụ à
Thêm hàm TRIM vào xem thế nào
PHP:
Function SeparateText(ByVal Text As String) As String
  Dim i As Long, sText As String, Tmp As String, Arr()
  On Error Resume Next
  sText = Text
  Do
    i = i + 1
    Tmp = Mid(sText, i, 1)
    If Tmp = UCase(Tmp) And Not IsNumeric(Tmp) And Trim(Tmp) <> "" Then
      sText = Trim(Replace(sText, Tmp, " " & Tmp))
      i = i + 1
    End If
  Loop Until i >= Len(sText)
  SeparateText = WorksheetFunction.Trim(sText)
End Function
 
Thêm hàm TRIM vào xem thế nào
PHP:
Function SeparateText(ByVal Text As String) As String
  Dim i As Long, sText As String, Tmp As String, Arr()
  On Error Resume Next
  sText = Text
  Do
    i = i + 1
    Tmp = Mid(sText, i, 1)
    If Tmp = UCase(Tmp) And Not IsNumeric(Tmp) And Trim(Tmp) <> "" Then
      sText = Trim(Replace(sText, Tmp, " " & Tmp))
      i = i + 1
    End If
  Loop Until i >= Len(sText)
  SeparateText = WorksheetFunction.Trim(sText)
End Function
Trong file em có thể hiện thêm (quên nói bài ở trên) là nếu dòng chữ "NgànNămThươnghoài" thì cho kết quả "Ngàn Năm Thươnghoài"
Nghĩa là nếu chữ "Hoài" là chữ hoa chữ cái đầu thì cho kết quả như ý, nhưng là chữ thường thì không được
 
Trong file em có thể hiện thêm (quên nói bài ở trên) là nếu dòng chữ "NgànNămThươnghoài" thì cho kết quả "Ngàn Năm Thươnghoài"
Nghĩa là nếu chữ "Hoài" là chữ hoa chữ cái đầu thì cho kết quả như ý, nhưng là chữ thường thì không được
Thì đương nhiên vậy rồi!
Tác giả yêu cầu tách chữ với ký tự nhận biết là chữ HOA cơ mà
Còn nếu dính 1 chùm mà chẳng có cái gì nhận biết thì.. ông Bill cũng bó tay thôi
 
Thì đương nhiên vậy rồi!
Tác giả yêu cầu tách chữ với ký tự nhận biết là chữ HOA cơ mà
Còn nếu dính 1 chùm mà chẳng có cái gì nhận biết thì.. ông Bill cũng bó tay thôi
Đương nhiên Bill bó tay là đúng rồi vì ông đâu biết tiếng Việt. Em nghĩ người xử lý được tiếng Việt biết quy luật chứ nghĩa là cách nào đó (em không biết) thông minh nhận được từng từ một trong dãy chứ. Cũng như người ta đánh chữ HOA hết thì botay.com?
 
Đương nhiên Bill bó tay là đúng rồi vì ông đâu biết tiếng Việt. Em nghĩ người xử lý được tiếng Việt biết quy luật chứ nghĩa là cách nào đó (em không biết) thông minh nhận được từng từ một trong dãy chứ. Cũng như người ta đánh chữ HOA hết thì botay.com?
Dám bảo đảm với bạn sẽ không có cách nào!
Thử với chuổi này: conga ---> Bạn tách ra thành con ga hay co nga
(mà dù có làm được, e rằng phải truy xuất đến nguyên thư viện từ điển tiếng Việt mới xong)
 
Chủ topic cần như thế này:
2. hàm xử lý chuỗi liền nhau không dấu đc tách ra thành chữ không dấu bình thường, khi các chữ cái đc phân biệt bởi chữ hoa
Nếu nó không theo quy luật này thì sai ráng chịu, đâu cần phải làm cho nó phức tạp thêm.
 
Web KT
Back
Top Bottom