Giúp đỡ hoán đổi vùng dữ liệu

Liên hệ QC

k2d_nh0k

Thành viên mới
Tham gia
12/10/15
Bài viết
17
Được thích
3
Chào mọi người !
Hiện tại em có file excel có các dòng dữ liệu. Em muốn khi dùng chuột khoanh 2 vùng dữ liệu thì dữ liệu tự hoán đổi với nhau.
Để hiểu rỏ hơn anh chị xem file đính kèm.
Nhờ anh chị GPE giúp đỡ ạ
Cảm ơn nhiều.
 

File đính kèm

  • HELP GPE.xlsx
    10.9 KB · Đọc: 3
Chào mọi người !
Hiện tại em có file excel có các dòng dữ liệu. Em muốn khi dùng chuột khoanh 2 vùng dữ liệu thì dữ liệu tự hoán đổi với nhau.
Để hiểu rỏ hơn anh chị xem file đính kèm.
Nhờ anh chị GPE giúp đỡ ạ
Cảm ơn nhiều.
sao bạn lập nhiều topic thế
 
Upvote 0
Cho biết khi làm tay thì bạn làm thế nào.
Chú ý: đầu câu thì viết hoa để người đọc dễ hiểu.
 
Upvote 0

File đính kèm

  • HELP GPE_HoanDoiVung_k2d_nh0k.xlsm
    18.5 KB · Đọc: 6
Upvote 0
cảm ơn anh đã giúp đỡ, a giúp thêm giùm e coppy thẳng hàng với lệch xéo với ạ.
anh xem file đính kèm.
Xem file mà chẳng biết bạn muốn gì. Phải có từ ngữ để mô tả chứ để cái mũi tên thẳng hàng, xéo thì hiểu chết liền.
 
Upvote 0
Xem file mà chẳng biết bạn muốn gì. Phải có từ ngữ để mô tả chứ để cái mũi tên thẳng hàng, xéo thì hiểu chết liền.
Không phải ý kiến của người hỏi là luốn phải làm theo. Có nhiều lúc người hỏi không đủ kiến thức để nhìn thấy những cách dễ hơn.
Dùng cách Select-Drag-and-Drop.
Select Range.
Kéo nó qua bên kia. Khi nhả chuột ra thì code tự động hoán đổi cái range đã select kia với một range cùng kích cỡ, có ô đầu tiên là nơi được dropped vào.

Drag-and-Drop không có event riêng của nó. Nhưng có lẽ bạn sẽ học được trò chơi thú vị là làm thế nào để thực hiện . Gợ ý: code cho ngọt thì hơi dài. Đủ xài ở bài này thì tương đối không khó.
 
Upvote 0
cảm ơn anh đã giúp đỡ, a giúp thêm giùm e coppy thẳng hàng với lệch xéo với ạ.
anh xem file đính kèm.
Thấy bài #9 gợi ý cũng thú vị, tôi làm thử (có thể code không hay vì khả năng có hạn) để chủ thớt tùy ý kéo thả.

Yêu cầu khi kéo thả để hoán đổi 2 vùng: Phải bấm CANCEL khi Excel cảnh báo ghi đè
 

File đính kèm

  • HELP GPE_HoanDoiVung2_k2d_nh0k.xlsm
    17.7 KB · Đọc: 6
Upvote 0
Thấy bài #9 gợi ý cũng thú vị, tôi làm thử (có thể code không hay vì khả năng có hạn) để chủ thớt tùy ý kéo thả.

Yêu cầu khi kéo thả để hoán đổi 2 vùng: Phải bấm CANCEL khi Excel cảnh báo ghi đè
Theo tôi hiểu thì code của bạn là chuyển dữ liệu 1 vùng sang chỗ khác, còn chủ thớt muốn hoán đổi 2 vùng với nhau. Nếu dùng code của bạn thì tôi nghĩ phải làm 3 bước: chọn và kéo A1:A9 sang vd. D1: D9 (mục đích để sau đó có cái nhập vào C1:C9) -> chọn và kéo C1:C9 sang A1:A9 -> chọn và kéo D1: D9 sang A1:A9.

Tôi chỉ ý kiến cho bạn thôi. Vấn đề của chủ thớt có thể giải quyết nhưng tôi không thích những kiểu hỏi bài như thế.

Em muốn khi dùng chuột khoanh 2 vùng dữ liệu thì dữ liệu tự hoán đổi với nhau
???

Người ta không nói rõ là họ muốn thao tác như thế nào. Vd.

1. Chọn A1:A9 -> giữ Ctrl và chọn tiếp C1:C9 -> nhấn phím tắt nào đấy thì thực hiện hoán đổi 2 vùng?

2. Nhấn phím tắt thì code sẽ hiển thị InputBox để chọn vùng 1 -> sẽ hiển thị InputBox để chọn vùng 2. Tiếp theo code hoán đổi 2 vùng?
 
Upvote 0
Theo tôi hiểu thì code của bạn là chuyển dữ liệu 1 vùng sang chỗ khác, còn chủ thớt muốn hoán đổi 2 vùng với nhau. Nếu dùng code của bạn thì tôi nghĩ phải làm 3 bước: chọn và kéo A1:A9 sang vd. D1: D9 (mục đích để sau đó có cái nhập vào C1:C9) -> chọn và kéo C1:C9 sang A1:A9 -> chọn và kéo D1: D9 sang A1:A9.

Tôi chỉ ý kiến cho bạn thôi. Vấn đề của chủ thớt có thể giải quyết nhưng tôi không thích những kiểu hỏi bài như thế.


???

Người ta không nói rõ là họ muốn thao tác như thế nào. Vd.

1. Chọn A1:A9 -> giữ Ctrl và chọn tiếp C1:C9 -> nhấn phím tắt nào đấy thì thực hiện hoán đổi 2 vùng?

2. Nhấn phím tắt thì code sẽ hiển thị InputBox để chọn vùng 1 -> sẽ hiển thị InputBox để chọn vùng 2. Tiếp theo code hoán đổi 2 vùng?
Việc tôi đang làm là chọn 1 vùng (nhiều dòng 1 cột), xong kéo thả sang vùng muốn hoán đổi thì 2 vùng sẽ hoán đổi với nhau.
 
Upvote 0
Việc tôi đang làm là chọn 1 vùng (nhiều dòng 1 cột), xong kéo thả sang vùng muốn hoán đổi thì 2 vùng sẽ hoán đổi với nhau.
Cảm ơn anh đã giúp đỡ. xin lỗi vì em mới hết covid nên phản hồi trể.
Code của a gần đúng ý muốn của e rồi. Của a là nhiều dòng 1 cột còn ý của e là nhiều dòng nhiều cột luôn ạ (không giới hạn số lượng cột và dòng được chọn ạ).
Bài đã được tự động gộp:

Theo tôi hiểu thì code của bạn là chuyển dữ liệu 1 vùng sang chỗ khác, còn chủ thớt muốn hoán đổi 2 vùng với nhau. Nếu dùng code của bạn thì tôi nghĩ phải làm 3 bước: chọn và kéo A1:A9 sang vd. D1: D9 (mục đích để sau đó có cái nhập vào C1:C9) -> chọn và kéo C1:C9 sang A1:A9 -> chọn và kéo D1: D9 sang A1:A9.

Tôi chỉ ý kiến cho bạn thôi. Vấn đề của chủ thớt có thể giải quyết nhưng tôi không thích những kiểu hỏi bài như thế.


???

Người ta không nói rõ là họ muốn thao tác như thế nào. Vd.

1. Chọn A1:A9 -> giữ Ctrl và chọn tiếp C1:C9 -> nhấn phím tắt nào đấy thì thực hiện hoán đổi 2 vùng?

2. Nhấn phím tắt thì code sẽ hiển thị InputBox để chọn vùng 1 -> sẽ hiển thị InputBox để chọn vùng 2. Tiếp theo code hoán đổi 2 vùng?
xin lỗi anh vì em mới tìm hiểu vba nên còn nhiều cái không biết, không biết diễn tả như thế nào cho dể hiểu.
ý của em giống như ý 1. khi dùng chuột chọn vùng A1:A9 sau đó nhấn chọn vùng C1:C9 thì 2 vùng sẻ hoán đổi với nhau. nhưng số lượng row và column không cố định ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Lô gic:
- Hai vùng muốn hoán chuyển nhau thì phải bằng cỡ nhau.
Suy ra:
- Nếu biết số cột và dòng của một vùng, vùng còn lại chỉ cần biết ô đầu tiên.
Thực hiện:
- Kéo chuột chọn A5:B10. Chọn tiếp M25.
- Code tự động biết cần hoán đổi A5:B10 với M25:N30

Thực tế:
Khi nào thì hai vùng cần hoán chuyển dữ liệu? Tôi suy nghĩ hoài mà không ra.
Một ngày ta làm công việc này mấy lần mà phải làm chuyện tự động? Nên nhớ là một khi Macro thay đổi bất cứ điều gì trên bảng tính thì đồng thừoi cái ngăn xếp "undo" cũng bị huỷ.

Cách làm thủ công:
1. tạo một window mới. Xếp nó song song với window hiện tại. Tạm gọi window cũ là W1, và window mới là W2
2. ở W2, cuộn nó lên tới vùng không có dữ liệu.
3. trở về W1, chọn vùng 1, kéo vào W2. Tạm gọi nó là V1. Chọn vùng 2, kéo vào W2, đặt song song với vùng 1. Tạm gọi nó là V2.
4. kiểm soát lại xem có ưng ý.
5. kéo V2 vào khoảng trống vùng 1 bên W1.
6. kéo V1 vào khoảng trống vùng 2 bên W1.
7. đóng W2.
8. hết
Thủ tục tuy dài nhưng rất chắc cú, có thể kiểm soát được, nhất là ở bước 4 trên, có cơ hội xem kỹ lại có sơ xuất hay không.
Và điều vượt trội hơn hẳn code VBA là bất cứ ở bước nào cũng có thể Ctr-Z để lui lại.
 
Upvote 0
Nhu cầu hoán đổi 2 vùng là có, dù không phổ biến. Tôi đã có code cho thớt, tuy không chắc chạy ổn. Nhưng trước tiên, tôi sẽ tìm lại và gửi 1 file để thớt biết về giải pháp của tác giả, rồi từ đó có suy nghĩ lại về yêu cầu của mình.

Chắc mai.
 
Upvote 0
xin lỗi anh vì em mới tìm hiểu vba nên còn nhiều cái không biết, không biết diễn tả như thế nào cho dể hiểu.
ý của em giống như ý 1. khi dùng chuột chọn vùng A1:A9 sau đó nhấn chọn vùng C1:C9 thì 2 vùng sẻ hoán đổi với nhau. nhưng số lượng row và column không cố định ạ.
Nếu cách chọn như tôi đã yêu cầu thì code ở dưới.

Lưu ý:
- Phải chọn ít nhất 2 vùng. Nếu chỉ chọn 1 vùng thì code không làm gi. Nếu chọn nhiều hơn 2 vùng thì code chỉ xét 2 vùng đầu tiên. Mỗi vùng có thể là 1 ô hoặc nhiều dòng nhiều ô.

- 2 vùng chọn không nhất thiết có độ lớn như nhau. Nếu vùng 2 nhỏ hơn / lớn hơn vùng 1 thì code sẽ tự phóng to / thu nhỏ vùng 2 sao cho có kích thước như vùng 1. Vì thế có thể sau khi chọn vùng 1 giữ Ctrl và click vào 1 ô đích (vùng 2 là 1 ô).

- Khi chạy code mà nhầm lẫn (sơ ý chọn nhầm các vùng dữ liệu) thì có thể đóng tập tin và không lưu lại thay đổi. Nhưng như thế thì mất hết những thay đổi trước đó mà chưa lưu lại. Vì thế mỗi khi chạy code thì code sẽ sao chép sheet hiện hành để đề phòng. Khi hài lòng thì mới xóa các sheet tạo bởi code. Nếu không muốn tạo sheet mới thì xóa
Mã:
, sh As Worksheet    ' xóa khai báo sh
...
Set sh = Selection.Parent
sh.Copy sh
sh.Activate

Trong VBE menu Insert -> Module -> dán vào Module1 code sau. Có thể đặt phím tắt: ở ngoài sheet -> thẻ Developer -> nhóm Code -> chọn Macros -> chọn hoan_doi -> nhấn nút Options -> gõ vd. t ở bên cạnh Ctrl.

Thao tác: chọn vùng 1 -> chọn vùng 2 -> nhấn phím tắt Ctrl + t.

Mã:
Sub hoan_doi()
Dim tmp, sh As Worksheet
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Selection.Areas.Count < 2 Then Exit Sub
    Set sh = Selection.Parent
    sh.Copy sh
    sh.Activate
    tmp = Selection.Areas(2).Resize(Selection.Areas(1).Rows.Count, Selection.Areas(1).Columns.Count).Value
    Selection.Areas(2).Resize(Selection.Areas(1).Rows.Count, Selection.Areas(1).Columns.Count).Value = Selection.Areas(1).Value
    Selection.Areas(1).Value = tmp
End Sub
 
Upvote 0
Bạn có thể nêu ví dụ?
Trừ loại dạng bảng tính lotto, hay dạng báo cáo ma.
Tôi thấy tụi Tây cũng hỏi về việc này nên mới nói nhu cầu là có. Từ câu trả lời trong 1 diễn đàn, tôi có tải về 1 file, sẽ gửi lên đây để mọi người tham khảo.

File kèm: Chọn vùng 1, chuột phải chọn From. Chọn vùng 2, chuột phải chọn To. Hai vùng sẽ đổi cho nhau
 

File đính kèm

  • Copy of swap cells_SuuTam.xlsm
    19.8 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
Tôi thấy tụi Tây cũng hỏi về việc này nên mới nói nhu cầu là có. Từ câu trả lời trong 1 diễn đàn, tôi có tải về 1 file, sẽ gửi lên đây để mọi người tham khảo.
...
Tụi Tây = tụi nào vậy?
Tôi chỉ nói là nghĩ không ra. Vì theo luật bảng tính chuẩn, các cột đâu có thể đổi nhau được. Chứ cái chuyện trái luật cũng có thể xảy ra.
Bạn lái xe bên trái là phạm luật đi đường. Nhưng xe cứu thương thì vẫn được phép. Tôi chỉ hỏi trường hợp cứu thương ấy ra sao mà phải dùng macro thôi.

Ở bài #14, tôi nêu ra cách làm thủ công để chứng minh rằng macro chỉ tiết kiệm cho bạn tối đa là 20 giây. Kéo một cái rờ mọt (macro) tổ bố (bắt sự kiện) để làm chuyện này là không đáng. Thành phố mà xe chữa lửa phải chạy cả chục lần một ngày thì thành phố phải xây lại, mở thêm chi nhánh cứu hoả là sai lầm.
 
Upvote 0
Tụi Tây = tụi nào vậy?
Tôi chỉ nói là nghĩ không ra. Vì theo luật bảng tính chuẩn, các cột đâu có thể đổi nhau được. Chứ cái chuyện trái luật cũng có thể xảy ra.
Bạn lái xe bên trái là phạm luật đi đường. Nhưng xe cứu thương thì vẫn được phép. Tôi chỉ hỏi trường hợp cứu thương ấy ra sao mà phải dùng macro thôi.

Ở bài #14, tôi nêu ra cách làm thủ công để chứng minh rằng macro chỉ tiết kiệm cho bạn tối đa là 20 giây. Kéo một cái rờ mọt (macro) tổ bố (bắt sự kiện) để làm chuyện này là không đáng. Thành phố mà xe chữa lửa phải chạy cả chục lần một ngày thì thành phố phải xây lại, mở thêm chi nhánh cứu hoả là sai lầm.
Tôi đâu có biết Tây nào là Tây nào. Chỉ thấy họ hỏi đáp bằng tiếng Anh thì nói vậy thôi. Bằng chứng là cái file tôi lôi về đấy.
 
Upvote 0
Web KT

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

Back
Top Bottom