Xin trợ giúp code VBA sử dụng giống replace trong exce!

Liên hệ QC

thanhnam0119

Thành viên hoạt động
Tham gia
5/10/07
Bài viết
152
Được thích
4
Sub ReplaceHyphenWithCommaSpaceInColumn()
Dim ws As Worksheet
Dim lastRow As Long
Dim columnRange As Range
Dim cell As Range


Set ws = ThisWorkbook.Sheets("XLxa")


lastRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row


Set columnRange = ws.Range("F3:F" & lastRow)


Dim tempData As Variant
tempData = columnRange.Value


For Each cell In columnRange
cell.Value = Replace(cell.Value, " - ", ", ")
cell.Value = Replace(cell.Value, "-", ", ")
cell.Value = Replace(cell.Value, "- ", ", ")
cell.Value = Replace(cell.Value, " -", ", ")

Next cell
End Sub
em có code như này nhưng khi chạy dữ liệu thấy lâu không nhanh như sử dụng Repalce trong excel nhờ anh chị giúp xử lý chạy nhanh với dữ liệu lớn (hơn trăm nghìn bản ghi)
 
Thấy có cái tempData mà không dùng ta?
Thay cái này:
PHP:
For Each cell In columnRange
cell.Value = Replace(cell.Value, " - ", ", ")
cell.Value = Replace(cell.Value, "-", ", ")
cell.Value = Replace(cell.Value, "- ", ", ")
cell.Value = Replace(cell.Value, " -", ", ")
Next cell
Bằng cái này:
PHP:
Dim i as long
For i=1 to Ubound(tempData)
    tempData(i,1) = Replace(tempData(i,1), " - ", ", ")
    tempData(i,1) = Replace(tempData(i,1), "-", ", ")
    tempData(i,1) = Replace(tempData(i,1), "- ", ", ")
    tempData(i,1) = Replace(tempData(i,1), " -", ", ")
Next
ws.Range("F3").resize(ubound(tempData),1).value = tempData
 
Upvote 0
Thấy có cái tempData mà không dùng ta?
Thay cái này:
PHP:
For Each cell In columnRange
cell.Value = Replace(cell.Value, " - ", ", ")
cell.Value = Replace(cell.Value, "-", ", ")
cell.Value = Replace(cell.Value, "- ", ", ")
cell.Value = Replace(cell.Value, " -", ", ")
Next cell
Bằng cái này:
PHP:
Dim i as long
For i=1 to Ubound(tempData)
    tempData(i,1) = Replace(tempData(i,1), " - ", ", ")
    tempData(i,1) = Replace(tempData(i,1), "-", ", ")
    tempData(i,1) = Replace(tempData(i,1), "- ", ", ")
    tempData(i,1) = Replace(tempData(i,1), " -", ", ")
Next
ws.Range("F3").resize(ubound(tempData),1).value = tempData
em cảm ơn anh nhiều ạ. Code đã chạy em quên cái tempData
 
Upvote 0
Sub ReplaceHyphenWithCommaSpaceInColumn()

For Each cell In columnRange
cell.Value = Replace(cell.Value, " - ", ", ")
cell.Value = Replace(cell.Value, "-", ", ")
cell.Value = Replace(cell.Value, "- ", ", ")
cell.Value = Replace(cell.Value, " -", ", ")

Next cell
Sử dụng Range.Replace method thì không dùng vòng lặp:
.
Mã:
With columnRange

.Replace What:=" - ", Replacement:=", ", LookAt:=xlPart
.Replace What:="- ", Replacement:=", ", LookAt:=xlPart
.Replace What:=" -", Replacement:=", ", LookAt:=xlPart
.Replace What:="-", Replacement:=", ", LookAt:=xlPart

End With
 
Upvote 0
Như mọi khi, em khoái record cái "con trôn hát" rồi vào VBA chế biến.
 
Upvote 0
Cứ mười bài là có đến chín mang dữ liệu khủng.

Làm việc với dữ liệu khủng thì phải biết đi tìm hiểu các thủ thuật đặc biệt để đối phó. Khong có cách nào khác. Đừng nói chuyện "không biết mới hỏi". Không biết ở đây là một lỗi lầm do ỷ lại.

Sử dụng Range.Replace method thì không dùng vòng lặp:
...
Ở đây không cần hàm làm việc trên mảng. Vì vậy có thể dùng hàm Evaluate để không phải vòng lăp.

columnRange = Evaluate( "substitute(substitute...(" & columnRange.Address & ", ...)...)" )
Ở trên là cái công thức mà bạn sẽ dùng nếu làm thẳng trên bảng tính.

Chú ý: Trong code này, hàm Evaluate sẽ tuân thủ luật phép giao ngầm (implicit intersection). Tức là bên trong công thức bạn có thể dùng địa chỉ cả cột thay vì từng ô. Khi gặp mảng thì Evaluate sẽ bị vướng mắc chỗ diễn dịch địa chỉ range.
 
Upvote 0
Web KT
Back
Top Bottom