Đảo ngược chuỗi kí tự

Liên hệ QC

kongcom

Thành viên hoạt động
Tham gia
20/11/07
Bài viết
189
Được thích
179
Giới tính
Nam
Nghề nghiệp
Dạy cắt may
Mình gặp một bài toán dạng đánh đố . Trong đó các từ đều bị đảo ngược .... Nghe nói EXCEL có thể làm đảo ngược lại chuỗi kí tự bằng hàm tự tạo trong VBA . Nhờ các cao thủ giúp đỡ mình một tay . Cụ thể là làm sao để có thể đọc thành xuôi các từ kiểu như : " lecxE pahP iaiG " ????
 
Cho tơ hỏi cái lệnh Arr,Slipt,UBound có ý nghĩa ntn vậy. :-=
 
Upvote 0
Cho tơ hỏi cái lệnh Arr,Slipt,UBound có ý nghĩa ntn vậy. :-=

Xin thưa:
Arr: Là tên của 1 biến do người dùng đặt (tên gì tùy ý, miễn tuân thủ quy định do anh Bill đề ra)
Split: Hàm VB dùng để cắt 1 chuổi thành 1 mảng với dấu phân cách cho trước
UBound: Chỉ số Index, chỉ vị trí phần tử cuối cùng của 1 mảng
--------------
Nói chung đây là kiến thức về lập trình, nếu bạn chưa học thì có nói cũng.. không biết
Ẹc... Ẹc...
 
Upvote 0
Xin thưa:
Arr: Là tên của 1 biến do người dùng đặt (tên gì tùy ý, miễn tuân thủ quy định do anh Bill đề ra)
Split: Hàm VB dùng để cắt 1 chuổi thành 1 mảng với dấu phân cách cho trước
UBound: Chỉ số Index, chỉ vị trí phần tử cuối cùng của 1 mảng
--------------
Nói chung đây là kiến thức về lập trình, nếu bạn chưa học thì có nói cũng.. không biết
Ẹc... Ẹc...

Function daoten(text As String) As String
Dim i As Long, kq As String
For i = Len(text) To 1 Step -1
If Mid(text, i, 1) = " " Then
kq = Right(text, i) & kq
End If
Next
daoten = Trim(kq)
End Function

EM muốn chuyển "Anh yêu Em" -> "Em yêu Anh". nhưng em viết lung tung ra cái code này anh có thể chỉ lỗi cho em được không ạ. Em mới tìm hiểu mong anh thông cảm nhá
 
Upvote 0
Function daoten(text As String) As String
Dim i As Long, kq As String
For i = Len(text) To 1 Step -1
If Mid(text, i, 1) = " " Then
kq = Right(text, i) & kq
End If
Next
daoten = Trim(kq)
End Function

EM muốn chuyển "Anh yêu Em" -> "Em yêu Anh". nhưng em viết lung tung ra cái code này anh có thể chỉ lỗi cho em được không ạ. Em mới tìm hiểu mong anh thông cảm nhá

Thế code tại bài 20 bạn đã thử chưa?
Ai biểu bạn viết lung tung chi! Cái người ta viết đúng lại không chịu áp dụng
 
Upvote 0
Dùng vòng lặp duyệt từ đầu chuỗi đến cuối chuỗi cũng không sao, coi như học hỏi. Hãy đọc bài này, không lung tung tí nào:
http://www.giaiphapexcel.com/forum/showthread.php?6354-Gi%E1%BB%9Bi-thi%E1%BB%87u-C%C6%A1-b%E1%BA%A3n-v%E1%BB%81-v%C3%B2ng-l%E1%BA%B7p-For-next&p=44262#post44262
Cái code này của em còn bị sai sót gì không anh. em chạy thử rồi nhưng ra kết quả sai ạ. anh xem hộ em với ạ. Em cám ơn nhá

Function daoten(text As String) As String
Dim i As Long, kq As String
For i = Len(text) To 1 Step -1
If Mid(text, i, 1) = " " Then
kq = Right(text, i) & kq
End If
Next
daoten = Trim(kq)
End Function
 
Upvote 0
Cứ đọc bài trong link rồi so sánh sẽ biết. Nếu giải thích tại đây, tôi cũng sẽ giải thích y như trong bải đó thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Thank bác nhiều nhá. em đã làm được rồi. Nhưng mà còn vấn đề là sắp xếp nó theo a>z từ cái công thức đấy thì lại không được ạ. =((
 
Upvote 0
Các bạn cho tớ hỏi là bây giờ tớ có cụm từ " Xóm Án, Triều Khúc, Tân Triều, Thanh Trì, Hà Nội'' thì dùng hàm gì trong excel để đổi thành '' HA NOI - THANH TRI - TAN TRIEU - TRIEU KHUC - XOM AN'' ạ. Mình rất mong các bạn chỉ ra giúp. Cảm ơn các bạn nhiều.
 
Upvote 0
Các bạn cho tớ hỏi là bây giờ tớ có cụm từ " Xóm Án, Triều Khúc, Tân Triều, Thanh Trì, Hà Nội'' thì dùng hàm gì trong excel để đổi thành '' HA NOI - THANH TRI - TAN TRIEU - TRIEU KHUC - XOM AN'' ạ. Mình rất mong các bạn chỉ ra giúp. Cảm ơn các bạn nhiều.
- Phương án là tách từng nhóm cách nhau bằng dấu, rồi nói lại theo thứ tự.
Nếu có File mình và cộng đồng sẽ hỗ trợ giúp bạn được./
 
Upvote 0
- Phương án là tách từng nhóm cách nhau bằng dấu, rồi nói lại theo thứ tự.
Nếu có File mình và cộng đồng sẽ hỗ trợ giúp bạn được./
Chắc không cần file. Cái này chắc sẽ có nhiều người dùng tới. Bạn thử làm xem.
- Bổ sung ý của bạn: Hủy dấu của ký tự, chuyển thành chữ hoa.
- Phần nối kết quả lại thì tùy chọn ký tự nối (chủ thớt đang lấy ký tự gạch ngang -)
 
Upvote 0
Bạn ơi mình ko hiểu ý bạn lắm. Mình gửi file các bạn chỉ ra chi tiết cho mình với nhé.
Trong sheet tiếng Việt có cột địa chỉ là tiếng Việt khi sánh sang sheet tiếng Nhật mình phải gõ lại và đôi khi sẽ sai sót.
Nếu có thể các bạn chỉ ra chi tiết hàm cho mình với nhé.
Ý định của mình là chỉ gõ phần địa chỉ ở sheet tiếng Việt thôi sau đó ở bên sheet tiếng Nhật nó sẽ tự động nhảy và ko phải gõ nữa.
Cám ơn các bạn nhiều!
 

File đính kèm

  • DANH SACH TTS Y^S_ Macro.xlsm
    28.2 KB · Đọc: 8
Upvote 0
Bạn ơi mình ko hiểu ý bạn lắm. Mình gửi file các bạn chỉ ra chi tiết cho mình với nhé.
Trong sheet tiếng Việt có cột địa chỉ là tiếng Việt khi sánh sang sheet tiếng Nhật mình phải gõ lại và đôi khi sẽ sai sót.
Nếu có thể các bạn chỉ ra chi tiết hàm cho mình với nhé.
Ý định của mình là chỉ gõ phần địa chỉ ở sheet tiếng Việt thôi sau đó ở bên sheet tiếng Nhật nó sẽ tự động nhảy và ko phải gõ nữa.
Cám ơn các bạn nhiều!

Bạn Insert module rồi dán đoạn code này vào.
PHP:
Function DaoViTri(Chuoi As String, PhanCach As String) As String
    Dim Temp As Variant
    Dim Temp2 As String
    Dim i As Long
    Temp = VBA.Split(Chuoi, PhanCach)
    For i = UBound(Temp) To 0 Step -1
        Temp2 = Temp2 & "-" & Temp(i)
    Next i
    DaoViTri = Right(Trim(Temp2), Len(Temp2) - 1)
End Function

Mình làm vào cột N, bạn tham khảo nhé./
 

File đính kèm

  • Copy of DANH SACH TTS Y^S_ Macro.xlsm
    27.7 KB · Đọc: 10
Upvote 0
Bạn Insert module rồi dán đoạn code này vào.
PHP:
Function DaoViTri(Chuoi As String, PhanCach As String) As String
    Dim Temp As Variant
    Dim Temp2 As String
    Dim i As Long
    Temp = VBA.Split(Chuoi, PhanCach)
    For i = UBound(Temp) To 0 Step -1
        Temp2 = Temp2 & "-" & Temp(i)
    Next i
    DaoViTri = Right(Trim(Temp2), Len(Temp2) - 1)
End Function

Mình làm vào cột N, bạn tham khảo nhé./
Tôi đoán cái người ta cần là gõ hàm bên sheet tiếng Nhật rồi ra kết quả luôn (khỏi mất công copy qua lại)
Tôi dùng 2 hàm:
Mã:
Function RemoveMarks(ByVal Text As String) As String
  Dim CharCode, i As Long
  Dim ResText As String, sTmp As String
  On Error Resume Next
  sTmp = Text
  CharCode = Array(7855, 7857, 7859, 7861, 7863, 7845, 7847, 7849, 7851, 7853, 225, _
                   224, 7843, 227, 7841, 259, 226, 273, 7871, 7873, 7875, 7877, 7879, _
                   233, 232, 7867, 7869, 7865, 234, 237, 236, 7881, 297, 7883, 7889, _
                   7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 243, 242, _
                   7887, 245, 7885, 244, 417, 7913, 7915, 7917, 7919, 7921, 250, _
                   249, 7911, 361, 7909, 432, 253, 7923, 7927, 7929, 7925)
  ResText = "aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyy"
  For i = 0 To UBound(CharCode)
    sTmp = Replace(sTmp, ChrW(CharCode(i)), Mid(ResText, i + 1, 1))
    sTmp = Replace(sTmp, UCase(ChrW(CharCode(i))), UCase(Mid(ResText, i + 1, 1)))
  Next
  RemoveMarks = sTmp
End Function
Function ReverseWord(ByVal Text As String, Optional ByVal SrcDelimiter As String = " ", Optional ByVal DesDelimiter As String = " ") As String
  Dim arr, sTmp As String, n As Long
  sTmp = StrReverse(Replace(Text, SrcDelimiter, DesDelimiter))
  arr = Split(sTmp, DesDelimiter)
  For n = 0 To UBound(arr)
    arr(n) = StrReverse(arr(n))
  Next
  ReverseWord = Join(arr, DesDelimiter)
End Function
Tại sheet "TIENG NHAT", cell L4 gõ công tức:
Mã:
=RemoveMarks(UPPER(ReverseWord(VLOOKUP($I4,'TIENG VIET'!$G$4:$K$1000,4,0), ", ", " - ")))
Cell M4 gõ công thức:
Mã:
=RemoveMarks(UPPER(VLOOKUP($I4,'TIENG VIET'!$G$4:$K$1000,5,0)))
Tất cả kéo fill xuống
 

File đính kèm

  • ReverseWord.xlsm
    26.5 KB · Đọc: 9
Upvote 0
Cám ơn Bác đã đặt lệnh cho em ạ.
Bác cho em hỏi 1 chút khi em nhập thêm các dữ liệu mới thì ở bên Sheet ''TIENG NHAT'' ko hiện ra kết quả mà hiện ra các giá trị #VALUE ạ.
Bác giúp em với ạ.
 

File đính kèm

  • ReverseWord17082017.xlsm
    27.3 KB · Đọc: 4
Upvote 0
Bạn Insert module rồi dán đoạn code này vào.
PHP:
Function DaoViTri(Chuoi As String, PhanCach As String) As String
    Dim Temp As Variant
    Dim Temp2 As String
    Dim i As Long
    Temp = VBA.Split(Chuoi, PhanCach)
    For i = UBound(Temp) To 0 Step -1
        Temp2 = Temp2 & "-" & Temp(i)
    Next i
    DaoViTri = Right(Trim(Temp2), Len(Temp2) - 1)
End Function

Mình làm vào cột N, bạn tham khảo nhé./
Bạn ơi đối với việc đảo lại vị trí theo của bạn thì
Hà Nội- Phúc Thọ- Liên Hiệp-Cụm 5 có cách nào căn chỉnh lại một chút cho cân đối văn bản thành" Hà Nội - Phúc Thọ - Liên Hiệp - Cụm 5" ko?
 
Upvote 0
Bạn ơi đối với việc đảo lại vị trí theo của bạn thì
Hà Nội- Phúc Thọ- Liên Hiệp-Cụm 5 có cách nào căn chỉnh lại một chút cho cân đối văn bản thành" Hà Nội - Phúc Thọ - Liên Hiệp - Cụm 5" ko?
+ Bạn thay đổi những gì so với ban đầu( thêm dấu cách, hay gì đó), Bạn hãy nêu ra, rồi sẽ nghiên cứu canh chỉnh nhé./
 
Upvote 0
Web KT
Back
Top Bottom