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.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 ạ ?
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