VBA hoán đổi vị trí các cột tăng dần . (1 người xem)

Liên hệ QC

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

nggiahoang

Thành viên hoạt động
Tham gia
18/5/13
Bài viết
167
Được thích
108
Thay đổi vị trí các cột của danh sách dữ liệu theo chiều tăng dần , sau mỗi lần nhấn nút chạy code .

Em gởi lên diễn đàn Giải Pháp Excel 1 danh sách với ít dòng và cột để nhờ ACE viết cho đoạn code , thực hiện việc hoán đổi chỗ của các cột theo điều kiện tăng dần từng cột từ sau ra trước theo chỉ định.
Chân thành cám ơn !
 

File đính kèm

Nếu thế thì phải hiểu
RUN CODE LẦN 2: Cột Hóa chuyển vào chỗ cột Toán
là cột Hóa chuyển vào F6:F16, vì sau lần 1 thì cột Toán ở F6:F16 cơ mà?
Bây giờ bạn mới nóí:
...
Tức cứ mỗi lần bấm thì cột tiếp theo LUÔN nhẩy vào E6:E16. Vào E6:E16 khác với "vào chỗ cột Toán".
Tôi cũng "bị" hiểu như anh siwtom, nên tôi cứ lớn tiếng rằng "dịch chuyển qua phải 1 cột", vì cột Toán sau khi chạy code thì đã không còn ở E nữa rồi. Cứ mỗi lần chạy thì thằng "Toán" lại bị chiếm chỗ, cứ thế Toán lại phải chạy đến khi "đào ngũ".

Cuối cùng tôi chạy code theo kiểu tác giả làm bằng tay trong chú thích trong file.

Tôi cũng không gọi là dịch chuyển, đảo, hoán đổi, hay move nữa. Tôi gọi là sắp xếp lại.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thử phát biểu như sau:

"Tôi có 7 bộ môn trong 7 cột từ E tới K. Thứ tự ban đầu là: Toán, Lý, Hóa, Sinh, Tin, Văn, NN. Tôi muốn sau mỗi lần nhấn nút thì trong các cột từ E tới K các bộ môn sẽ có thứ tự như sau:
Mã:
LẦN 1: Lý, Toán, Hóa, Sinh, Tin, Văn, NN
LẦN 2: Hóa, Lý, Toán, Sinh, Tin, Văn, NN
LẦN 3: Sinh, Hóa, Lý, Toán, Tin, Văn, NN
LẦN 4: Tin, Sinh, Hóa, Lý, Toán, Văn, NN
LẦN 5: Văn, Tin, Sinh, Hóa, Lý, Toán, NN
LẦN 6: NN, Văn, Tin, Sinh, Hóa, Lý, Toán
LẦN 7: trở về thứ tự ban đầu

cứ như thế lặp lại"

Tôi phát biểu như thế có đúng không? Nếu đúng thì lần sau thay vì phát biểu "nhẩy" với "hoán vi" hoặc một loạt mũi tên hay "Tiểu đoàn 307" thì cứ bắt chước như thế. Tức liệt kê ra các kết quả cần có. Thế thôi.

Mã:
Sub DaoChieu()
Static index As Long
Static source
Dim rng As Range, Arr, off As Long, width As Long
    If IsEmpty(source) Then source = Range("E6:K16").Value
    index = (index + 1) Mod 7
    If index = 0 Then
        Range("E6:K16").Value = source
    Else
        Set rng = Range("E6:E16").Resize(, index)
        Arr = Range("E6:E16").Offset(, index).Value
        rng.Copy Range("F6")
        Range("E6:E16").Value = Arr
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thử phát biểu như sau:

"Tôi có 7 bộ môn trong 7 cột từ E tới K. Thứ tự ban đầu là: Toán, Lý, Hóa, Sinh, Tin, Văn, NN. Tôi muốn sau mỗi lần nhấn nút thì trong các cột từ E tới K các bộ môn sẽ có thứ tự như sau:
Mã:
LẦN 1: Lý, Toán, Hóa, Sinh, Tin, Văn, NN
LẦN 2: Hóa, Lý, Toán, Sinh, Tin, Văn, NN
LẦN 3: Sinh, Hóa, Lý, Toán, Tin, Văn, NN
LẦN 4: Tin, Sinh, Hóa, Lý, Toán, Văn, NN
LẦN 5: Văn, Tin, Sinh, Hóa, Lý, Toán, NN
LẦN 6: NN, Văn, Tin, Sinh, Hóa, Lý, Toán
LẦN 7: trở về thứ tự ban đầu

cứ như thế lặp lại"

Tôi phát biểu như thế có đúng không? Nếu đúng thì lần sau thay vì phát biểu "nhẩy" với "hoán vi" hoặc một loạt mũi tên hay "Tiểu đoàn 307" thì cứ bắt chước như thế. Tức liệt kê ra các kết quả cần có. Thế thôi.

Mã:
Sub DaoChieu()
Static index As Long
Static source
Dim rng As Range, Arr, off As Long, width As Long
    If IsEmpty(source) Then source = Range("E6:K16").Value
    index = (index + 1) Mod 7
    If index = 0 Then
        Range("E6:K16").Value = source
    Else
        Set rng = Range("E6:E16").Resize(, index)
        Arr = Range("E6:E16").Offset(, index).Value
        rng.Copy Range("F6")
        Range("E6:E16").Value = Arr
    End If
End Sub


Vâng ! em xin rút kinh nghiệm cho những lần sau .

E cám ơn các bác đã vào giúp e ! nhất là bác Lê Duy Thương đã đáp ứng đúng và đầy đủ vấn đề em yêu cầu và đặc biệt nhất là thầy Siwtom , thầy Ptm người " phát pháo" đầu tiên sau cùng cho đề tài này , không có 2 thầy thì có lẽ em còn phải chờ dài cổ ấy chứ .
Người ta thường nói " được voi đòi tiên " , trước khi có voi của bác LDT để cỡi thì em đã gặp tiên rồi ( code của thầy Siwtom, thầy Ptm ) ,em sẽ vận dụng vào những trường hợp khác như gợi ý của bác Chanh _TQ.
Chân thành cám ơn tất cả !
 
Upvote 0
Tôi thử phát biểu như sau:

"Tôi có 7 bộ môn trong 7 cột từ E tới K. Thứ tự ban đầu là: Toán, Lý, Hóa, Sinh, Tin, Văn, NN. Tôi muốn sau mỗi lần nhấn nút thì trong các cột từ E tới K các bộ môn sẽ có thứ tự như sau:
Mã:
LẦN 1: Lý, Toán, Hóa, Sinh, Tin, Văn, NN
LẦN 2: Hóa, Lý, Toán, Sinh, Tin, Văn, NN
LẦN 3: Sinh, Hóa, Lý, Toán, Tin, Văn, NN
LẦN 4: Tin, Sinh, Hóa, Lý, Toán, Văn, NN
LẦN 5: Văn, Tin, Sinh, Hóa, Lý, Toán, NN
LẦN 6: NN, Văn, Tin, Sinh, Hóa, Lý, Toán
LẦN 7: trở về thứ tự ban đầu
cứ như thế lặp lại"
Tôi phát biểu như thế có đúng không? Nếu đúng thì lần sau thay vì phát biểu "nhẩy" với "hoán vi" hoặc một loạt mũi tên hay "Tiểu đoàn 307" thì cứ bắt chước như thế. Tức liệt kê ra các kết quả cần có. Thế thôi.

Thế này thì cũng nguy bác siwtom ah,

nếu code tehees, trước khi ghi file lại thì phải đưa về trạng thái đúng thứ tự Toán, Lý, Hóa, Sinh, Tin, Văn, NN -- vì nếu không thì sẽ khi bấm lần 7 thì nó CHỈ trở về trang thái file khi mở mà thôi (tức là không trở lại đúng thứ tự trên)

không rõ có phải không (đoán đại theo code, chưa test)
 
Upvote 0
Thế này thì cũng nguy bác siwtom ah,

nếu code tehees, trước khi ghi file lại thì phải đưa về trạng thái đúng thứ tự Toán, Lý, Hóa, Sinh, Tin, Văn, NN -- vì nếu không thì sẽ khi bấm lần 7 thì nó CHỈ trở về trang thái file khi mở mà thôi (tức là không trở lại đúng thứ tự trên)

không rõ có phải không (đoán đại theo code, chưa test)

Tôi cũng nghĩ tới điều đó nhưng tôi không chơi trò "thông tin nhỏ giọt". Cũng có thể người ta muốn:
1. Khi mở tập tin thì các cột phải theo thứ tự Toán, Lý, Hóa, Sinh, Tin, Văn, NN
Lúc này chơi bình thường

2. Khi mở tập tin thì các cột có thứ tự như lúc ghi lần cuối. vd. Lý, Toán, Hóa, Sinh, Tin, Văn, NN
nhưng nếu nhấn Run code thì sẽ dịch chuyển thành Hóa, Lý, Toán, Sinh, Tin, Văn, NN, tức "chơi" tiếp lần trước - cột Toán luôn là cột đi dần về cuối rồi nhẩy bước dài về đầu

3. Khi mở tập tin thì các cột có thứ tự như lúc ghi lần cuối. vd. Lý, Toán, Hóa, Sinh, Tin, Văn, NN
Cột nào ở đầu thì sẽ có vai trò như cột Toán, tức cột đó sẽ dần về cuối và nhấn lần thứ bẩy thì cột đó (vd. Lý) lại nhẩy về đầu

Người ta không nói ra thì người ta "thiệt thòi" chứ chả nhẽ tôi lường được 3 trường hợp thì tôi viết 3 code?

Bạn và tôi làm sao biết được người hỏi có trường hợp nào trong 3 trường hợp trên.
Thực ra th 2 thì cũng là th 1 nhưng lúc đó tôi sẽ nhớ vị trí cột Toán không phải trong biến index mà sẽ nhớ trên sheet sau đó đọc vào index khi mở tập tin. Như thế thì nhấn nút là "chơi" tiếp lần trước.
 
Lần chỉnh sửa cuối:
Upvote 0
Cuối cùng tác giả xin rút kinh nghiệm lần sau, còn lần này thì kệ, mấy "thầy" đoán hay không đoán cũng xong rồi, không giải thích.
Riêng tôi thì thắc mắc tại sao Lê Duy thương lại đúng, và nếu LDT đúng thì giống thế nào so với làm tay (ghi chú trong file)?
 
Upvote 0
cuối cùng tác giả xin rút kinh nghiệm lần sau, còn lần này thì kệ, mấy "thầy" đoán hay không đoán cũng xong rồi, không giải thích.
Riêng tôi thì thắc mắc tại sao lê duy thương lại đúng, và nếu ldt đúng thì giống thế nào so với làm tay (ghi chú trong file)?
chắc do chủ topic giải thích không đúng .hoặc không biết đặt câu hỏi. Hên thì trúng thôi chứ làm sao em biết tại sao sư phụ.
ẹc ẹc
 
Upvote 0
Cuối cùng tác giả xin rút kinh nghiệm lần sau, còn lần này thì kệ, mấy "thầy" đoán hay không đoán cũng xong rồi, không giải thích.
Riêng tôi thì thắc mắc tại sao Lê Duy thương lại đúng, và nếu LDT đúng thì giống thế nào so với làm tay (ghi chú trong file)?

Tối qua loay hoay mãi với code của thầy Siwtom cấp cho lần cuối , gán hoài nút lệnh “ run code “ không xong ; cuối cùng đành phải lấy file của bác Lê Duy Thương ra xóa code và dán vào thì mới bấm được và sau đó lưu lại tên file mới.

Ngồi ở ngoài tiệm nét , các máy toàn xài EX 2010 , em không rành cách sử dụng nên phải lưu USB rồi về nhà test thử trên EX2003. Chính vì lý do trên mà file của bác LDT em cho là đáp ứng đúng ( code chuyển các cột về cột E và quay lại như yêu cầu ) và đủ vì bác ấy đã tạo cho nút run code của e đưa lên ở bài #1 chạy được ; riêng với các đoạn code của 2 thầy thì em phải bấm ALT+F8 + enter để test từng lần một.

Thầy Siwtom góp ý cho em về cách trình bày là rất đúng và gọn gàng nữa so với cách mô tả dài dòng của e khiến cho người đọc hiểu lầm , nên em mới nói là sẽ rút kinh nghiệm cho những lần sau là vậy.

p/s : những gì thuộc về VBA thì em dốt lắm các bác thông cảm cho , chỉ biết rằng cái gì làm bằng tay được thì VBA sẽ làm được mà hay hơn rất nhiều .
 
Upvote 0
tối qua loay hoay mãi với code của thầy siwtom cấp cho lần cuối , gán hoài nút lệnh “ run code “ không xong ; cuối cùng đành phải lấy file ....
P/s : Những gì thuộc về vba thì em dốt lắm các bác thông cảm cho , chỉ biết rằng cái gì làm bằng tay được thì vba sẽ làm được mà hay hơn rất nhiều .
gán code thì right click vào nút button---> assign macro--thấy 1 bảng xuất hiện các sub. Muốn chọn cái nào đó thì chọn
 
Upvote 0
Mấy hôm nay khá bận nên e không vào mạng được, giờ e vào nhờ 2 thầy đây :

Code Thầy Ptm :

code cuối của thầy Ptm ,e gõ sheet1 .E20 thành sheet 2 .E6 đã hoạt động tốt . Chỉ có điều hơi bất tiện là phải cuộn màn hình đến dòng cuối của ds dài và phải gõ nhập bằng tay trước khi nhấn nút , có thể tự động hóa khâu này được không thầy Ptm ?

Code Thầy Siwtom :

Nhấn nút chạy đủ 6 lần nhấn code , rồi bấm tiếp lần 7 thì quay lại từ đầu ! Tuy nhiên nếu chạy mới 4 lần mà lưu ( do e đi ăn cơm ) , lần sau quay vào thì cột toán sẽ kg đi tiếp nữa đến cột cuối cùng của bảng.

Vậy phiền thầy sửa lại code : cứ sau mỗi lần nhấn nút thì copy cả bảng từ E6: K16 của sheet1 sang sheet 2 tại ô E6:K16 ( giống như của thầy Ptm)

Lý do :
a/ dữ liệu gốc của em ở sheet1 sẽ không bị thay đổi.
b/ Nhần nút ở lần thứ bao nhiêu ,lưu file bất cứ lúc nào thì cũng không sao cả .
 
Upvote 0
Mấy hôm nay khá bận nên e không vào mạng được, giờ e vào nhờ 2 thầy đây :

Code Thầy Ptm :

code cuối của thầy Ptm ,e gõ sheet1 .E20 thành sheet 2 .E6 đã hoạt động tốt . Chỉ có điều hơi bất tiện là phải cuộn màn hình đến dòng cuối của ds dài và phải gõ nhập bằng tay trước khi nhấn nút , có thể tự động hóa khâu này được không thầy Ptm?
Vậy thì gõ thứ tự đó trên đầu, trên dòng toán lý hóa.

Tự động thế nào được khi tôi không biết bạn muốn gì, vì tôi cũng như anh siwtom vẫn đang yêu cầu bạn liệt kê kết quả từng lần bấm và kết quả cuối cùng.
Nhắc lại ý của tôi bài trên là: Bạn chỉ hứa rút kinh nghiệm lần sau, còn lần này vẫn chưa nói rõ yêu cầu cuối cùng, hoặc liệt kê kết quả. Tất cả các bài trả lời bên trên toàn là phải đoán, và không biết đúng hay không.
 
Upvote 0
Mấy hôm nay khá bận nên e không vào mạng được, giờ e vào nhờ 2 thầy đây :

Code Thầy Ptm :

code cuối của thầy Ptm ,e gõ sheet1 .E20 thành sheet 2 .E6 đã hoạt động tốt . Chỉ có điều hơi bất tiện là phải cuộn màn hình đến dòng cuối của ds dài và phải gõ nhập bằng tay trước khi nhấn nút , có thể tự động hóa khâu này được không thầy Ptm ?

Code Thầy Siwtom :

Nhấn nút chạy đủ 6 lần nhấn code , rồi bấm tiếp lần 7 thì quay lại từ đầu ! Tuy nhiên nếu chạy mới 4 lần mà lưu ( do e đi ăn cơm ) , lần sau quay vào thì cột toán sẽ kg đi tiếp nữa đến cột cuối cùng của bảng.

Vậy phiền thầy sửa lại code : cứ sau mỗi lần nhấn nút thì copy cả bảng từ E6: K16 của sheet1 sang sheet 2 tại ô E6:K16 ( giống như của thầy Ptm)

Lý do :
a/ dữ liệu gốc của em ở sheet1 sẽ không bị thay đổi.
b/ Nhần nút ở lần thứ bao nhiêu ,lưu file bất cứ lúc nào thì cũng không sao cả .

Bạn ạ, tôi không chơi trò "thông tin nhỏ giọt".
Ngay như ở bài #25 tôi có liệt kê ra 3 trường hợp mà bạn cũng chả thèm nói bạn muốn trường hợp nào. Hay bạn muốn trường hợp 4, 5 nào đó, cũng chả thấy nói.

Bạn nói Toán không đi tiếp. Thì tôi có biết bạn muốn thế nào đâu để mà "chiều"?
 
Upvote 0
Một chuyện quan trọng nữa là:
Giữa 2 lần bấm bạn có làm việc khác không, việc đó có liên quan đến kết quả sau khi bấm không, việc đó có mât thời gian nhiều không. Hay là bạn bấm liên tục 3, 4 cái cho đến khi vừa ý mới ngưng bấm và xử lý kết quả sau khi bấm.

Bởi vì giữa 2 lần bấm mà làm việc khác 30 phút, 6 lần là 3 giờ, nghĩa là code phải treo ở đâu đó trong bộ nhớ 1 giá trị liên quan đến "số lần đã bấm" trong 3 giờ. Trong 3, 4 giờ đó bạn đi ăn cơm, đi tiểu, ngủ trưa, máy cũng phải lưu trữ cái của nợ đó cho bạn.
 
Upvote 0
Vậy thì gõ thứ tự đó trên đầu, trên dòng toán lý hóa.

Tự động thế nào được khi tôi không biết bạn muốn gì, vì tôi cũng như anh siwtom vẫn đang yêu cầu bạn liệt kê kết quả từng lần bấm và kết quả cuối cùng.
Nhắc lại ý của tôi bài trên là: Bạn chỉ hứa rút kinh nghiệm lần sau, còn lần này vẫn chưa nói rõ yêu cầu cuối cùng, hoặc liệt kê kết quả. Tất cả các bài trả lời bên trên toàn là phải đoán, và không biết đúng hay không.


Vậy thì gõ thứ tự đó trên đầu, trên dòng toán lý hóa. Vâng em sẽ test lại và báo lại thầy sau .

Kết quả là các cột đã di chuyển ra cột E sau mỗi lần nhấn nút , code của thầy đã đáp ứng yêu cầu của bài rồi mà , em chỉ tùy biến 1 chút là thay vì copy kết quả xuống E20 thì đưa qua sheet2 .Tiện lợi của cách này là muốn cột nào cần ra cột E thì gõ STT xắp xếp ( thực tế có những bàng ds khá là nhiều cột ). Kết quả cuối cùng của đề tài này thì thầy Siwtom đã liệt kê ra dùm em ở bài trên rồi đó thầy Ptm
 
Upvote 0
Một chuyện quan trọng nữa là:
Giữa 2 lần bấm bạn có làm việc khác không, việc đó có liên quan đến kết quả sau khi bấm không, việc đó có mât thời gian nhiều không. Hay là bạn bấm liên tục 3, 4 cái cho đến khi vừa ý mới ngưng bấm và xử lý kết quả sau khi bấm.

Bởi vì giữa 2 lần bấm mà làm việc khác 30 phút, 6 lần là 3 giờ, nghĩa là code phải treo ở đâu đó trong bộ nhớ 1 giá trị liên quan đến "số lần đã bấm" trong 3 giờ. Trong 3, 4 giờ đó bạn đi ăn cơm, đi tiểu, ngủ trưa, máy cũng phải lưu trữ cái của nợ đó cho bạn.


Trả lời cùng thầy là mỗi lần bấm nút thì em còn phải làm 1 số công việc cho bảng biểu khác , xem và in ra nữa rồi mới quay trở lại để nhấn tiếp cột khác .Em cũng không rành là code chạy lại chiếm bộ nhớ nhiều đến như vậy.Sau mỗi lần nhấn nút thì khoảng chừng 3 phút là xong. nếu phải đi đâu lâu thì em lưu file và tắt máy , lần kế tiếp thì mở file ra và tiếp tục công việc đang dang dở cho đến khi xong.
 
Upvote 0
Đây là code với số TT ghi bên trên dòng tiêu đề, tức là dòng 5. Code này áp dụng cho việc chỉ chạy 1 lần, giữa các lần chạy muốn làm gì thì làm, máy không phải lưu giữ cái gì giữa 2 lần chạy.

Mã:
[COLOR=#000000][COLOR=#0000BB]Sub Reorder[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#0000BB]Dim SArr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]RArr
Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Cols [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long
SArr [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheet1[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]E[/COLOR][/COLOR][COLOR=#ff0000]5[/COLOR][COLOR=#000000][COLOR=#007700]:[/COLOR][COLOR=#0000BB]K1[/COLOR][/COLOR][COLOR=#ff0000]6[/COLOR][COLOR=#000000][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value
Rws [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]): [/COLOR][COLOR=#0000BB]Cols [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]ReDim RArr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1 To Cols[/COLOR][COLOR=#007700])
For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Rws
    [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]j [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Cols
        RArr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700]([/COLOR][/COLOR][COLOR=#ff0000]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700])) = [/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700])
    [/COLOR][COLOR=#0000BB]Next
Next
Sheet1[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]e[/COLOR][COLOR=#ff0000]5[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Cols[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]RArr
End Sub [/COLOR]

 
Upvote 0
Bạn ạ, tôi không chơi trò "thông tin nhỏ giọt".
Ngay như ở bài #25 tôi có liệt kê ra 3 trường hợp mà bạn cũng chả thèm nói bạn muốn trường hợp nào. Hay bạn muốn trường hợp 4, 5 nào đó, cũng chả thấy nói.

Bạn nói Toán không đi tiếp. Thì tôi có biết bạn muốn thế nào đâu để mà "chiều"?


Oan cho e quá ! em có nhỏ giọt thông tin đâu thầy .Code cuối cùng của thầy sau khi tạo nút nhấn ,em test thử thì thấy các cột đã di chuyển tuần tự như yêu cầu , nhần tiếp lần thứ 7 thì thấy quay trở lại như lúc đầu ,tuy các cột có đổi vị trí so với ds gốc nhưng điều này không sao vì kết quả được copy sang sheet2 :E6:K16.Cho nên mới phiền thầy sửa lại code giúp em khâu này

Còn trường hợp nhấn nút đến lần thứ 4 , em bận việc khác ( đi ăn cơm ) .nên lưu file và tắt máy ra ngoài khoảng 1g , quay trở lại mở máy làm tiếp thì thấy hiện tượng trên nên báo lại cho thầy biết.
 
Upvote 0
Đây là code với số TT ghi bên trên dòng tiêu đề, tức là dòng 5. Code này áp dụng cho việc chỉ chạy 1 lần, giữa các lần chạy muốn làm gì thì làm, máy không phải lưu giữ cái gì giữa 2 lần chạy.

Mã:
[COLOR=#000000][COLOR=#0000BB]Sub Reorder[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#0000BB]Dim SArr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]RArr
Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Cols [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long
SArr [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Sheet1[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]E[/COLOR][/COLOR][COLOR=#ff0000]5[/COLOR][COLOR=#000000][COLOR=#007700]:[/COLOR][COLOR=#0000BB]K1[/COLOR][/COLOR][COLOR=#ff0000]6[/COLOR][COLOR=#000000][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value
Rws [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]): [/COLOR][COLOR=#0000BB]Cols [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]UBound[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]ReDim RArr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1 To Cols[/COLOR][COLOR=#007700])
For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Rws
    [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]j [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Cols
        RArr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700]([/COLOR][/COLOR][COLOR=#ff0000]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700])) = [/COLOR][COLOR=#0000BB]SArr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]j[/COLOR][COLOR=#007700])
    [/COLOR][COLOR=#0000BB]Next
Next
Sheet1[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]e[/COLOR][COLOR=#ff0000]5[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Cols[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]RArr
End Sub [/COLOR]


Em cám ơn thầy nhiều ! mỗi code của mỗi thầy em đều vận dụng trong những trường hợp khác nhau được hết. cái code có cột "đảo ngũ " cũng có cái hay của nó đó thầy !
 
Upvote 0
Oan cho e quá ! em có nhỏ giọt thông tin đâu thầy .Code cuối cùng của thầy sau khi tạo nút nhấn ,em test thử thì thấy các cột đã di chuyển tuần tự như yêu cầu , nhần tiếp lần thứ 7 thì thấy quay trở lại như lúc đầu ,tuy các cột có đổi vị trí so với ds gốc nhưng điều này không sao vì kết quả được copy sang sheet2 :E6:K16.Cho nên mới phiền thầy sửa lại code giúp em khâu này

Còn trường hợp nhấn nút đến lần thứ 4 , em bận việc khác ( đi ăn cơm ) .nên lưu file và tắt máy ra ngoài khoảng 1g , quay trở lại mở máy làm tiếp thì thấy hiện tượng trên nên báo lại cho thầy biết.

Bạn vẫn không hiểu. Bạn chưa một lần nào phát biểu "trọn vẹn" yêu cầu. Kể cả các dịch chuyển trong 1 lần mở và yêu cầu thứ tự cột trong lần mở sau cũng như qui tắc chơi tiếp như thế nào.
Tôi đã bỏ công ra để xét 3 trường hợp, nhưng bạn vẫn không chịu chọn trường hợp nào. Bạn thấy oan à?
 
Upvote 0
Web KT

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

Back
Top Bottom