Hỏi về hoán đổi vị trí dãy ô? (1 người xem)

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

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
Chào các a(c) GPE, e có dữ liệu cột B và cột C là chiều rộng và chiều dài, như vậy giờ e muốn hoán đổi vị trí chiều rộng cho vị trí chiều dài và ngược lại, hoán đổi vị trí chiều dài cho vị trí chiều rộng.
Ví dụ như hình:
View attachment 124247
Theo hình thì e chỉ muốn hoán đổi vị trí vùng B3:B23 sang vùng C3:C23 và ngược lại.
Chân thành cảm ơn..!!
 
Cái này dễ mà.
Bạn có thể thay J3:J23 là 1 vùng nào đó trống là được

Sub Doivitri()
Range("B3:B23").Select
Selection.Cut
Range("J3:J23").Select
ActiveSheet.Paste
Range("C3:C23").Select
Selection.Cut
Range("B3:B23").Select
ActiveSheet.Paste
Range("J3:J23").Select
Selection.Cut
Range("C3:C23").Select
ActiveSheet.Paste
End Sub
 
Upvote 0
Chào các a(c) GPE, e có dữ liệu cột B và cột C là chiều rộng và chiều dài, như vậy giờ e muốn hoán đổi vị trí chiều rộng cho vị trí chiều dài và ngược lại, hoán đổi vị trí chiều dài cho vị trí chiều rộng.
Ví dụ như hình:
View attachment 124247
Theo hình thì e chỉ muốn hoán đổi vị trí vùng B3:B23 sang vùng C3:C23 và ngược lại.
Chân thành cảm ơn..!!

Dùng tạm cái này có lẽ là được
 

File đính kèm

Upvote 0
có thể nào ko cần cột trung gian mà vẫn có thể hoán đổi vị trí đc ko?
Nếu bạn không muốn dùng cột trung gian thì đưa 2 giá trị đó vào mảng. Sau đó dán nó xuống theo nhu cầu của mình. Bạn có thể tham khảo thử cách này sao
Mã:
Sub GPE_HV()
Dim RNG1(), RNG2()
With Sheet1
    RNG1 = .Range([B]"[COLOR=#ff0000][U]C5:C7[/U][/COLOR]"[/B]).Value2
    RNG2 = .Range([U][B][COLOR=#ff0000]"D5:D7[/COLOR]"[/B][/U]).Value2
    .Range("C5").Resize(UBound(RNG1, 1), 1).Value = RNG2
    .Range("d5").Resize(UBound(RNG2, 1), 1).Value = RNG1
End With
End Sub

trong đó 2 vùng màu đỏ trên là vùng bạn muốn hoán đổi !
 
Upvote 0
Nếu bạn không muốn dùng cột trung gian thì đưa 2 giá trị đó vào mảng. Sau đó dán nó xuống theo nhu cầu của mình. Bạn có thể tham khảo thử cách này sao
Mã:
Sub GPE_HV()
Dim RNG1(), RNG2()
With Sheet1
    RNG1 = .Range([B]"C5:C7"[/B]).Value2
    RNG2 = .Range([B]"D5:D7"[/B]).Value2
    .Range("C5").Resize(UBound(RNG1, 1), 1).Value = RNG2
    .Range("d5").Resize(UBound(RNG2, 1), 1).Value = RNG1
End With
End Sub

trong đó 2 vùng tô đậm trên là vùng bạn muốn hoán đổi !
Ý tưởng của mình cũng giống bạn, trót làm rồi gửi lên để bạn tham khảo!
Mã:
Public Sub doivitri()
Dim arr1(), arr2()
With Sheet1
arr1 = .Range("B2:B" & .Range("B65500").End(xlUp).Row)
arr2 = .Range("C2:C" & .Range("C65500").End(xlUp).Row)
.[B2].Resize(UBound(arr1, 1), 1).Value = arr2: .[C2].Resize(UBound(arr1, 1), 1).Value = arr1
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ý tưởng của mình cũng giống bạn, trót làm rồi gửi lên để bạn tham khảo!
Mã:
Public Sub doivitri()
Dim arr1(), arr2()
With Sheet1
arr1 = .Range("B2:B" & .Range("B65500").End(xlUp).Row)
arr2 = .Range("C2:C" & .Range("C65500").End(xlUp).Row)
.[B2].Resize(UBound(arr1, 1), 1).Value = arr2: .[C2].Resize(UBound(arr1, 1), 1).Value = arr1
End With
End Sub

Code này sai rồi. Nếu hai cột có số ô dữ liệu khác nhau thì nó hoán đổi không đúng.

Vả lại đề bài này có chỗ phức tạp, chủ thớt chưa nắm rõ vấn đề:

1. Hoán đổi vị trí tức là sao? Dời cột này sang cột kia hay là chỉ đổi giá trị?

2. Nếu chỉ đổi giá trị thì nếu hai cột không dài bằng nhau thì đổi phần bằng nhau hay đổi hoàn toàn?

Lưu ý là đổi vị trí cột khác với đổi giá trị. Nếu hai cột này có tham chiếu từ cột thứ ba.
 
Upvote 0
Code này sai rồi. Nếu hai cột có số ô dữ liệu khác nhau thì nó hoán đổi không đúng.

Vả lại đề bài này có chỗ phức tạp, chủ thớt chưa nắm rõ vấn đề:

1. Hoán đổi vị trí tức là sao? Dời cột này sang cột kia hay là chỉ đổi giá trị?

2. Nếu chỉ đổi giá trị thì nếu hai cột không dài bằng nhau thì đổi phần bằng nhau hay đổi hoàn toàn?

Lưu ý là đổi vị trí cột khác với đổi giá trị. Nếu hai cột này có tham chiếu từ cột thứ ba.
Tác giả nói rõ 2 cột là chiều dài và chiều rộng mà, theo em nghĩ thì độ dài 2 cột luôn bằng nhau vì ứng với mỗi chiều dài sẽ có 1 chiều rộng.
 
Upvote 0
Đổi vị trí cột:
- bấm chọn cột B
- Cut
- bấm chọn cột D
- Click phải, Insert cut cells
- hết
Làm nhanh hơn:
- Chọn cột B
- Đặt chuột ngay giữa B và C
- Ấn và giữ shift
- Kéo qua giữa C và D
- Thả ra
- Hết

=== bổ sung ===
Đừng có nói với tôi là chỉ muốn chuyển một số ô chứ không cả cột nhé. Động não một chút là ra liền.
 
Lần chỉnh sửa cuối:
Upvote 0
Tác giả nói rõ 2 cột là chiều dài và chiều rộng mà, theo em nghĩ thì độ dài 2 cột luôn bằng nhau vì ứng với mỗi chiều dài sẽ có 1 chiều rộng.
Nếu 2 cột dài bằng nhau thì cần gì UBound1 với UBound2? Vả lại, nếu 2 cột nằm sát nhau thì tôi sẽ dùng chuột phải kéo thả, hoặc dùng shift chuột trái kéo thả như anh VetMini.
Còn nếu viết VBA thì record macro quá trình cut - insert Cut Cells sẽ ra:

PHP:
Columns("B:B").Cut
Columns("D:D").Insert
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom