Vì không biết bạn làm gì và khi nào muốn dừng vòng lặp nên chỉ đoán mò thôi. Nếu Thầy Sealand hướng dẫn mà đúng ý bạn thì code của bạn có thể như thế này (chép thẳng vào nút)câu lệnh dừng vòng lặp trong file như thế nào, mình không rành mày mò mãi không được xin các cao thủ chỉ dùm./
Private Sub CB01_Click()
Dim I As Integer
I = Range([a8], [a5000].End(xlUp)).Rows.Count + 7
Range("f8:f" & I).FormulaR1C1 = _
"=RIGHT(RC[-5],LEN(RC[-5])-FIND(""*"",SUBSTITUTE(RC[-5],"" "",""*"",LEN(RC[-5])-LEN(SUBSTITUTE(RC[-5],"" "","""")))))"
End Sub
Sub Cthuc()
Sheets("tvi").Range("F8", Sheets("tvi").[a65536].End(xlUp).Offset(, 5)).FormulaR1C1 = _
"=RIGHT(RC[-5],LEN(RC[-5])-FIND(""*"",SUBSTITUTE(RC[-5],"" "",""*"",LEN(RC[-5])-LEN(SUBSTITUTE(RC[-5],"" "","""")))))"
End Sub
Sub Test()
Dim Clls As Range
For Each Clls In Range([A8], [A65536].End(xlUp))
Clls.Offset(, 5) = "=RIGHT(RC[-5],LEN(RC[-5])-FIND(""*"",SUBSTITUTE(RC[-5],"" "",""*"",LEN(RC[-5])-LEN(SUBSTITUTE(RC[-5],"" "","""")))))"
Next
End Sub
Sub Test()
Dim Clls As Range
Set Clls = Range("A8")
Do
Clls.Offset(, 5) = "=RIGHT(RC[-5],LEN(RC[-5])-FIND(""*"",SUBSTITUTE(RC[-5],"" "",""*"",LEN(RC[-5])-LEN(SUBSTITUTE(RC[-5],"" "","""")))))"
Set Clls = Clls.Offset(1)
Loop Until IsEmpty(Clls)
End Sub
Dùng mảng cho nó nhanh:Cảm ơn mọi người đã trợ giúp! Code của thầy Sealand rất tuyệt. Công thức của ndu cũng rất tốt, có thể phải thêm istancenum nữa. Code của Concogia sao mình thầy nó chỉ cho kết qủa dòng đầu thôi nhỉ? nhưng cũng rất cảm ơn bạn. Thầy Sealand lại còn cho trang tham khảo nữa. Mới vô diễn dàn mình chẳng biết nút thanks ở đâu để bấm nữa. Do mới bập bẹ tìm hiểu về VBA mình chẳng hiểu gì về Code cả, muốn biết chắc cần nhiều thời gian? Đề nghị mọi người giúp thêm câu lệnh chọn vùng vừa xuất dữ liệu, mục tiêu là copy và dán trị đè lên nó để khỏi vướng công thức; hoặc dán dè lên cột A tươnng ứng.
Với khoảng 10.000 dòng dữ liệu mình thấy Code của thầy Sealand chạy nhanh nhất, gần như tức thời, còn Code mình dưa mọi người giúp nó chạy tới cả 1 phút rưỡi, máy của mình cấu hình PIII thôi 1G2.
thanks.
Private Sub CB03_Click()
Dim Arr, i As Long, Item
With Range([a8], [A65536].End(xlUp))
Arr = .Value
For i = 1 To UBound(Arr)
Item = Trim(Replace(Arr(i, 1), "°", ""))
Arr(i, 1) = IIf(IsNumeric(Item), "'" & Item, Item)
Next
.Value = Arr
End With
End Sub
Private Sub CB01_Click()
Dim cl as Range
For Each cl In Sheets("tvi").Range("F8:F" & _
WorksheetFunction.CountA(Sheets("tvi").Range("A8:A65536")))
cl.Value = _
Replace(Replace(cl.Offset(, -5).Value, Chr(176), ""), Chr(32), "")
Next
End Sub
Việc nhanh chậm là 1 vấn đề , cái cũng đáng để ý là để lại công thức thì sẽ rất hạn chế cho việc sử lý tiếp theo khi bảng tính thường xuyên cập nhật cho hàng vạn cái công thức ấy. Đã Code thì code một thể.
Theo lời khuyên của thầy sealand tôi đã chuyển sang code thay cho việc dùng công thức rất tốt(Sheets bcth) có điều là với việc đặt tên vùng cố định thì kém linh hoạt mà dùng vùng động thì file phải liên tục cập nhật nên khi chạy macro rất chậm, xin thầy và các cao thủ sửa dùm code cho phù hợp hơn.thanks!
http://www.mediafire.com/file/3lmqm2kqdhz6peh/baocao.rar