Cắt chuỗi ký tự, tách lấy phần chữ in đậm

Liên hệ QC
Bạn Tốt... Mình nói kiểu vậy thôi sao trả lời thất thà vậy........... mình biết mà Cảm ơn Bạn
không liên quan . nhìn cái giao diện trang chủ có tên Kiều Mạnh hướng dẫn chuyên đề excel tại Bình Dương kìa . ghê chưa . ngưỡng mộ quá đê . há há --=0--=0--=0
 
không liên quan . nhìn cái giao diện trang chủ có tên Kiều Mạnh hướng dẫn chuyên đề excel tại Bình Dương kìa . ghê chưa . ngưỡng mộ quá đê . há há --=0--=0--=0
Sao không bấm vào đó xem link đến ai là biết mà .....Ngại quá ......xấu hổ quá........@#!^%
 
cái này có ảnh hưởng gì vậy bạn
hiện tại code trên VBA với 2000 dòng với điều kiện chắc chắn phải bôi đậm nguyên từ thì sẽ mất 4 giây . bạn nào có ý kiến khác không ạ ?
Nếu không có khoảng trắng liên tiếp thì mỗi lần tìm được chữ đậm ở vị trí i, ta dùng INSTR(i, s, " ") (s là chuỗi ban đầu) để lấy toàn bộ khoảng i đến i+j. Nếu có nhiều khoảng trắng liên tiếp thì code phức tạp hơn nhiều, thậm chí 2 ký tự trống thì 1 đậm 1 nhạt có thể kết quả không chính xác nếu không xét kỹ các trường hợp. Code của mình 2k dòng hết khoảng gần 3s, còn phụ thuộc vào máy nữa.
Mã:
Option Explicit


Function XXX(r As Range) As String
    Dim s$, i&, j&, chk As Boolean
    s = r.Text
    j = Len(s)
    For i = 1 To j
        If r.Characters(i, 1).Font.Bold Then
            If Not chk Then
                XXX = XXX & "; "
                chk = True
            End If
            XXX = XXX & Mid(s, i, 1)
        Else
            chk = False
        End If
    Next
    If Len(XXX) > 0 Then XXX = Right(XXX, Len(XXX) - 2)
End Function
Sub abc()
    Dim r, arr(), n&, i&, t
    t = Timer
    Application.ScreenUpdating = False
    n = Range("A10000").End(xlUp).Row
    ReDim arr(1 To n - 1, 1 To 1)
    For i = 2 To n
        arr(i - 1, 1) = XXX(Cells(i, 1))
    Next
    Range("B2:B" & n) = arr
    Application.ScreenUpdating = True
    MsgBox Timer - t
End Sub
 
hihi bài này dùng được hàm Instr hả bạn ?
vậy bạn làm sao lấy kí tự in đậm của chuỗi này ta ?
i miss you,GiangLeLoi.Where do you go ?
 
Chúc mừng KieuManh, sửa nick thành "cạo rồi khỏi gội" đi.
Tám Một Tị:
Mình sống một mình đơn độc nhiều lúc lạnh lẻo cô đơn không có ai làm bạn....
Nên GPE và code két là bạn thân nhất của mình.....Nên mình hay téo một tí để lấy niền vui ....để sua đi nỗi buồn trống vắng... lạnh lẻo và cố đơn...Mong rằng các Bạn hiểu và thông cảm cho mình ...Nếu như có phút giây nào đó mình quá trớn một chút ..........đụng trạm tới góc khuất của một Bạn nào đó .... mình thành thật xin lỗi rất nhiều..............
 
hihi bài này dùng được hàm Instr hả bạn ?
vậy bạn làm sao lấy kí tự in đậm của chuỗi này ta ?
i miss you,GiangLeLoi.Where do you go ?
Mình đang nói đến điều kiện của bác Cò tức là in đậm cả từ. Ví dụ chuỗi s= "abc defgh ịjk" khi thấy "d" ở vị trí thứ 4 đậm, dùng INSTR(4, s, " ") được 10 thì tất cả các ký tự từ 4 đến 9 là đậm. Nếu hàm INSTR ra kết quả là 0 thì tất cả phần còn lại của chuỗi đều đậm. Nhưng code phức tạp hơn nhiều nếu có nhiều ký tự " " liên tiếp, đặc biệt có ký tự " " đậm và " " nhạt. Hoặc nếu điều kiện của bác Cò không đúng thì lại phải viết code khác.
 
Mình đang nói đến điều kiện của bác Cò tức là in đậm cả từ. Ví dụ chuỗi s= "abc defgh ịjk" khi thấy "d" ở vị trí thứ 4 đậm, dùng INSTR(4, s, " ") được 10 thì tất cả các ký tự từ 4 đến 9 là đậm. Nếu hàm INSTR ra kết quả là 0 thì tất cả phần còn lại của chuỗi đều đậm. Nhưng code phức tạp hơn nhiều nếu có nhiều ký tự " " liên tiếp, đặc biệt có ký tự " " đậm và " " nhạt. Hoặc nếu điều kiện của bác Cò không đúng thì lại phải viết code khác.

bạn giải thích làm chi --=0 . để mình hệ thống bố cục lại cho bạn dễ hình dung
nếu in đậm vô tội vạ => dùng code #24 của bạn . OK xong
nếu in đậm nguyên từ và dùng space ngăn giữa các từ => dùng ý tưởng hàm Instr của bạn . OK xong
bây giờ mình muốn mở rộng ra như #26 thì bạn nghĩ sao ?
 
Mình đang nói đến điều kiện của bác Cò tức là in đậm cả từ. Ví dụ chuỗi s= "abc defgh ịjk" khi thấy "d" ở vị trí thứ 4 đậm, dùng INSTR(4, s, " ") được 10 thì tất cả các ký tự từ 4 đến 9 là đậm.
Không phải in đậm từng từ xe kẽ mà thành chuỗi con, như thế này:
s = "abc defgh ijk lmn op qr"
 
bạn giải thích làm chi --=0 . để mình hệ thống bố cục lại cho bạn dễ hình dung
nếu in đậm vô tội vạ => dùng code #24 của bạn . OK xong
nếu in đậm nguyên từ và dùng space ngăn giữa các từ => dùng ý tưởng hàm Instr của bạn . OK xong
bây giờ mình muốn mở rộng ra như #26 thì bạn nghĩ sao ?
Nếu chuỗi như bài 26 thì cách theo gợi ý của bác Cò không khả thi, vì vậy mình mới không làm theo hướng này, cứ xét từng ký tự một thôi.
 
Nếu chuỗi như bài 26 thì cách theo gợi ý của bác Cò không khả thi, vì vậy mình mới không làm theo hướng này, cứ xét từng ký tự một thôi.
sát thủ Cò nói là in đậm nguyên từ chứ đâu có nói giữa các từ là "cái gì" đâu . người ta tính bài hết rồi . bạn không tin cứ chờ sát thủ Cò ra tay nhé
 
Vậy không biết bác có chiêu gì, nếu ngăn cách các từ là các ký tự sau " ", ".", ":", ";", "!", "?", "*", "+", "-"... thì có lẽ tốc độ còn chậm nữa.
 
Vậy không biết bác có chiêu gì, nếu ngăn cách các từ là các ký tự sau " ", ".", ":", ";", "!", "?", "*", "+", "-"... thì có lẽ tốc độ còn chậm nữa.
tôi nghĩ bạn cũng là người có kiến thức về VBA . nên tôi chỉ cần nói 1 câu là bạn suy ra bài giải ngay
thế nào là 1 kí tự word ?
chấm hết . tôi đi ngủ trước . chào bạn
 
"1 ký tự word" không thuộc về VBA, tôi đoán là bạn cho rằng 1 từ chỉ gồm các ký tự từ a đến z, các ký tự khác đều là ký tự ngăn cách từ? Nếu đúng như vậy khi thấy ký tự bắt đầu từ rồi thì làm sao xác định được ký tự cuối nếu không duyệt từng ký tự một?
 
Híc, đi làm vài lon về thấy các bạn tranh luận vui quá
Đừng làm phức tạp thêm vấn đề
Dữ liệu kiểu nào thì phải.....nhìn thực tế vào bài hỏi chứ, cứ suy diễn mãi thì chẳng bao giờ viết được bài giải
Cứ như bài #1 (câu hỏi gốc) thì dữ liệu là những câu, mỗi câu gồm nhiều từ, các từ cách nhau bằng khoảng trằng
Dĩ nhiên nếu viết code thì ta phải đề phòng khoảng trắng vô nghĩa, còn không ta cứ phang nó theo cách nhập của tác giả, sai ráng chịu, còn nếu xuất hiện khoảng trắng.....in đậm mà bắt lấy nó luôn thì......bó chân
Mình chỉ nói, nếu dữ liệu như trong bài #1 thì mình không xét từng ký tự mà chỉ xét từng từ, chỉ cần xét ký tự thứ nhất của từ đó, nếu em đó mà in đậm thì......lấy luôn từ đó. Vậy thôi, còn lấy từ đó như thế nào thì cũng tùy ý của người viết, tôi lấy kiểu này, bạn kia lấy kiểu khác. Dĩ nhiên tốc độ phải nhanh hơn xét từng ký tự, còn nhanh hơn bao nhiêu thì còn tùy dữ liệu nhiều hay ít nữa
Thân
 
Híc, đi làm vài lon về thấy các bạn tranh luận vui quá
Đừng làm phức tạp thêm vấn đề
Dữ liệu kiểu nào thì phải.....nhìn thực tế vào bài hỏi chứ, cứ suy diễn mãi thì chẳng bao giờ viết được bài giải
Cứ như bài #1 (câu hỏi gốc) thì dữ liệu là những câu, mỗi câu gồm nhiều từ, các từ cách nhau bằng khoảng trằng
Dĩ nhiên nếu viết code thì ta phải đề phòng khoảng trắng vô nghĩa, còn không ta cứ phang nó theo cách nhập của tác giả, sai ráng chịu, còn nếu xuất hiện khoảng trắng.....in đậm mà bắt lấy nó luôn thì......bó chân
Mình chỉ nói, nếu dữ liệu như trong bài #1 thì mình không xét từng ký tự mà chỉ xét từng từ, chỉ cần xét ký tự thứ nhất của từ đó, nếu em đó mà in đậm thì......lấy luôn từ đó. Vậy thôi, còn lấy từ đó như thế nào thì cũng tùy ý của người viết, tôi lấy kiểu này, bạn kia lấy kiểu khác. Dĩ nhiên tốc độ phải nhanh hơn xét từng ký tự, còn nhanh hơn bao nhiêu thì còn tùy dữ liệu nhiều hay ít nữa
Thân
Em cũng nghĩ vậy và viết code theo ý tưởng là dùng INSTR để tìm khoảng trống. Nhưng bạn Chim Hồng có cách gì đó còn tổng quát hơn áp dụng với tất cả các từ, tiếc rằng bạn ấy ngủ mất rồi.
 
hihi bài này dùng được hàm Instr hả bạn ?
vậy bạn làm sao lấy kí tự in đậm của chuỗi này ta ?
i miss you,GiangLeLoi.Where do you go ?
Hồi chiều thấy topic này có 14 bài. Mới làm có vài lon. Giờ vô thấy sum tụ quá. Mình là mình chuẩn men. "Miss" là sao ấy cơ nhỉ? >"<
P/s: Ý tưởng của mình cũng giống #13. Nên đợi chủ của #13 ấy chứ.
 
Hồi chiều thấy topic này có 14 bài. Mới làm có vài lon. Giờ vô thấy sum tụ quá. Mình là mình chuẩn men. "Miss" là sao ấy cơ nhỉ? >"<
P/s: Ý tưởng của mình cũng giống #13. Nên đợi chủ của #13 ấy chứ.
ý tưởng của bạn giống #13 thì chờ đợi chi nữa . múa vài đường võ công cho cộng đồng chiêm ngưỡng đi bạn . --=0--=0--=0
 
Mượn ý của bạn Hau151978
tôi đoán là bạn cho rằng 1 từ chỉ gồm các ký tự từ a đến z, các ký tự khác đều là ký tự ngăn cách từ?

Nếu tìm từ in đậm có dấu ngăn cách bất kỳ, code của bạn vẫn áp dụng được nếu thay ký tự ngăn cách =" "
 
Web KT
Back
Top Bottom