Code VBA đảo chiều A=>Z sang Z=>A (1 người xem)

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

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

1986QV

Thành viên hoạt động
Tham gia
15/5/12
Bài viết
114
Được thích
6
Nghề nghiệp
Kỹ sư
A/E forum viết code VBA đảo chiều từ 1=>>12 sang 12=>>1 mà vẫn được giá trị như ban đầu.
Cảm ơn mọi người quan tâm, giúp đỡ!
 

File đính kèm

A/E forum viết code VBA đảo chiều từ 1=>>12 sang 12=>>1 mà vẫn được giá trị như ban đầu.
Cảm ơn mọi người quan tâm, giúp đỡ!
Thử với Sub này xem sao.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long
With Sheet1
    sArr = .Range(.[A3], .[A1000].End(3)).Offset(, 1).Resize(, 12).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 12)
For I = 1 To UBound(sArr, 1)
    For J = 12 To 1 Step -1
        dArr(I, 13 - J) = sArr(I, J)
    Next J
Next I
.[O3].Resize(I - 1, 12).Value = dArr
End With
End Sub
 
Upvote 0
Bạn dùng Code này rồi tùy biến
Mã:
Sub DaoChieu()
Dim Arr, sArr
Dim iC, jR, k As Integer
Arr = Range("B3:M11")
ReDim sArr(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    For iC = UBound(Arr, 2) To 1 Step -1
        k = k + 1
        For jR = 1 To UBound(Arr, 1)
            sArr(jR, k) = Arr(jR, iC)
        Next
    Next
[O13].Resize(UBound(sArr, 1), UBound(sArr, 2)) = sArr
End Sub

Bài này chẳng cần VBA công thức cũng có thể làm được
Bạn dùng công thức này rồi kéo qua phải, xuống dưới
=OFFSET($M$3,ROW(1:1)-1,12-COLUMN(L:L))
 
Upvote 0
A/E forum viết code VBA đảo chiều từ 1=>>12 sang 12=>>1 mà vẫn được giá trị như ban đầu.
Cảm ơn mọi người quan tâm, giúp đỡ!

Copy dữ liệu sang nơi khác, xong, sort Left to Right là được chứ gì
PHP:
Sub Test()
  With Sheet1
    .Range("B3:M11").Copy .Range("O3")
    With .Range("O3:Z11")
      .Sort .Rows(1), 2, , , , , , xlYes, , , xlLeftToRight
    End With
  End With
End Sub
Làm bằng tay cũng được chứ nói gì đến code
 
Upvote 0
Nhờ các Thầy viết dùm code trong trường hợp trên, nhưng điều kiện số lượng cột chưa biết trước (có thể nhiều hơn hoặc ít hơn so với 12 cột của chủ Topic), Cột đầu tiên của kết quả sẽ cách cột cuối cùng 1 cột (cột trung gian giống như cột N của chủ Topic)
Em cảm ơn!
 
Upvote 0
Có phải bạn muốn như thế này:
Mã:
Sub DaoChieu()
Dim Arr, sArr
Dim iC, jR, k As Integer
Arr = Range("B3", Cells([A65536].End(xlUp).Row, [IV3].End(xlToLeft).Column))
ReDim sArr(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    For iC = UBound(Arr, 2) To 1 Step -1
        k = k + 1
        For jR = 1 To UBound(Arr, 1)
            sArr(jR, k) = Arr(jR, iC)
        Next
    Next
[IV3].End(xlToLeft).Offset(, 2).Resize(UBound(sArr, 1), UBound(sArr, 2)) = sArr
End Sub
 
Upvote 0
Có phải bạn muốn như thế này:
Mã:
Sub DaoChieu()
Dim Arr, sArr
Dim iC, jR, k As Integer
Arr = Range("B3", Cells([A65536].End(xlUp).Row, [IV3].End(xlToLeft).Column))
ReDim sArr(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    For iC = UBound(Arr, 2) To 1 Step -1
        k = k + 1
        For jR = 1 To UBound(Arr, 1)
            sArr(jR, k) = Arr(jR, iC)
        Next
    Next
[IV3].End(xlToLeft).Offset(, 2).Resize(UBound(sArr, 1), UBound(sArr, 2)) = sArr
End Sub
Hi, cái này anh quất 1 fát đến cột IV luôn
Mã:
Arr = Range("B3", Cells([A65536].End(xlUp).Row, [IV3].End(xlToLeft).Column))
Vì em đang học code, anh giúp em lại câu lệnh, làm sao đến cột cuối cùng,kể từ cột B3 có dữ liệu liên tục đến 1 cột bất kỳ nào thôi (có thể đến cell O3 hay X3 hoặc AA3 gì đó)
Em cảm ơn!
 
Upvote 0
Hi, cái này anh quất 1 fát đến cột IV luôn
Mã:
Arr = Range("B3", Cells([A65536].End(xlUp).Row, [IV3].End(xlToLeft).Column))
Vì em đang học code, anh giúp em lại câu lệnh, làm sao đến cột cuối cùng,kể từ cột B3 có dữ liệu liên tục đến 1 cột bất kỳ nào thôi (có thể đến cell O3 hay X3 hoặc AA3 gì đó)
Em cảm ơn!
Bạn đã thử Code chưa mà biết nó "Quất" đến cột IV?
Bạn đã yêu cầu
Cột đầu tiên của kết quả sẽ cách cột cuối cùng 1 cột
Nên phải thử Code mới biết có đúng hay không chứ
Thân!
 
Upvote 0
Bạn đã thử Code chưa mà biết nó "Quất" đến cột IV?
Bạn đã yêu cầu

Nên phải thử Code mới biết có đúng hay không chứ
Thân!
Dĩ nhiên em đã thử
Vì em chỉ muốn từ cell B3 có dữ liệu liên tục đến cell bất kỳ ( Ví dụ đến cell AA) , vì có thể cell CA3 của em là số liệu khác.
Em cảm ơn!
 
Upvote 0
Hi, cái này anh quất 1 fát đến cột IV luôn
Mã:
Arr = Range("B3", Cells([A65536].End(xlUp).Row, [IV3].End(xlToLeft).Column))
Vì em đang học code, anh giúp em lại câu lệnh, làm sao đến cột cuối cùng,kể từ cột B3 có dữ liệu liên tục đến 1 cột bất kỳ nào thôi (có thể đến cell O3 hay X3 hoặc AA3 gì đó)
Em cảm ơn!

Vì cái chuyện XÁC ĐỊNH VÙNG DỮ LIỆU nó vô chừng lắm, tùy vào tình hình thực tế mà quyết định sẽ dùng CurrentRegion hay xlUp hay xlLefttoRight... vân vân...
Vậy nên trong trường hợp viết code dạng tổng quát, tôi sẽ "bàn giao" phần xác định cho người dùng như sau:
Mã:
Sub CopyAndSort(ByVal rng As Range, ByVal Target As Range)
  rng.Copy Target
  With Target.Resize(rng.Rows.Count, rng.Columns.Count)
    .Sort .Rows(1), 2, , , , , , xlYes, , , xlLeftToRight
  End With
End Sub
Bây giờ "ông" muốn rng là cái nào, Target là cái nào "ông" tự nói cho code biết
Như dữ liệu trong bài này thì "ổng" sẽ "nói" như sau:
Mã:
Sub Test()
  With Sheet1.Range("B3:M11") ''<--- Vùng này "ông" phải tự xác định, tui không biết!
    CopyAndSort .Cells, .Offset(, .Columns.Count + 1)
  End With
End Sub
Còn tui: Hết trách nhiệm! Ông xác định vùng dữ liệu sai, kết quả sai ---> KỆ ÔNG
Ẹc... Ẹc...
 
Lần chỉnh sửa cuối:
Upvote 0
Dĩ nhiên em đã thử
Vì em chỉ muốn từ cell B3 có dữ liệu liên tục đến cell bất kỳ ( Ví dụ đến cell AA) , vì có thể cell CA3 của em là số liệu khác.
Em cảm ơn!
Chắc do tôi không hiểu yêu cầu của bạn chăng
Code này chỉ nhằm đảo thứ tự Cột như chủ Topic + yêu cầu của bạn (số cột bất kỳ, số dòng bất kỳ, kết quả sau khi đảo cách dữ liệu cuối 1 cột). Còn nếu không đúng ý thì bạn có thể Post File giả định xem
 

File đính kèm

Upvote 0
Chắc do tôi không hiểu yêu cầu của bạn chăng
Code này chỉ nhằm đảo thứ tự Cột như chủ Topic + yêu cầu của bạn (số cột bất kỳ, số dòng bất kỳ, kết quả sau khi đảo cách dữ liệu cuối 1 cột). Còn nếu không đúng ý thì bạn có thể Post File giả định xem

Chạy code lần 1: Đúng
Chạy code lần 2: Trật lất
Vậy đấy! Ẹc... Ẹc...
 
Upvote 0
Vì cái chuyện XÁC ĐỊNH VÙNG DỮ LIỆU nó vô chừng lắm, tùy vào tình hình thực tế mà quyết định sẽ dùng CurrentRegion hay xlUp hay xlLefttoRight... vân vân...
Cái mà em đang muốn học để xác định vùng dữ liệu là dùng CurrentRegionxlLefttoRight trong trường hợp này
Thầy giúp em 2 ví dụ trên với
Em cảm ơn!
 
Upvote 0
Cái mà em đang muốn học để xác định vùng dữ liệu là dùng CurrentRegionxlLefttoRight trong trường hợp này
Thầy giúp em 2 ví dụ trên với
Em cảm ơn!

- Nếu dùng CurrentRegion, xlDown, xlToRight thì bạn phải chắc chắn rằng dữ liệu không được chứa dòng trống hoặc cột trống nào
- Nếu dùng xlUp, xlToLeft thì bạn phải chắc chắn rẵng dữ liệu xuất ra không được nằm dưới hoặc bên phải của dữ liệu ---> Nếu không bạn chỉ chạy code được 1 lần, lần sau xác định vùng dữ liệu gốc bằng cách nào đây?
-----------
Ở trên chỉ là những cảnh báo cho bạn lưu ý khi dùng, còn chuyện dùng mấy cái End(..) này thế nào tin chắc không phải là chuyện khó (Record macro cũng có code rồi)
 
Upvote 0
Thầy giúp em cái này

Em cảm ơn

Dùng xlToLeft
Mã:
Range([A60000].End(xlUp).Offset(,1), [IV3].End(xlToLeft)).Select
Đây là 1 vùng được xác định bới 2 cell:
- Cell1: [A60000].End(xlUp).Offset(,1) ---> là cell cuối cùng của cột B
- Cell2: [IV3].End(xlToLeft) ---> là cell cuối cùng của dòng 3

Dùng xlToRight và xlDown
Mã:
Range([A3].End(xlDown).Offset(,1), [B3].End(xlToRight)).Select
Đây là 1 vùng được xác định bới 2 cell giống như cách trên

Dùng CurrentRegion (Giả sử từ dòng 1 đến dòng 2 không có dữ liệu nào)
Mã:
Intersect(Range("A3").CurrentRegion, Range("A3").CurrentRegion.Offset(, 1)).Select
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom