Làm sao để đổi chỗ 2 cột

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

garo

Thành viên mới
Tham gia
6/4/08
Bài viết
13
Được thích
0
Trong excel có lệnh nào để đổi chỗ 2 cột cho nhau nhanh nhất ko ạ? Ko chơi kiểu bôi cột này và kéo sang bên cạnh cột kia vì em cần ghi macro, nếu kéo thả thế thì sẽ là địa chỉ tuyệt đối... Em đã thử cách là bôi vùng dữ liệu cần đổi chỗ, chọn data/sort chọn left to right nhưng cách này ko ổn lắm vì dữ liệu ko thống nhất. Có cách nào khác ko hả các bác?
 
Nếu mảco thì dễ mà:

Cách chuối là chép 1 cột đến cột 255 (cột này ít ai xài tới);
Chép cột còn lại vô cột đầu;
Cuối cùng chép từ cột 255 về cột kia;
Việc này có thể nhờ bộ ghi macro! --=----=----=--
 
Move Columns

Trong excel có lệnh nào để đổi chỗ 2 cột cho nhau nhanh nhất ko ạ? Ko chơi kiểu bôi cột này và kéo sang bên cạnh cột kia vì em cần ghi macro, nếu kéo thả thế thì sẽ là địa chỉ tuyệt đối... Em đã thử cách là bôi vùng dữ liệu cần đổi chỗ, chọn data/sort chọn left to right nhưng cách này ko ổn lắm vì dữ liệu ko thống nhất. Có cách nào khác ko hả các bác?

Bác move bình thường nó vẫn giữ nguyên địa chỉ tương đối (tham chiếu công thức mà), em vừa test rồi.
 
Trong excel có lệnh nào để đổi chỗ 2 cột cho nhau nhanh nhất ko ạ? Ko chơi kiểu bôi cột này và kéo sang bên cạnh cột kia vì em cần ghi macro, nếu kéo thả thế thì sẽ là địa chỉ tuyệt đối... Em đã thử cách là bôi vùng dữ liệu cần đổi chỗ, chọn data/sort chọn left to right nhưng cách này ko ổn lắm vì dữ liệu ko thống nhất. Có cách nào khác ko hả các bác?
Bạn dùng thử code sau
PHP:
Option Explicit
Sub DoiCot() 'doi cot a <-> c
Dim i As Integer
Dim Gt1, Gt2
For i = 1 To Range("a1000").End(xlUp)
    Gt1 = Range("a" & i)
    Gt2 = Range("c" & i)
    Range("a" & i) = Gt2
    Range("C" & i) = Gt1
Next

End Sub
 
Cách gõ code ko khả thi vì nó mất nhiều thời gian quá mà em cần nhanh nhất. Giá mà có cách nào bôi đen 2 cột đó nhấn vào một lệnh nào đó nó tự đổi chỗ 2 cột cho nhau thì tốt quá T_T
 
Chỉ có cách của bạn SA_QD có vẻ hiệu quả khi bạn dùng marco thôi.
 
Đổi cả cột thì chọn luôn cả cột mà cut (tránh không bị mất công thức các cell khác liên kết với cột cần thay đổi), sau đó dán chèn sang vị trí cần thiết là xong.

Ví dụ: đổi vị trí giữa cột B và cột D
Chọn cột B, cut, chọn cột D, Insert cut Cells
Chọn cột D, cut, chọn cột B, Insert cut Cells

Bạn ghi nên ghi macro theo cách này sẽ đơn giản hơn.
 
Có lẽ chỉnh lại Code của ThuNghi xíu!

PHP:
Option Explicit
Sub DoiCot() 'doi cot a <-> c'
Dim i As Integer
Dim Gt1, Gt2
For i = 1 To Range("a1000").End(xlUp)
    Gt1 = Range("a" & i):     Gt2 = Range("c" & i)
    Range("a" & i) = Gt2:      Range("C" & i) = Gt1
Next
End Sub
PHP:
Option Explicit
Sub DoiCot() 'doi cot I <-> J'
Dim Temp, iJ As Long, lRow As Long

lRow = [i65432].End(xlUp).Row
If lRow < [j65432].End(xlUp).Row Then lRow = [j65432].End(xlUp).Row

For iJ = 1 To lRow
    Temp = Range("i" & iJ)
    Range("i" & iJ) = Range("j" & iJ)
    Range("j" & iJ) = Temp
Next

End Sub
 
Thích thì chìu!!

Cách gõ code ko khả thi vì nó mất nhiều thời gian quá mà em cần nhanh nhất. Giá mà có cách nào bôi đen 2 cột đó nhấn vào một lệnh nào đó nó tự đổi chỗ 2 cột cho nhau thì tốt quá T_T
Đọc kỹ 'Hướng dẫn sử dụng' trước khi dùng:

* Bạn chép macro này vô CS VBE;
* Gán cho nó tổ hợp phím, VD {CTRL}+{SHIFT}+C;
Trước khi cho macro chạy, bạn dùng chuột chọn 1 từ 2 cột mà bạn muốn chuyển đổi qua lại;
* Bấm tổ hợp phím nóng iêu thích của bạn nêu trên;
* Khi xuất hiện CS hỏi bạn cái gì đó; bạn dùng chuột bấm lên 1 ô bất kỳ của cột còn lại

Chúc bạn thành công trong công việc

PHP:
Option Explicit
Sub DoiCot()
 Dim rCol As Range, tRng As Range
 
 Set tRng = Range("IU1"):            Selection.Copy Destination:=tRng
 Set rCol = Application.InputBox("HAY CHON O CÓ COT CAN DOI:", Type:=8)
 rCol.EntireColumn.Copy Destination:=Selection.Cells(1, 1)
 tRng.EntireColumn.Copy Destination:=Cells(1, rCol.Column)
 tRng.EntireColumn.Delete
 
End Sub
 
BẠN DÙNG CODE NÀY THỬ , NHỚ SỬA TÊN CỘT CHO PHÙ HỢP
'MACRO HÓAN ĐỔI CỘT A<--->B
Sub Doicot()
Columns("B:B").Select
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
End Sub

CÁCH KHÔNG DÙNG MACRO
VÍ DỤ BẠN MUỐN ĐỔI CỘT A VÀ D VỚI NHAU
BẠN CHỌN CỘT D,NHẤN GiỮ PHÍM Shift,RÊ CHUỘT ĐẾNLẰN RANH GIỮA CỘT C VÀ D,
ĐẾN LÚC THẤY MỦI TÊN 4 CHIỀU THÌ KÉO ĐẾN CỘT A VÀ NHẢ CHUỘT
 
Lần chỉnh sửa cuối:
Có thể mở rọng bài toán này không?

Ví dụ mình muốn dời (n) cột từ cột thứ (i) nào đó đến cột thứ (j) nào đó thì Code sẽ như thế nào, nhỉ?!
 
Dòi chuyển một số trường sang nơi mới

PHP:
Sub MoveNCols()
 Dim rCol As Range, tRng As Range
 Dim bCol As Byte
  
 If [iV1].End(xlToLeft).Column > 199 Then Exit Sub
 Set tRng = Selection:                      If tRng Is Nothing Then Exit Sub
 bCol = tRng.Columns.Count:                 If bCol > 50 Then Exit Sub
 Set rCol = Application.InputBox("CHON VI TRI CAN CHUYEN TOI:", Type:=8)
 If rCol Is Nothing Then Exit Sub
 tRng.EntireColumn.Copy Destination:=Cells(1, 200)
 tRng.EntireColumn.Delete:                  Set tRng = Nothing
  
 rCol.Resize(1, bCol).EntireColumn.Insert Shift:=xlToRight
  
 Cells(1, 200).Resize(1, bCol).EntireColumn.Copy _
    Destination:=rCol.Offset(, -bCol)
 Cells(1, 200).Resize(1, bCol).EntireColumn.Clear
 
End Sub
 
Xếp các trường theo 1 trật tự cho trước

PHP:
Option Explicit
Sub MoveFields()
 Dim Rng As Range:                                      Dim StrC As String
 Const sChuan = "Agent Charge" & "/" & "Charge" & "/" & "Comm" & "/" & "CustDiscVAL" _
    & "/" & "CustID" & "/" & "Discount" & "/" & "Fare" & "/" & "FTKT" & "/" & "NetToAL" _
    & "/" & "Qty" & "/" & "RCPID" & "/" & "RCPNo" & "/" & "RecID" & "/" & "SRV" & _
    "/" & "Tax" & "/" & "TKTNo" & "/GPE.COM"
 Dim bSoTrg As Byte, bJ As Byte, bVtr As Byte, bW As Byte
 
 Sheets("TKT1").Select:                                 StrC = sChuan
 Set Rng = Range([a1], [iV1].End(xlToLeft)):            bSoTrg = Rng.Cells.Count
 Application.ScreenUpdating = False:                    Set Rng = Nothing
 For bJ = 1 To bSoTrg
    bVtr = InStr(1, StrC, "/")
    If Left(StrC, bVtr - 1) <> Cells(1, bJ) Then
        For bW = bJ To bSoTrg
            If Cells(1, bW) = Left(StrC, bVtr - 1) Then
                Chuyen1Cot Cells(1, bW), Cells(1, bJ)
            End If
        Next bW
    End If
    StrC = Mid(StrC, bVtr + 1, Len(StrC))
 Next bJ
 
End Sub

Mã:
[B]Sub Chuyen1Cot(SCol As Range, DesCol As Range)[/B]
 On Error GoTo LoiSub
 Dim tRng As Range
  
 Set tRng = [IU1]:            SCol.EntireColumn.Copy Destination:=tRng
 SCol.EntireColumn.Delete
 DesCol.EntireColumn.Insert Shift:=xlToRight
 [IU1].EntireColumn.Copy Destination:=DesCol.Offset(, -1)
 [IU1].EntireColumn.Delete
ErrSub:                 Exit Sub
LoiSub:
    MsgBox Error, , Err:            GoTo ErrSub
[B]End Sub[/B]
 
Đổi dữ liệu hai ô cùng cột cho nhau

[Highlight]Các anh chị ơi giúp em giải quyết vấn đề này với
Làm sao để khi bấm A1 và A6 thì nó đổi dữ liệu thô(không chứa công thức) từ ô A1 này sang ô A6 kia trong cùng một cột: Ví dụ khi bấm vào ô (A1=bấm 1) rồi bấm vào ô (A6=bấm 2) thì dữ liệu hai ô này đổi chỗ cho nhau (dũ liệu ko có công thức) đuọc kết quả là A1=bấm 2 còn A6=bấm 1
em cảm ơn[/ highlight]
 

File đính kèm

Lần chỉnh sửa cuối:
CÁCH KHÔNG DÙNG MACRO
VÍ DỤ BẠN MUỐN ĐỔI CỘT A VÀ D VỚI NHAU
BẠN CHỌN CỘT D,NHẤN GiỮ PHÍM Shift,RÊ CHUỘT ĐẾNLẰN RANH GIỮA CỘT C VÀ D,
ĐẾN LÚC THẤY MỦI TÊN 4 CHIỀU THÌ KÉO ĐẾN CỘT A VÀ NHẢ CHUỘT

Cảm ơn bạn, dùng cách kéo thả này có thể chuyển được nhiều cột một lúc: bôi đen các cột rồi kéo, thả !
 
Web KT

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

Back
Top Bottom