Sắp xếp dữ liệu từ hàng ngang sang hàng dọc. (1 người xem)

Liên hệ QC

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

tuantu315

Thành viên hoạt động
Tham gia
30/9/13
Bài viết
141
Được thích
38
Như tiêu đề nhờ Anh/Chị diễn đàn giúp em sắp xếp dữ liệu từ hàng ngang sang hàng dọc. Theo điều kiện những cell nào trống không có dữ liệu sẽ bị bỏ qua và những cell nào có dữ liệu sẽ được sắp xếp tiếp tục. Em cám ơn nhiều
 

File đính kèm

Như tiêu đề nhờ Anh/Chị diễn đàn giúp em sắp xếp dữ liệu từ hàng ngang sang hàng dọc. Theo điều kiện những cell nào trống không có dữ liệu sẽ bị bỏ qua và những cell nào có dữ liệu sẽ được sắp xếp tiếp tục. Em cám ơn nhiều
Dùng lại CT của anh @huuthang_bd, công thức tại M2:
PHP:
M2=INDIRECT(TEXT(SMALL(IF($C$2:$L$5<>"",ROW($C$2:$C$5)*1000+COLUMN($C$2:$L$2)),ROW(A1)),"R#C###"),)
Ctrl+Shift+Enter rồi fill xuông!!!
 
Upvote 0
Cám ơn bạn giúp đỡ nhưng kết quả ra bị sai ạ . Bạn xem lại file dùm mình nha
Giữa file bạn up ở bài 1 và bài này khác nhau hoàn toàn về dữ liệu, tôi dựa vào cột B của bạn (Test No) nhưng lần này bạn up file cột B chẳng có gì cả nó sai là đúng rồi, nếu dữ liệu của bạn chỉ có trong vùng từ C2 đến L20 thì sửa lại thế này.
Mã:
Sub GPE()
Dim Arr(), dArr(), i As Long, j As Long, k As Long
With Sheet1
    Arr = .Range("C2:L20").Value
    j = UBound(Arr, 1) * UBound(Arr, 2)
    ReDim dArr(1 To j, 1 To 1)
    For i = 1 To UBound(Arr, 1)
        For j = 1 To UBound(Arr, 2)
            If Arr(i, j) <> Empty Then
                k = k + 1: dArr(k, 1) = Arr(i, j)
            End If
        Next j
    Next i
    .Range("N2").Resize(k) = dArr
End With
End Sub
 
Upvote 0
Dùng lại CT của anh @huuthang_bd, công thức tại M2:
PHP:
M2=INDIRECT(TEXT(SMALL(IF($C$2:$L$5<>"",ROW($C$2:$C$5)*1000+COLUMN($C$2:$L$2)),ROW(A1)),"R#C###"),)
Ctrl+Shift+Enter rồi fill xuông!!!
Bạn giúp mình chỉnh lại công thức tại vì mình muốn sắp xếp từ ô C2 - L20. Cám ơn bạn
 
Upvote 0
Bạn giúp mình chỉnh lại công thức tại vì mình muốn sắp xếp từ ô C2 - L20. Cám ơn bạn
Đây bạn ạ:
PHP:
M2=IFERROR(INDIRECT(TEXT(SMALL(IF($C$2:$L$20<>"",ROW($C$2:$C$20)*1000+COLUMN($C$2:$L$2)),ROW(A1)),"R#C###"),),"")
Ctrl+Shift+Enter rồi fill xuông!!!
 
Upvote 0
Giữa file bạn up ở bài 1 và bài này khác nhau hoàn toàn về dữ liệu, tôi dựa vào cột B của bạn (Test No) nhưng lần này bạn up file cột B chẳng có gì cả nó sai là đúng rồi, nếu dữ liệu của bạn chỉ có trong vùng từ C2 đến L20 thì sửa lại thế này.
Mã:
Sub GPE()
Dim Arr(), dArr(), i As Long, j As Long, k As Long
With Sheet1
    Arr = .Range("C2:L20").Value
    j = UBound(Arr, 1) * UBound(Arr, 2)
    ReDim dArr(1 To j, 1 To 1)
    For i = 1 To UBound(Arr, 1)
        For j = 1 To UBound(Arr, 2)
            If Arr(i, j) <> Empty Then
                k = k + 1: dArr(k, 1) = Arr(i, j)
            End If
        Next j
    Next i
    .Range("N2").Resize(k) = dArr
End With
End Sub
Cám ơn bạn quá tuyệt vời . Bạn cho mình hỏi vấn đề nhỏ nữa là cách nào xóa trắng cột N trước khi sắp xếp vậy bạn vì nếu như dữ liệu mình sắp xếp lần 1 nhiều hơn lần 2 thì dữ liệu của lần 1 vẫn còn lưu lại bên dưới .
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn quá tuyệt vời . Bạn cho mình hỏi vấn đề nhỏ nữa là cách nào xóa trắng cột N trước khi sắp xếp vậy bạn vì nếu như dữ liệu mình sắp xếp lần 1 ít hơn lần 2 thì dữ liệu của lần 1 vẫn còn lưu lại bên dưới .
Thì thêm đoạn code xóa là xong.
Mã:
Sub GPE()
Dim Arr(), dArr(), i As Long, j As Long, k As Long
With Sheet1
    Arr = .Range("C2:L20").Value
    j = UBound(Arr, 1) * UBound(Arr, 2)
    ReDim dArr(1 To j, 1 To 1)
    For i = 1 To UBound(Arr, 1)
        For j = 1 To UBound(Arr, 2)
            If Arr(i, j) <> Empty Then
                k = k + 1: dArr(k, 1) = Arr(i, j)
            End If
        Next j
    Next i
    .Range("N2:N10000").Clear
    .Range("N2").Resize(k) = dArr
End With
End Sub
 
Upvote 0
Upvote 0
Thì thêm đoạn code xóa là xong.
Mã:
Sub GPE()
Dim Arr(), dArr(), i As Long, j As Long, k As Long
With Sheet1
    Arr = .Range("C2:L20").Value
    j = UBound(Arr, 1) * UBound(Arr, 2)
    ReDim dArr(1 To j, 1 To 1)
    For i = 1 To UBound(Arr, 1)
        For j = 1 To UBound(Arr, 2)
            If Arr(i, j) <> Empty Then
                k = k + 1: dArr(k, 1) = Arr(i, j)
            End If
        Next j
    Next i
    .Range("N2:N10000").Clear
    .Range("N2").Resize(k) = dArr
End With
End Sub
Cám ơn bạn nhiều! Chúc bạn 1 ngày vui vẻ
 
Upvote 0
Anh có thể giải thích ý nghĩa công thức này được không?
Cách này dùng hệ quy chiếu RC của excel bạn ạ.
Đoạn này SMALL(IF($C$2:$L$20<>"",ROW($C$2:$C$20)*1000+COLUMN($C$2:$L$2)),ROW(A1)) sẽ bằng 2003, dùng text(2003,"R#C###")="R2C003"
Indirect("R2C003",0)=Indirect("R2C3",0) là vị trí Row 2 , column 3 tức là C2
Tương tự với các ô tiếp theo
 
Upvote 0
Cách này dùng hệ quy chiếu RC của excel bạn ạ.
Đoạn này SMALL(IF($C$2:$L$20<>"",ROW($C$2:$C$20)*1000+COLUMN($C$2:$L$2)),ROW(A1)) sẽ bằng 2003, dùng text(2003,"R#C###")="R2C003"
Indirect("R2C003",0)=Indirect("R2C3",0) là vị trí Row 2 , column 3 tức là C2
Tương tự với các ô tiếp theo
Em cảm ơn Anh nhiều!
 
Upvote 0
Mã:
M2=IFERROR(INDIRECT(TEXT(SMALL(IF($C$2:$L$20<>"",ROW($C$2:$C$20)*1000+COLUMN($C$2:$L$2)),ROW(A1)),"R#C###"),),"")
Sao công thức trên không được đưa vào những tuyệt chiêu nhỉ ????:):):):)
 
Upvote 0
Mã:
M2=IFERROR(INDIRECT(TEXT(SMALL(IF($C$2:$L$20<>"",ROW($C$2:$C$20)*1000+COLUMN($C$2:$L$2)),ROW(A1)),"R#C###"),),"")
Sao công thức trên không được đưa vào những tuyệt chiêu nhỉ ????:):):):)
có chỗ nào lưu mấy tuyệt chiêu không anh, em thì không được động não lắm học ké cho chắc :D
 
Upvote 0
có chỗ nào lưu mấy tuyệt chiêu không anh, em thì không được động não lắm học ké cho chắc :D
Học ké thì cũng có sao đâu. Người xưa có nói "Nhân Vô thập toàn" .
Khi tôi mới bắt đầu với excel. kiến thức excel trong đầu tôi lúc đó là con số 0 tròn chỉnh.
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom