Cắt hết chuỗi viết hoa trong excel (1 người xem)

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

conanit89

Thành viên mới
Tham gia
10/4/13
Bài viết
5
Được thích
0
Tình hình là mình có một chuổi như thế này: "AI BẢO EM DỀ THƯƠNG Ai bảo em dễ thương, nhưng thương thương không dễ..." nó nằm trong 1 cell giờ mình muốn tách nó thành 2 cột, cột 1 chứa chuổi: "AI BẢO EM DỀ THƯƠNG" và cột 2 chứa chuổi: "Ai bảo em dễ thương, nhưng thương thương không dễ..." có ai biết cách làm xin chỉ dùm mình nhen? Thanks mọi người...
 
Tình hình là mình có một chuổi như thế này: "AI BẢO EM DỀ THƯƠNG Ai bảo em dễ thương, nhưng thương thương không dễ..." nó nằm trong 1 cell giờ mình muốn tách nó thành 2 cột, cột 1 chứa chuổi: "AI BẢO EM DỀ THƯƠNG" và cột 2 chứa chuổi: "Ai bảo em dễ thương, nhưng thương thương không dễ..." có ai biết cách làm xin chỉ dùm mình nhen? Thanks mọi người...
Bạn đưa cái file thực lên đây, để xem nó có quy luật nào không rồi tính tiếp nha.
 
Gặp câu như thế này:

"AI BẢO LÀM ĐỀ TÀI quái dị thế. ĐÃ CÓ CÔNG NGHĨ RA CÁI QUÁI DỊ thì nên nghĩ cho cạn ĐỦ MỌI TRƯỜNG HỢP"

thì tách như thế nào?
 
Xin chào mọi người thật ra đây là cái list karaoke của arirang mình convert qua excel để làm database cho phần mềm, nhưng khi convert qua thì tên bài hát và lyric nó lại nằm cùng một cột nên mình muốn tách ra thành 2 cột để có thể đưa vào database chỉ vây thôi. https://drive.google.com/file/d/0ByJQRpbsrYyhNi1iVm02TkxQZGM/edit?usp=sharing đây là file của mình các bạn chỉ bảo nhen!
 
Xin chào mọi người thật ra đây là cái list karaoke của arirang mình convert qua excel để làm database cho phần mềm, nhưng khi convert qua thì tên bài hát và lyric nó lại nằm cùng một cột nên mình muốn tách ra thành 2 cột để có thể đưa vào database chỉ vây thôi. https://drive.google.com/file/d/0ByJQRpbsrYyhNi1iVm02TkxQZGM/edit?usp=sharing đây là file của mình các bạn chỉ bảo nhen!
k biết là được chưa?
 

File đính kèm

Không chỉ mình cách làm ah? mình hỏi cách làm mà?
 
Vấn đề là mình chỉ làm được với cái file đó thôi, đơn giản vì tất cả những chữ hoa đều kết thúc là (REMIX) nên có thể chọn Data\Text to Column chọn fixed width - Next - Trong ô Other gõ ) Thế là xong
 
Oh như thế thì không đúng yêu câu của mình rồi! vì mình còn nhiều file không có chử REMIX chỉ chỉ là tên bài hát viết toàn là chử hoa thôi! có cách tào không ta? thanks bạn nhiều!
 
File nào thì cũng phải có quy luật nào đó mới làm được, thấy b gửi có file đó lên nên mình thấy có quy luật thế thôi, mình chưa biết hàm nào nhận biết chữ hoa, chữ thưởng cả :) Nhờ mấy bác giỏi về VBA chắc các bác ấy biết :)
 
Có ai có thể giúp mình không?

Không phải vô cớ mà mọi người hỏi bạn. Vì bạn cứ nghĩ là dữ liệu của bạn luôn chỉ là: <một loạt ký tự hoa><một loạt ký tự thường>. Nhưng bạn có lường được trường hợp dữ liệu gốc của bạn sẽ khác hoặc do chỉnh sửa gì đó mà khác đi?
Vd. ô B11 của bạn có: EM NHỚ ANH vô CÙNG Anh đã đến và nói với em ngày mai anh phải di...
Rõ ràng dữ liệu không có dạng đỏ đỏ.
----------
Tôi làm cho bạn bằng code. Lấy đoạn đầu dài nhất có thể mà toàn chữ hoa. Phần còn lại nếu có thì là phần 2, bất luận nó có chứa ký tự hoa hay không.

Vd. từ ô B11 có phần 2 là "vô CÙNG Anh đã đến và nói với em ngày mai anh phải di..."

Bạn không thễ đòi hỏi là phải "EM NHỚ ANH vô CÙNG" và "Anh đã đến và nói với em ngày mai anh phải di..." được. Vì sao? Vì bạn nhìn bằng mắt và bạn tư duy thì bạn thấy "vô CÙNG Anh đã đến và nói với em ngày mai anh phải di..." nó không "ổn" nên bạn vứt "vô CÙNG" sang phần 1. Còn code nó làm gì có tư duy như bạn được? Nó chỉ thấy một chuỗi ký tự mà thôi.
Còn nếu bạn muốn phần 1 phải lấy tới từ hoa cuối cùng (bất chấp trước nó có từ thường hay không) thì lại khác. Nhưng lúc đó nếu dữ liệu của bạn có lỗi và thành "EM NHỚ ANH vô CÙNG Anh đã đến và nói với em ngày mai anh phải di tâm sự với bé hàng XÓM..." thì phần 2 sẽ không có?

Vậy tôi làm cho bạn với qui định như trên
1. Code của Sheet1
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
    Set rng = Intersect(Target, [B:B])
    If Not rng Is Nothing Then
        Application.EnableEvents = False
        SplitSong rng
        Application.EnableEvents = True
    End If
End Sub

2. Insert Module1, code Mudule1
Mã:
Sub SplitSong(rng As Range)
Dim Arr(), text As String, tmp As String, r As Long, pos As Long, good As Boolean
    If rng.Rows.Count > 1 Then
        Arr = rng
        ReDim Preserve Arr(1 To UBound(Arr), 1 To 2)
    Else
        ReDim Arr(1 To 1, 1 To 2)
        Arr(1, 1) = rng
    End If
    For r = 1 To UBound(Arr)
        text = Trim(UCase(Arr(r, 1))) & " "
        pos = InStrRev(text, " ")
        Do While pos > 1
            tmp = Left(text, pos - 1)
            If InStr(1, Arr(r, 1), tmp, 0) = 1 Then
                Arr(r, 2) = Trim(Mid(Arr(r, 1), pos + 1))
                Arr(r, 1) = Trim(tmp)
                good = True
                Exit Do
            Else
                pos = InStrRev(text, " ", pos - 1)
            End If
        Loop
        If Not good Then
            Arr(r, 2) = Arr(r, 1)
            Arr(r, 1) = ""
        End If
    Next
    rng.Resize(, 2).Value = Arr
End Sub

Bạn thử test xem sao.
 
Lần chỉnh sửa cuối:
Nếu các từ chỉ cần cách nhau 1 khoảng trắng thì có thể dùng cách dễ hơn (không lý gì đến tốc độ cả):

1. dùng hàm split tách chuỗi ra thành mảng theo khoảng trắng. Như vậy mỗi phần tử của mảng là 1 từ.

2. đọc từng từ, so sánh nó với Ucase của nó. Nếu giống thì nó là từ viết hoa, ghép trở lại vào mảng các-từ-hoa. Kể từ từ không giống thì không cần so sánh nữa, ghép chúng vào mảng các-từ-thường.
 

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

Back
Top Bottom