Đảo ngược nội dung trong ô ? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

kegiaumat055

Thành viên chính thức
Tham gia
22/4/11
Bài viết
91
Được thích
2

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dùng hàm split để tách ra từng từ. Kết quả sẽ là một mảng (dạng Variance).
Đọc ngược mảng và ráp lại.

=== chỉnh ===
Viết sai chính tả, xin chỉnh kiểu dữ liệu là Variant (không xác định) chứ không phải Variance (độ lệch)
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các bạn,

Mình muốn đảo ngược một chuỗi trong một ô thì làm như thế nào vậy các bạn ?

Ví dụ: ------>

Các bạn giúp mình nhé ! Cảm ơn các bạn nhiều --=0
Bạn dùng hàm sau:

Mã:
Function ReStr(rng As Range) As String
    Dim arrStr As Variant, i As Long
    arrStr = Split(rng, " ")
    For i = UBound(arrStr) To LBound(arrStr) Step -1
        ReStr = ReStr & " " & arrStr(i)
    Next
    ReStr = ReStr
End Function
 
Upvote 0
Thấy thì dễ nhưng vẫn còn khó khăn ở mấy cái dấu chấm, dấu phẩy..
Bạn thấy sao?
Bác thấy code ở bài #20 link bài #2 giải quyết được không?
ah. lại còn phải đổi chữ thường sang chữ hoa và viết hoa sau dấu chấm, đổi vị trí dấu chấm
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thấy khó ở cái phần in hoa và cái dấu chấm ấy :D
 
Upvote 0
Thấy thì dễ nhưng vẫn còn khó khăn ở mấy cái dấu chấm, dấu phẩy..
Bạn thấy sao?

Nếu muốn làm cả phần ấy thì phải có quy luật rõ ràng hơn để định đơn vị.

Ví dụ quy luật:

1. Nếu chỉ chơi với chuỗi chuẩn:
Tách ra nhiều lớp. Lớp thứ nhất tách bằng dấu chấm. Lớp kế tách bằng dấu phẩy. Lớp cuối tách bằng dấu cách.
Lúc ráp lịa thì cũng theo tuần tự đó mà nhét dấu trở vào.

2. Nếu chuỗi có thể không chuẩn, rắc rối hơn:
Dấu chấm ở cuối câu sẽ giữ lại. Vì vậy chỉ tách chuỗi đến LEN - 1. Hoặc sau khi tách chuỗi thì lấy dấu chấm ở từ cuối cùng chuyển sang từ đầu tiên.
Lúc ráp lại, cứ gặp từ đi với dấu thì lấy ra, ráp vào từ đi trước nó.

Nếu câu có dấu ngoặc thì phải đổi nghịch dấu ngoặc ( -> ) và ) -> ( đồng thời đổi từ trước ra sau từ và ngược lại.

Việc viết hoa thì chịu thua, sau dấu chấm thì mình có thể viết hoa, nhưng nếu không sau dấu chấm thì có đổi trở lại thành thường? Ông cố nội tôi cũng chẳng thể biết từ đó có phải là họ tên hay không.
 
Lần chỉnh sửa cuối:
Upvote 0
Mấy bài dạng này nghiên cứu chi cho nhức đầu. Chẳng thấy lợi ích gì cả.
 
Upvote 0
Mấy bài dạng này nghiên cứu chi cho nhức đầu. Chẳng thấy lợi ích gì cả.

Tập giải thuật chơi cho vui. Cái khó nhất của lập trình là giải thuât. Một khi có giải thuật rồi thì code chỉ là lấy đồ trong túi.

Nếu bạn hỏi "học được gì ở đây"? thì tôi xin trả lời là loại bài này trông dễ nhưng nó rất khó chịu vì có nhiều trường hợp ngoại lệ. Bạn viết code chạy xong rồi phải thử đi thử lại hàng chục ví dụ khác nhau mới thông hết các ngoại lệ. Bạn sẽ học được cách đoán trước vấn đề để thử code.

Bạn có để ý thấy mấy người hỏi bài vẫn hay hỏi câu "anh ơi sao code của anh không chạy...", vài lần như vậy mới xong?
 
Upvote 0
Má ơi !!! Bài này rắc rối thật
ở Cell [C3] sao dùng tới 2 char(10), 1 là đủ rồi mà bạn
Híc, ngồi buồn làm chơi, dĩ nhiên chỉ hơi hơi đúng vì còn nhiều trường hợp chưa xuất hiện
Mã:
Public Function DaoTu(Cll)
    Dim Tach, TachA, Gom, I, J, Dau, Giua, Cuoi, iDau, iGiua, A, Kq
        If InStr(Cll, Chr(10)) Then
            TachA = Split(Cll, Chr(10))
            For J = LBound(TachA) To UBound(TachA)
               If Right(TachA(J), 1) = "." Then
                   A = Replace("." & TachA(J), ". ", ". .")
               Else
                   A = Replace("." & TachA(J) & ".", ". ", ". .")
               End If
                    Tach = Split(A)
                    For I = UBound(Tach) To LBound(Tach) Step -1
                        Dau = Left(Tach(I), 1): Giua = Mid(Tach(I), 2, Len(Tach(I)) - 2): Cuoi = Right(Tach(I), 1)
                            If Dau = "." And Cuoi = "." Then
                                iDau = Left(Giua, 1): iGiua = Right(Giua, Len(Giua) - 1)
                                Gom = Gom & UCase(iDau) & iGiua & ". "
                            ElseIf Dau = "." Then
                                iDau = Left(Giua, 1): iGiua = Right(Giua, Len(Giua) - 1)
                                Gom = Gom & LCase(iDau) & iGiua & Cuoi & ". "
                            ElseIf Cuoi = "." Then
                                Gom = Gom & UCase(Dau) & Giua & " "
                            Else
                                Gom = Gom & Dau & Giua & Cuoi & " "
                            End If
                    Next I
               Kq = Kq & Gom & Chr(10)
               Gom = ""
            Next J
        Else
                If Right(Cll, 1) = "." Then
                    A = Replace("." & Cll, ". ", ". .")
                Else
                    A = Replace("." & Cll & ".", ". ", ". .")
                End If
                    Tach = Split(A)
                    For I = UBound(Tach) To LBound(Tach) Step -1
                        Dau = Left(Tach(I), 1): Giua = Mid(Tach(I), 2, Len(Tach(I)) - 2): Cuoi = Right(Tach(I), 1)
                            If Dau = "." And Cuoi = "." Then
                                iDau = Left(Giua, 1): iGiua = Right(Giua, Len(Giua) - 1)
                                Gom = Gom & UCase(iDau) & iGiua & ". "
                            ElseIf Dau = "." Then
                                iDau = Left(Giua, 1): iGiua = Right(Giua, Len(Giua) - 1)
                                Gom = Gom & LCase(iDau) & iGiua & Cuoi & ". "
                            ElseIf Cuoi = "." Then
                                Gom = Gom & UCase(Dau) & Giua & " "
                            Else
                                Gom = Gom & Dau & Giua & Cuoi & " "
                            End If
                    Next I
                            Kq = Gom
        End If
    DaoTu = Kq
End Function
Híc
 

File đính kèm

Upvote 0
**~** đúng là chủ đề này em thấy không có ích thật
Có thể không có ích với bạn hoặc vài bạn khác nhưng chưa chắc đã điều đó sẽ đúng với chủ topic này
Vả lại, đây cũng là một đề bài hay chứ bộ, ngồi buồn viết chơi cũng chẳng chết ai
Híc, đây là ý kiến riêng của mình thôi nhé
Thân
 
Upvote 0
Bác cogia a
1) nếu ô giá trị là : nhân, vât. Tam giác vàng
kết quả là : Vàng giác tam. Vât nhân,.
Làm sao để mất dấu , trước dấu chấm. Vì có dấu phẩy ở đó hơi vô duyên bác nhỉ. hiii
2) Và còn trường hợp giữa các ký tự có dấu "-" thì kết quả báo lỗi #VALUE. Sửa thế nào thế bác?
 
Upvote 0
Bác cogia a
1) nếu ô giá trị là : nhân, vât. Tam giác vàng
kết quả là : Vàng giác tam. Vât nhân,.
Làm sao để mất dấu , trước dấu chấm. Vì có dấu phẩy ở đó hơi vô duyên bác nhỉ. hiii
2) Và còn trường hợp giữa các ký tự có dấu "-" thì kết quả báo lỗi #VALUE. Sửa thế nào thế bác?
Thì mình đã nói bài này cực kỳ "rắc- rối- rắm" mà, làm theo dữ liệu của bạn í không đã mệt rồi
Mình nghĩ có các dấu ( "," "-" ) chắc cũng làm được thôi ( theo nguyên tắc chuyển dấu "chấm" như trong code, dấu "," sẽ chuyển lên chỗ sau chữ "Vật") nhưng...........mệt óc lắm
Đây là một bài thử sự kiên nhẫn của anh em mình đó mà, mình viết tới đó là "tèo" rồi
Dĩ nhiện khi giải quyết xong các dấu "," và "-" sẽ xuất hiện thêm các dấu "?" "!" "_"...........trước sau gì cũng "tèo" thôi thì "tèo" ở khúc này cho xong
Híc
Thân
Chắc lúc nào cảm thấy hứng thú mới có thể giải quyết nốt các phần còn lại
 
Lần chỉnh sửa cuối:
Upvote 0
Thì mình đã nói bài này cực kỳ "rắc- rối- rắm" mà, làm theo dữ liệu của bạn í không đã mệt rồi
Mình nghĩ có các dấu ( "," "-" ) chắc cũng làm được thôi ( theo nguyên tắc chuyển dấu "chấm" như trong code, dấu "," sẽ chuyển lên chỗ sau chữ "Vật") nhưng...........mệt óc lắm
Đây là một bài thử sự kiên nhẫn của anh em mình đó mà, mình viết tới đó là "tèo" rồi
Dĩ nhiện khi giải quyết xong các dấu "," và "-" sẽ xuất hiện thêm các dấu "?" "!" "_"...........trước sau gì cũng "tèo" thôi thì "tèo" ở khúc này cho xong
Híc
Thân
Chắc lúc nào cảm thấy hứng thú mới có thể giải quyết nốt các phần còn lại

Bài này không phải là khó, nó chỉ thuộc loại tùm lum, kiểu như bài đọc số thành chữ vậy. Chỉ cần bạn liệt kê ra hết những trường hợp khác nhau và cứ chiếu theo đó mà sử lý. Vì không ai có thể một lúc liệt kê ra hêt nên hầu hết mọi người đều phải theo cách thử đi thử lại nhiều lần.

Tuy nhiên, như tôi đã nêu ra trước đây, gặp chuỗi không chuẩn mới khó bởi vì lúc ráp lại làm sao giữ trình trạng không chuẩn của nó? Gặp chuỗi chuẩn thì có cách đi đường tắt như sau:

- Chèn thêm một dấu cách và một ký hiệu gì đó (vd chr(255)) vào trước các dấu, bất cứ dấu gì.
- Tách và ráp chuỗi bằng dấu cách. Lúc tách và ráp chuỗi, cứ việc coi như mỗi dấu trên là 1 từ.
- Ráp chuỗi xong, replace " " & chr(255) bằng ""
- Đọc lại chuỗi, đổi viết hoa tất cả các từ đi sau dấu chấm và chuyển ngược lại từ đi trước dấu chấm. Đồng thời chuyển chiều các dấu ngoặc.
 
Upvote 0
Mấy bài dạng này nghiên cứu chi cho nhức đầu. Chẳng thấy lợi ích gì cả.

Cái chính là tôi chẳng biết để làm gì nên.. làm biếng
Dù nghiên cứu giải thuật chơi thì tôi cũng phải mường tượng trong đầu mai này cái giải thuật ấy sẽ có ứng dụng gì đó. Nếu không thì chẳng khác nào tự mình nghĩ ra câu hỏi "Tại sao con người phải thở bằng O₂ mà không là H₂S
" rồi cố đi giải quyết nó mà chẳng biết hỏi thế để làm gì?
 
Upvote 0

File đính kèm

Upvote 0
Các bạn cho mình hỏi thêm nhé:

Dịch ngược câu với yêu cầu chỉ phải bỏ dấu chấm thì làm như thế nào các bạn nhỉ ?

Ví dụ:


---->



Cảm ơn các bạn !
Bạn không thấy ở bài #11 bác cogia đã đau đầu viết code cho bạn và bác thấy quá "rắc rối" với yêu cầu của bạn ở bài #1.
Giờ bạn lại có 1 yêu cầu khác hẳn bài #1?
 
Upvote 0
Các bạn cho mình hỏi thêm nhé:

Dịch ngược câu với yêu cầu chỉ phải bỏ dấu chấm thì làm như thế nào các bạn nhỉ ?

Ví dụ:


---->



Cảm ơn các bạn !
Thử với hàm sau:

Mã:
Function ReStr(rng As Range) As String
    Dim arrStr As Variant, i As Long
    arrStr = Split(rng, " ")
    For i = UBound(arrStr) To LBound(arrStr) Step -1
        ReStr = ReStr & " " & arrStr(i)
    Next
    ReStr = Trim(LCase(Replace(ReStr, ".", "")))
    ReStr = UCase(Left(ReStr, 1)) & Right(ReStr, Len(ReStr) - 1) & "."
End Function
 
Upvote 0

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

Back
Top Bottom