[CHIA SẺ SNIPPET VBA] Hoán đổi giá trị hai ô liền kề (2 người xem)

  • Thread starter Thread starter tor
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

tor

Thành viên chính thức
Tham gia
4/9/14
Bài viết
66
Được thích
67
Chào các thành viên GPE,

Do nhu cầu cá nhân nên mình có viết mấy đoạn code làm công việc hoán đổi giá trị của 2 ô liền kề.

Xin được chia sẻ ở đây, mong mọi người góp ý để có thể phát triển thêm.

Mã:
[B]'Hoán đổi [COLOR=#b22222]2 ô được chọn[/COLOR][/B]
Sub v_swapTwoCells() 'Ctrl+Shift+W
    'http://superuser.com/questions/257516
    If Selection.Count <> 2 Then Exit Sub
    '
    Set trange = Selection
    '
    temp = trange(1)
    trange(1) = trange (2 )
    trange(2) = temp
End Sub

Mã:
[B]'Hoán đổi [COLOR=#0000cd]1 ô được chọn[/COLOR] với ô phía trên[/B]
Sub v_swapCellUp() 'Ctrl+Shift+A
    If Selection.Count <> 1 Then Exit Sub
    '
    Set trange = Selection
    '
    If trange.Row = 1 Then Exit Sub
    '
    temp = trange(1)
    trange(1) = trange.Offset (-1 , 0)
    trange.Offset(-1, 0) = temp
    '
    trange.Offset(-1, 0). Select
End Sub

Mã:
[B]'Hoán đổi [COLOR=#0000cd]1 ô được chọn[/COLOR] với ô phía dưới[/B]
Sub v_swapCellDown() 'Ctrl+Shift+B
    If Selection.Count <> 1 Then Exit Sub
    '
    Set trange = Selection
    '
    If trange.Row = Rows.Count Then Exit Sub
    '
    temp = trange(1)
    trange(1) = trange.Offset (1 , 0)
    trange.Offset(1, 0) = temp
    '
    trange.Offset(1, 0). Select
End Sub

Mã:
[B]'Hoán đổi [COLOR=#0000cd]1 ô được chọn[/COLOR] với ô bên trái[/B]
Sub v_swapCellLeft() 'Ctrl+Shift+Z
    If Selection.Count <> 1 Then Exit Sub
    '
    Set trange = Selection
    '
    If trange.Column = 1 Then Exit Sub
    '
    temp = trange(1)
    trange(1) = trange.Offset (0 , -1)
    trange.Offset(0, - 1) = temp
    '
    trange.Offset(0, - 1).Select
End Sub

Mã:
[B]'Hoán đổi [COLOR=#0000cd]1 ô được chọn[/COLOR] với ô bên phải[/B]
Sub v_swapCellRight() 'Ctrl+Shift+Y
    If Selection.Count <> 1 Then Exit Sub
    '
    Set trange = Selection
    '
    If trange.Column = Columns.Count Then Exit Sub
    '
    temp = trange(1)
    trange(1) = trange.Offset (0 , 1)
    trange.Offset(0, 1) = temp
    '
    trange.Offset(0, 1). Select
End Sub

TAG: swap, exchange, order, reorder, đổi, hoán đổi, tráo đổi, liền kề, liên tiếp nhau, kề nhau
 
Lần chỉnh sửa cuối:
Tốt.

Chỉ góp ý với lệnh

IF selection.count <> 1 then
exit sub
end if

thành
IF selection.count <> 1 then exit sub
 
Upvote 0
góp thêm cho vui
Mã:
Sub hoandoi()
Dim val As Byte, cur_v, L_V, R_V, U_V, d_V
On Error Resume Next
cur_v = Selection.Value
val = InputBox("Pls choose no" & Chr(10) & "1.Change Position with Left Cell" & Chr(10) & "2.Change Position with Right Cell" & Chr(10) & "3.Change Position with Upper Cell" & Chr(10) & "4.Change Position with Lower Cell", "Pls choose Number 1~4")
Select Case val
    Case 1
        L_V = Selection.Offset(, -1).Value
        If Err Then MsgBox "Your Active Cell is The First column": Exit Sub
        Selection.Value = L_V
        Selection.Offset(, -1).Value = cur_v
    Case 2
        R_V = Selection.Offset(, 1)
        If Err Then MsgBox "Your Active Cell is The Lasted column": Exit Sub
        Selection.Value = R_V
        Selection.Offset(, 1).Value = cur_v
    Case 3
        U_V = Selection.Offset(-1).Value
        If Err Then MsgBox "Your Active Cell is The First Row": Exit Sub
        Selection.Value = U_V
        Selection.Offset(-1).Value = cur_v
    Case 4
        d_V = Selection.Offset(1)
         If Err Then MsgBox "Your Active Cell is The Lasted Row": Exit Sub
        Selection.Value = d_V
        Selection.Offset(1).Value = cur_v
    Case Else
        MsgBox "pls choose form 1 to 4": Exit Sub
End Select
    MsgBox " your have changed the value of two cell "
On Error Resume Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thuật toán hoán vị là kiến thức cơ bản nhất của lập trình nên kô có gì mới. Sợ nhất ai copy về nghịch và chạy cái Selection --=0

Mà lại còn up sai chuyên mục nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
1. Mà lại còn up sai chuyên mục nữa.
Nhờ Mod chuyển dùm vào đúng Chuyên mục.
Nhân tiện, nhờ Mod chuyển dùm "[CHIA SẺ SNIPPET VBA] Mở đến 1 trang PDF nhất định bằng phần mềm Foxit Reader" về đúng Chuyên mục luôn.
Mong Mod, các thành viên thông cảm và xin cảm ơn.

====================================

2. Thuật toán hoán vị là kiến thức cơ bản nhất của lập trình nên kô có gì mới.
Trước khi tạo topic em có tìm kiếm đấy ạh, nhưng chưa thấy topic cần tìm.
Về khoản VBA em là tay mơ mà Thầy /-*+/. (Còn về lập trình [Windows Forms] bằng C#, em chỉ viết được vài phần mềm tốt nhất thế giới thôi, có chia sẻ trên GPE đấy ạh.)
Có điều em không cam chịu số phận, trước khi hỏi thì phải tự làm /-*+/.
Mà code của em cũng chạy được đấy chứ, em đang sử dụng nè.

====================================

3. Sợ nhất ai copy về nghịch và chạy cái Selection
Không biết Thầy đã đọc code chưa ạh?
Hay Thầy chỉ mới liếc qua tiêu đề bài viết /-*+/?
# Trên dòng đầu tiên của mỗi thủ tục em có chú thích mà.
# Thủ tục thứ 1 chọn số ô khác 2 sẽ không chạy; Không chơi được trong trường hợp 2 ô trộn thành 1 ô.
# Thủ tục thứ 2, 3, 4, 5 chọn số ô khác 1 sẽ không chạy.

====================================
P/S : Mong mọi người góp ý để có thể phát triển thêm.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom