Giúp sửa code đổi số dương sang số âm cho tốc độ nhanh hơn

Liên hệ QC

Phúc Lộc Thọ

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
12/8/22
Bài viết
32
Được thích
4
Chào mọi người. Mình có dùng đoạn code sau để chuyển số Dương sang Số Âm, Nhưng dữ liệu mình có 2 vùng tổng là 20.000 dòng, code chạy khá lâu, nhờ mọi người sửa giúp code để chạy nhanh hơn. Em xin chân thành cảm ơn đại gia đình



Sub DoiDuongSangAm()
Application.ScreenUpdating = False
Dim x As Long, Y As Long

For x = 20001 To 30000
If Range("A" & x).Value <> "" Then
Range("A" & x) = Range("A" & x) * -1
Else
Range("A" & x) = Range("A" & x)
End If
Next x

For Y = 40001 To 50000
If Range("A" & Y).Value <> "" Then
Range("A" & Y) = Range("A" & Y) * -1
Else
Range("A" & Y) = Range("A" & Y)
End If
Next Y
Application.ScreenUpdating = True
End Sub
 
Tôi gợi ý loại code mà bản thân tôi sẽ sử dụng cho bạn nào cần học hỏi về kỹ thuật "viết code lười biếng".
Nên chú ý là code không chạy nhanh lắm, đừng nói đến chuyện "nhanh nhất". Bản thân tôi chỉ thích code nằm trong tầm kiểm soát của mình - tức là dễ dò chỗ sai, dễ chỉnh sửa.

Code nhanh tay nhất:
Sub NhanhTay()
[A20001:A30000] = [ IF(A20001:A30000 <> "", -A20001:A30000, "") ]
[A40001:A50000] = [ IF(A40001:A30000 <> "", -A40001:A50000, "") ]
End Sub

Code dễ sửa hơn:
Sub NhanhTayDeSua()
For Each rg In [ { "A20001:A30000", "A40001:A50000" } ]
Range(rg) = Evaluate( Replace("if(rg = """", """", -rg)", "rg", rg) )
Next rg
End Sub

Góp Vui

Sub Topspeed()
With Range("A20001:A30000")
.Value = Evaluate(Replace("if(@="""","""",@*-1)", "@", .Address))
End With
With Range("A40001:A50000")
.Value = Evaluate(Replace("if(@="""","""",@*-1)", "@", .Address))
End With
'MsgBox ("xong")
End Sub
 
Upvote 0
Góp Vui

Sub Topspeed()
With Range("A20001:A30000")
.Value = Evaluate(Replace("if(@="""","""",@*-1)", "@", .Address))
End With
With Range("A40001:A50000")
.Value = Evaluate(Replace("if(@="""","""",@*-1)", "@", .Address))
End With
'MsgBox ("xong")
End Sub
Kỹ thuật còn kém.
Nếu chịu khó học, đã nhận ra ở bài #20, tôi giới thiệu 2 kiểu sử dụng Evaluate chứ không phải 1.
 
Upvote 0
Web KT

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

Back
Top Bottom