chuyển các ô có dữ liệu về 1 giòng hoặc 1 cột

Liên hệ QC

buanhanphonui

Thành viên mới
Tham gia
25/10/11
Bài viết
20
Được thích
2
Mình có 1 sheet gồm nhiều ô có giá trị (các ô này nằm lộn xộn). Anh/chị/em nào có thể chỉ giúp mình cách để đưa các giá trị này về 1 cột hoặc 1 giòng được ạ.
 

File đính kèm

  • Chuyển Về Giòng Hoặc Cột.xlsx
    12 KB · Đọc: 19
Lấy theo trình tự nào, phải sang trái hay trên xuống dưới... bạn nhỉ?
Mình muốn xếp theo cột hoặc hàng (trình tự dữ liệu lấy cột 1 từ trên xuống dưới rồi sang cột 2 cũng từ trên xuống dưới, tương tự với các cột tiếp theo) bạn ạ
Bài đã được tự động gộp:

Nhưng thớt bỏ bom xong lại chuồn mất rồi anh ạ, chắc để thớt chờ người khác giúp thôi, em cũng tạm biệt thớt này thôi anh.
Mình vừa chạy ra ngoài có chút việt, bạn thông cảm :D
Bài đã được tự động gộp:

Dữ liệu dạng in hệt nhau. Mèo trắng hay mèo đen đứng trước thì cũng chả sao. Miễn là bắt chuột thôi.
Hiểu như a cũng được, nhưng nếu lấy theo thứ tự lần lượt cột 1-2-3 và từ trên xuống dưới thì e dễ kiểm soát dữ liệu hơn.
 
Mình muốn xếp theo cột hoặc hàng (trình tự dữ liệu lấy cột 1 từ trên xuống dưới rồi sang cột 2 cũng từ trên xuống dưới, tương tự với các cột tiếp theo) bạn ạ
...
Hiểu như a cũng được, nhưng nếu lấy theo thứ tự lần lượt cột 1-2-3 và từ trên xuống dưới thì e dễ kiểm soát dữ liệu hơn.
Hai cái này khác nhau. Dòng trên là duyệt từng cột. Dòng dưới là duyệt từng hàng.

Chú: Nói chuyện đừng có viết tắt.
a gõ thêm nh và e gõ thêm e bộ mệt lắm sao? Trong môi trường Excel, các ký hiệu a e để giành cho tên cột.
 
Hai cái này khác nhau. Dòng trên là duyệt từng cột. Dòng dưới là duyệt từng hàng.

Chú: Nói chuyện đừng có viết tắt.
a gõ thêm nh và e gõ thêm e bộ mệt lắm sao? Trong môi trường Excel, các ký hiệu a e để giành cho tên cột.
Vậy anh có cách nào để các dữ liệu rải rác ở các ô về một dòng hoặc một cột giúp em được không ạ? Cảm ơn anh!
 
Cái này làm bằng thủ thuật và công thức hơi mệt.
VBA dễ hơn nhiều. Để xem tối nay có thì giờ viết không.

Bổ sung:
1. click vào dấu +, tạo thêm một sheet thứ hai. Đặt tên sheet này là XepLai.
2. copy code sau vào Module1.
3. chạy code
4. cột thứ hai dùng để kiểm soát lại dữ liệu đã xếp lại. Kiểm xong thì delete nó đi.

Sub t()
' code to pack a sparse range to 1 column
Dim sh As Worksheet
Dim LastRow As Long, LastCol As Long
Dim aCol As Long, aRow As Long, bRow As Long
Dim a, b()
Set sh = Sheet1
LastRow = sh.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
LastCol = sh.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
a = sh.Range("A1").Resize(LastRow, LastCol).Value ' copy data into array
ReDim b(1 To LastRow * LastCol, 1 To 2) ' set up results array
For aCol = 1 To LastCol ' traverse data array rowwise
For aRow = 1 To LastRow
If a(aRow, aCol) <> "" Then ' copy non blank values
bRow = bRow + 1
b(bRow, 1) = a(aRow, aCol)
b(bRow, 2) = aRow & "\" & aCol
End If
Next aRow
Next aCol
Sheet2.Range("A1").Resize(bRow, 2) = b ' copy results to second sheet
End Sub
 
Lần chỉnh sửa cuối:
Cái này làm bằng thủ thuật và công thức hơi mệt.
VBA dễ hơn nhiều. Để xem tối nay có thì giờ viết không.

Bổ sung:
1. click vào dấu +, tạo thêm một sheet thứ hai. Đặt tên sheet này là XepLai.
2. copy code sau vào Module1.
3. chạy code
4. cột thứ hai dùng để kiểm soát lại dữ liệu đã xếp lại. Kiểm xong thì delete nó đi.

Sub t()
' code to pack a sparse range to 1 column
Dim sh As Worksheet
Dim LastRow As Long, LastCol As Long
Dim aCol As Long, aRow As Long, bRow As Long
Dim a, b()
Set sh = Sheet1
LastRow = sh.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
LastCol = sh.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
a = sh.Range("A1").Resize(LastRow, LastCol).Value ' copy data into array
ReDim b(1 To LastRow * LastCol, 1 To 2) ' set up results array
For aCol = 1 To LastCol ' traverse data array rowwise
For aRow = 1 To LastRow
If a(aRow, aCol) <> "" Then ' copy non blank values
bRow = bRow + 1
b(bRow, 1) = a(aRow, aCol)
b(bRow, 2) = aRow & "\" & aCol
End If
Next aRow
Next aCol
Sheet2.Range("A1").Resize(bRow, 2) = b ' copy results to second sheet
End Sub
Em test được rồi anh ạ! Ngon lành lắm! Cảm ơn anh nhiều!
 
Web KT
Back
Top Bottom