Tách dữ liệu từ 1 cột sang nhiều cột bằng công thức (1 người xem)

Liên hệ QC

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

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
572
Tôi có 1 cột dữ liệu, gồm các ô có dữ liệu liền nhau và 1 ô trắng. Ô trắng là để phân cách các nhóm dữ liệu liền nhau nói trên

Tôi muốn từ dữ liệu gốc này, có hàm nào để chuyển dữ liệu từ cột ban đầu thành nhiều cột khác nhau. (Mỗi nhóm 1 cột mới, các nhóm phân tách bởi 1 ô trống)

Tôi mô tả hơi vụng về, mong xem thêm ở file gửi kèm.

Rất mong được mọi người giúp đỡ.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn để trống ô B4 và dùng công thức mảng sau (kết thúc Ctrl + Shift + Enter)
Mã:
=IF(SMALL(IF($B$4:$B$65="",ROW($1:$62),""),COLUMN(A:A))+ROW(1:1)<SMALL(IF($B$4:$B$65="",ROW($1:$62),""),COLUMN(B:B)),OFFSET($B$4,SMALL(IF($B$4:$B$65="",ROW($1:$62),""),COLUMN(A:A))+ROW(1:1)-1,0),"")
 
Tôi có 1 cột dữ liệu, gồm các ô có dữ liệu liền nhau và 1 ô trắng. Ô trắng là để phân cách các nhóm dữ liệu liền nhau nói trên

Tôi muốn từ dữ liệu gốc này, có hàm nào để chuyển dữ liệu từ cột ban đầu thành nhiều cột khác nhau. (Mỗi nhóm 1 cột mới, các nhóm phân tách bởi 1 ô trống)

Tôi mô tả hơi vụng về, mong xem thêm ở file gửi kèm.

Rất mong được mọi người giúp đỡ.

tôi mụ mị với cthức rồi,
góp bạn một đoạn code
Mã:
Sub tachcot()

Dim arr As Variant, kq(), i, j, k As Long
arr = [b5:b64].Value
ReDim kq(1 To UBound(arr), 1 To 1)
j = 1
For i = 1 To UBound(arr)
    If IsEmpty(arr(i, 1)) Then
        j = j + 1
        ReDim Preserve kq(1 To UBound(arr), 1 To j)
        k = 0
    Else
    k = k + 1
    kq(k, j) = arr(i, 1)
    End If
Next

[f14].Resize(i, j).Value = kq


End Sub
 
Hàm của bạn dùng tốt. Nhưng chỉ hiện được 1 cột tức 1 nhóm đầu tiên.
Không rõ tôi chưa biết điều chỉnh công thức hay bạn chưa hiểu hết ý của tôi. Ý của tôi là các cột từ F đến R cài sẵn công thức để tự hiện nhóm các dữ liệu còn lại
Bạn giúp tôi tiếp nhé.
Bạn đã kéo ngang dọc công thức chưa? Hay bạn mới chỉ kéo 1 cột thôi?

Bạn thử kéo cả sang các cột khác và phản hồi nhé
 
tôi mụ mị với cthức rồi,
góp bạn một đoạn code
Mã:
Sub tachcot()

Dim arr As Variant, kq(), i, j, k As Long
arr = [b5:b64].Value
ReDim kq(1 To UBound(arr), 1 To 1)
j = 1
For i = 1 To UBound(arr)
    If IsEmpty(arr(i, 1)) Then
        j = j   1
        ReDim Preserve kq(1 To UBound(arr), 1 To j)
        k = 0
    Else
    k = k   1
    kq(k, j) = arr(i, 1)
    End If
Next

[f14].Resize(i, j).Value = kq

End Sub


Code của bạn rất tuyệt. Hoạt động đúng mong muốn của tôi.

Do tôi không biết nhiều về code nên khi phát sinh lỗi, hoặc cần điều chỉnh tôi thường không biết cách xử lý vì thế ngại dùng.
 
Lần chỉnh sửa cuối:


Sub test()
Dim i As Long, k As Long, arr, Rarr
Dim Mg(1 To 10)
arr = Sheet1.Range("B5:B" & Sheet1.Range("B65536").End(xlUp).Row)
ReDim Rarr(1 To UBound(arr), 1 To 100)
Mg(1) = 1
For i = 1 To UBound(arr)
If arr(i, 1) <> "" Then
k = k + 1
Rarr(k, Mg(1)) = arr(i, 1)
Else
k = 0
Mg(1) = Mg(1) + 1
End If
Next
Sheet1.Range("F15").Resize(100, 100) = Rarr
End Sub
Bạn xem có được không nhé
 
Cảm ơn bạn. Tôi thích dùng hàm hơn bạn ạ. }}}}}}}}}}
 
Lần chỉnh sửa cuối:
tôi mụ mị với cthức rồi,
góp bạn một đoạn code
Mã:
Sub tachcot()

Dim arr As Variant, kq(), i, j, k As Long
arr = [b5:b64].Value
ReDim kq(1 To UBound(arr), 1 To 1)
j = 1
For i = 1 To UBound(arr)
    If IsEmpty(arr(i, 1)) Then
        j = j + 1
        ReDim Preserve kq(1 To UBound(arr), 1 To j)
        k = 0
    Else
    k = k + 1
    kq(k, j) = arr(i, 1)
    End If
Next

[f14].Resize(i, j).Value = kq


End Sub

Đọc code thấy vướng vướng chỗ Resize(i,j).
 
Bạn đã kéo ngang dọc công thức chưa? Hay bạn mới chỉ kéo 1 cột thôi?

Bạn thử kéo cả sang các cột khác và phản hồi nhé

Chân thành cảm ơn sự giúp đỡ của bạn.

Thú thật với bạn tôi chưa kéo ngang công thức, mới chỉ kéo dọc công thức nên mới ý kiến như vậy. Rất xin lỗi bạn và mọi người đã đóng góp.

Vẫn công thức của bạn, tôi xoá 1 dòng trống phía trên dòng có công thức của bạn, thì kết quả báo lỗi. Tôi đã xem rất kỹ công thức của bạn để sửa mới sau khi xoá mà không sao thành công. Bạn giảng 1 chút về công thức của bạn được không ?
 
Lần chỉnh sửa cuối:
Em muốn tách 1 ô dữ liệu dạng công thức =2,5*3*2 thành các 3 ô khác nhau là 2,5; 3; 2. các bác giúp em với, cảm ơn.
 
Em đã thực hiện được rồi. Cảm ơn bác Hai lua nhé --=0
 
Nhờ các Pro giúp dùm mình cách tách 1 cột thành nhiều cột với số dòng của cột tách bằng nhau.
 

File đính kèm

Nhờ các Pro giúp dùm mình cách tách 1 cột thành nhiều cột với số dòng của cột tách bằng nhau.
CT này cho ô F5 : =IFERROR(OFFSET($B$4,SMALL(IF(MOD($B$5:$B$21,5)=CHOOSE(ROW(1:1),1,2,3,4,0),ROW($B$5:$B$21)-4,""),COLUMN()-5),0),"")

Kết thúc bằng CTRL+SHIFT+ENTER

Sau đó kéo sang kéo xuống
 
Lần chỉnh sửa cuối:
Bạn lưu ý chỗ hàm CHOOSE ở trên, không biết làm sao lại tự dưng xuất hiện khoảng trống giữa chữ H và O, cũng chẳng biết vì sao khi đăng lên diễn đàn lại cứ bị vậy. Thế nên khi Copy công thức trên về bạn phải xóa bớt khoảng trống đó đi nha, nếu không sẽ không ra kết quả đâu bạn ạ.
 
Thanks các Pro nhé! Cảm ơn mọi người nhiều lắm lắm
 
Các a viết hộ em công thức tách thành 6 cột với. ( code VBA thì càng tốt) giải thích hàm hoặc code cho em học hỏi với. cám ơn các anh
 

File đính kèm

Web KT

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

Back
Top Bottom