Xin code tô màu 1 đoạn text trong chuỗi

Liên hệ QC

tuan_anhbm

Thành viên thường trực
Tham gia
16/7/09
Bài viết
253
Được thích
1,605
Nhờ các bạn giúp tôi bài toán sau:
Giả sử trong cell A1 tôi có 1 đoạn text: "abc…= xyz..."
Bây giờ tôi muốn có 1 code để làm việc sau:
1. Kiểm tra xem trong chuỗi trên có dấu "=" hay không?
2. Tô màu cho phần ký tự ở sau dấu "=" (ở đây là "xyz...")
Câu hỏi 2: Tôi đã dùng Record macro thì thu được:
Mã:
[FONT=Tahoma]Sub Macro1()[/FONT]
[FONT=Tahoma]    ActiveCell.FormulaR1C1 = "abc…= xyz"[/FONT]
[FONT=Tahoma]    With ActiveCell.Characters(Start:=7, Length:=3).Font[/FONT]
[FONT=Tahoma]        .ColorIndex = 5[/FONT]
[FONT=Tahoma]    End With[/FONT]
[FONT=Tahoma]End Sub[/FONT]
Nhưng tôi cần nó đúng trong tr.hợp tổng quát kia.
------------------------
Lưu ý: số ký tự ở trên chỉ là ví dụ, thực tế ko biết trước số ký tự trước và sau dấu "=".
Xin cảm ơn trước!
 
Nhờ các bạn giúp tôi bài toán sau:
Giả sử trong cell A1 tôi có 1 đoạn text: "abc…= xyz..."
Bây giờ tôi muốn có 1 code để làm việc sau:
1. Kiểm tra xem trong chuỗi trên có dấu "=" hay không?
2. Tô màu cho phần ký tự ở sau dấu "=" (ở đây là "xyz...")
Câu hỏi 2: Tôi đã dùng Record macro thì thu được:
Mã:
[FONT=Tahoma]Sub Macro1()[/FONT]
[FONT=Tahoma]    ActiveCell.FormulaR1C1 = "abc…= xyz"[/FONT]
[FONT=Tahoma]    With ActiveCell.Characters(Start:=7, Length:=3).Font[/FONT]
[FONT=Tahoma]        .ColorIndex = 5[/FONT]
[FONT=Tahoma]    End With[/FONT]
[FONT=Tahoma]End Sub[/FONT]
Nhưng tôi cần nó đúng trong tr.hợp tổng quát kia.
------------------------
Lưu ý: số ký tự ở trên chỉ là ví dụ, thực tế ko biết trước số ký tự trước và sau dấu "=".
Xin cảm ơn trước!
Gữi bạn đoạn code này:
PHP:
Sub StrColor(TextRng As Range, Color As Long, Optional StCh As String, Optional FromSt As Boolean)
  Dim i As Long
  If IsMissing(StCh) Then i = 1 Else i = InStr(TextRng, StCh)
  TextRng.Characters(i + FromSt + 1, Len(TextRng)).Font.ColorIndex = Color
End Sub
Giờ nếu bạn muốn:
- Tô màu tại cell C7
- Tô màu tính từ ký tự "="
- Tô màu xanh
Vậy bạn viết thêm 1 code như sau:
PHP:
Sub ToMau()
  Range("C7").Font.ColorIndex = 1
  StrColor Range("C7"), 5, "=", 0
End Sub
Lưu ý:
Số 0 (hoặc 1) Trong đoạn StrColor Range("C7"), 5, "=", 0 mang ý nghĩa là tô màu tính từ ký tự chỉ định hay tính từ sau ký tự ấy
Code này có thể cải tiến thêm (tùy ý)
 

File đính kèm

Upvote 0
Nhờ các bạn giúp tôi bài toán sau:
Giả sử trong cell A1 tôi có 1 đoạn text: "abc…= xyz..."
Bây giờ tôi muốn có 1 code để làm việc sau:
1. Kiểm tra xem trong chuỗi trên có dấu "=" hay không?
2. Tô màu cho phần ký tự ở sau dấu "=" (ở đây là "xyz...")
Câu hỏi 2: Tôi đã dùng Record macro thì thu được:
Mã:
[FONT=Tahoma]Sub Macro1()[/FONT]
[FONT=Tahoma]    ActiveCell.FormulaR1C1 = "abc…= xyz"[/FONT]
[FONT=Tahoma]    With ActiveCell.Characters(Start:=7, Length:=3).Font[/FONT]
[FONT=Tahoma]        .ColorIndex = 5[/FONT]
[FONT=Tahoma]    End With[/FONT]
[FONT=Tahoma]End Sub[/FONT]
Nhưng tôi cần nó đúng trong tr.hợp tổng quát kia.
------------------------
Lưu ý: số ký tự ở trên chỉ là ví dụ, thực tế ko biết trước số ký tự trước và sau dấu "=".
Xin cảm ơn trước!

Góp vui cho bạn code sau:

Mã:
Sub ToMau()
On Error Resume Next
Dim i As Long
Dim CharNum As Integer
Dim Cell As Range
    For Each Cell In Selection
        Cell.Font.ColorIndex = 1
        CharNum = WorksheetFunction.Find("=", Cell)
        For i = CharNum + 1 To Len(Cell.Value) Step 1
            Cell.Characters(i, 1).Font.ColorIndex = 5
        Next
    Next
    
End Sub
 

File đính kèm

Upvote 0
Góp vui cho bạn code sau:

Mã:
Sub ToMau()
On Error Resume Next
Dim i As Long
Dim CharNum As Integer
Dim Cell As Range
    For Each Cell In Selection
        Cell.Font.ColorIndex = 1
        CharNum = WorksheetFunction.Find("=", Cell)
        For i = CharNum + 1 To Len(Cell.Value) Step 1
            Cell.Characters(i, 1).Font.ColorIndex = 5
        Next
    Next
    
End Sub
Trong VBA có hàm InStr, sao phải dùng đến WorksheetFunction.Find vậy Doom ơi?
Mặc khác, xác định được vị trí của ký tự thì TÔ MÀU luôn, sao phải For.. Next?
--------------
Chẳng hạn có thể rút gọn code của bạn thành:
PHP:
Sub ToMau()
  Dim Cell As Range
  Selection.Font.ColorIndex = 1
  For Each Cell In Selection
    If InStr(Cell, "=") Then
      Cell.Characters(InStr(Cell, "=") + 1, Len(Cell)).Font.ColorIndex = 5
    End If
  Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn thầy NDUdomfootwear thật nhiều.
Tôi đang thử, vửa thử vừa "nghiên cứu" vì chưa hiểu rõ ý nghĩa code.
Có gì ko rõ cho tôi hỏi lại sau nhé.
 
Upvote 0
Trở lại diễn đàn...
Tôi đã thử qua tất cả... và thấy nó cho kết quả đúng như mong đợi, hay thật, hay thật.
Tưởng chừng có thể cải tiến để ứng dụng vào tr.hợp tương tự nhưng thí nghiệm cả ngày hôm qua mà chưa được ---> Vẫn còn phải nhờ các bạn giúp thêm:
1. Để kiểm tra ký tự sau cùng BÊN PHẢI có phải là dấu “=” không, tôi sử dụng code:
Mã:
[COLOR=black][FONT=Tahoma]If WorksheetFunction.Right(Selection, 1) <> "=" Then[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]'Lam viec gi do ...[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]End If[/FONT][/COLOR]
Nhưng không hiểu sai chỗ nào mà khi chạy máy báo lỗi tại dòng đầu tiên?
2. Giả sữ cell C7 có chuỗi text: "abc…= xyz...". Tôi muốn tách lấy phần phía sau dấu “=” qua cell D7 (xyz), có cách nào trả kết quả dạng text luôn không các bạn? Tôi vẫn phải làm:
Mã:
[COLOR=black][FONT=Tahoma][D7] = "=RIGHT(RC[-1],LEN(RC[-1])-FIND(""="",RC[-1])-1)"[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma][D7] = [D7].Value[/FONT][/COLOR]
Đã có thử:
[D7] = Evaluate("=LEFT(C8;FIND(" = ";C8)-1)")
cũng ko duoc?
Vậy nhờ các bạn giúp thêm cho tôi nhé. Cảm ơn các bạn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Trở lại diễn đàn...
Tôi đã thử qua tất cả... và thấy nó cho kết quả đúng như mong đợi, hay thật, hay thật.
Tưởng chừng có thể cải tiến để ứng dụng vào tr.hợp tương tự nhưng thí nghiệm cả ngày hôm qua mà chưa được ---> Vẫn còn phải nhờ các bạn giúp thêm:
1. Để kiểm tra ký tự sau cùng BÊN PHẢI có phải là dấu “=” không, tôi sử dụng code:
Mã:
[COLOR=black][FONT=Tahoma]If WorksheetFunction.Right(Selection, 1) <> "=" Then[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]'Lam viec gi do ...[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]End If[/FONT][/COLOR]
Nhưng không hiểu sai chỗ nào mà khi chạy máy báo lỗi tại dòng đầu tiên?
2. Giả sữ cell C7 có chuỗi text: "abc…= xyz...". Tôi muốn tách lấy phần phía sau dấu “=” qua cell D7 (xyz), có cách nào trả kết quả dạng text luôn không các bạn? Tôi vẫn phải làm:
Mã:
[COLOR=black][FONT=Tahoma][D7] = "=RIGHT(RC[-1],LEN(RC[-1])-FIND(""="",RC[-1])-1)"[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma][D7] = [D7].Value[/FONT][/COLOR]
Đã có thử:
[D7] = Evaluate("=LEFT(C8;FIND(" = ";C8)-1)")
cũng ko duoc?
Vậy nhờ các bạn giúp thêm cho tôi nhé. Cảm ơn các bạn nhiều.

Dựa vào code trên của Thầy Tuấn thì tách nó ra như sau:

Mã:
Sub Tach()
 On Error Resume Next
  Dim Cell As Range
  Selection.Font.ColorIndex = 1
  For Each Cell In Selection
    If InStr(Cell, "=") Then
     Cell.Offset(0, 1) = Right(Cell, Len(Cell) - InStr(Cell, "="))
    End If
  Next
End Sub
 

File đính kèm

Upvote 0
Trở lại diễn đàn...
Tôi đã thử qua tất cả... và thấy nó cho kết quả đúng như mong đợi, hay thật, hay thật.
Tưởng chừng có thể cải tiến để ứng dụng vào tr.hợp tương tự nhưng thí nghiệm cả ngày hôm qua mà chưa được ---> Vẫn còn phải nhờ các bạn giúp thêm:
1. Để kiểm tra ký tự sau cùng BÊN PHẢI có phải là dấu “=” không, tôi sử dụng code:
Mã:
[COLOR=black][FONT=Tahoma]If WorksheetFunction.Right(Selection, 1) <> "=" Then[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]'Lam viec gi do ...[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]End If[/FONT][/COLOR]
Nhưng không hiểu sai chỗ nào mà khi chạy máy báo lỗi tại dòng đầu tiên?
2. Giả sữ cell C7 có chuỗi text: "abc…= xyz...". Tôi muốn tách lấy phần phía sau dấu “=” qua cell D7 (xyz), có cách nào trả kết quả dạng text luôn không các bạn? Tôi vẫn phải làm:
Mã:
[COLOR=black][FONT=Tahoma][D7] = "=RIGHT(RC[-1],LEN(RC[-1])-FIND(""="",RC[-1])-1)"[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma][D7] = [D7].Value[/FONT][/COLOR]
Đã có thử:
[D7] = Evaluate("=LEFT(C8;FIND(" = ";C8)-1)")
cũng ko duoc?
Vậy nhờ các bạn giúp thêm cho tôi nhé. Cảm ơn các bạn nhiều.
Câu 1: Sai ở chổ WorksheetFunction ấy ---> Hàm Right có sẳn trong VBA rồi, vì thế chỉ cần thế này là được:
PHP:
 If Right(Selection, 1) <> "=" Then
  '... Code here
 End If
Theo tôi cũng không nên là Selection, vì đấy là 1 vùng chứ không phải 1 cell ---> Ít ra cũng nên là If Right(ActiveCell, 1)
Câu 2:
PHP:
With Range("D7")
  .Value = Mid(.Offset(, -1), InStr(.Offset(, -1), "=") + 1, Len(.Offset(, -1)))
End With
 
Upvote 0
Vẫn còn phải nhờ các bạn giúp thêm:
1. Để kiểm tra ký tự sau cùng BÊN PHẢI có phải là dấu “=” không, tôi sử dụng code:
Mã:
[COLOR=black][FONT=Tahoma]If WorksheetFunction.Right(Selection, 1) <> "=" Then[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]'Lam viec gi do ...[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma]End If[/FONT][/COLOR]
Nhưng không hiểu sai chỗ nào mà khi chạy máy báo lỗi tại dòng đầu tiên?
2. Giả sữ cell C7 có chuỗi text: "abc…= xyz...". Tôi muốn tách lấy phần phía sau dấu “=” qua cell D7 (xyz), có cách nào trả kết quả dạng text luôn không các bạn? Tôi vẫn phải làm:
Mã:
[COLOR=black][FONT=Tahoma][D7] = "=RIGHT(RC[-1],LEN(RC[-1])-FIND(""="",RC[-1])-1)"[/FONT][/COLOR]
[COLOR=black][FONT=Tahoma][D7] = [D7].Value[/FONT][/COLOR]
Đã có thử:
[D7] = Evaluate("=LEFT(C8;FIND(" = ";C8)-1)")
cũng ko duoc?
Vậy nhờ các bạn giúp thêm cho tôi nhé. Cảm ơn các bạn nhiều.

(*) Trong VBA có hàm Right(GPE,1) rồi; Sẽ đưa ra kết quả là "E"; Có lẽ nó bất bình vì không xài của nó đó thôi. Chổ này bạn phải chìu nó một chút.

(*) Trong VBA để tim vị trí của chữ cái nào đó trong chuỗi, ta dùng hàm InStr("GPE","=") - Ở đây "=" là chuỗi cần tìm

Thân ái!
 
Upvote 0
Đúng ý tôi rồi. Hay thật đó!...
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các bạn đã cho tôi những bài học thật hữu ích.
 
Upvote 0
Web KT

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

Back
Top Bottom