Mong a/c giúp đỡ chuyển cột thành dòng trong (gồm các cột trùng tiêu đề)

Liên hệ QC

hamy2016

Thành viên mới
Tham gia
12/12/16
Bài viết
18
Được thích
1
Rất mong anh chị giúp đỡ. Em có bảng excel dưới đây và kết quả mong muốn. rất mong ace giúp đỡ em ạ. em tìm nát cái goolge 5 ngày rồi mà trình độ non quá chưa tìm được cách ạ. Hic. Em có gửi file đính kèm ở dưới ạ.

Em muốn chuyển dữ liệu từ cột dọc thành cột ngang với các cột được chia giống bảng "Mong muốn"


cot du lieu.PNGket qua mong muon.PNG
 

File đính kèm

  • chuyencotthanhdong.xlsx
    440.6 KB · Đọc: 19
Lần chỉnh sửa cuối:
Rất mong anh chị giúp đỡ. Em có bảng excel dưới đây và kết quả mong muốn. rất mong ace giúp đỡ em ạ. em tìm nát cái goolge 5 ngày rồi mà trình độ non quá chưa tìm được cách ạ. Hic. Em có gửi file đính kèm ở dưới ạ.

Em muốn chuyển dữ liệu từ cột dọc thành cột ngang với các cột được chia giống bảng "Mong muốn"


View attachment 263792View attachment 263793
Mới đưa lên mà hối dữ vậy.
Nhấn nút và xem kết quả, dữ liệu nhiều nên tốc độ hơi chậm.
 

File đính kèm

  • chuyencotthanhdong.xlsm
    608.3 KB · Đọc: 9
Upvote 0
Bài 3: 16 giây
Bài 4: 63 giây và đảo lộn thứ tự cột, dư 2 cột.
. . .
Viết la6i để đỡ tốn thời gian hơn xíu:
$$$$@
PHP:
Sub Cot_SangDong()
 Dim Rws As Long, W As Integer, Tmr As Double
 Dim Rng As Range, sRng As Range, Cls As Range
 Dim MyAdd As String
 
 Rws = [B1].CurrentRegion.Rows.Count
 Set Rng = [A1].Resize(Rws):                    Tmr = Timer()
 Application.ScreenUpdating = False
 For Each Cls In Range([e2], [e2].End(xlToRight))
    ReDim Arr(1 To Rws, 1 To 1)
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:          Arr(W, 1) = sRng.Offset(, 1).Value
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        Cls.Offset(1).Resize(W).Value = Arr():  W = 0
    End If
 Next Cls
 Application.ScreenUpdating = True
 MsgBox Timer() - Tmr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thêm cách dùng hàm để bạn nào chưa biết VBA thì có thể tham khảo.
 

File đính kèm

  • chuyencotthanhdong.xlsx
    2.2 MB · Đọc: 6
Upvote 0
Bài 3: 16 giây
Bài 4: 63 giây và đảo lộn thứ tự cột, dư 2 cột
Code này 0.2 giây:
PHP:
Sub ColToRows()
Dim SArr(), RArr(), LastRw As Long, Rws As Long
Dim k As Long, j As Long
Application.ScreenUpdating = False
t = Timer
LastRw = [A100000].End(xlUp).Row
SArr = Range("B2:B" & LastRw).Value
Rws = UBound(SArr, 1) / 22 + 1
Range("E3:Z10000").ClearContents
ReDim RArr(1 To Rws, 1 To 22)
k = 1
For i = 1 To UBound(SArr, 1) 
    j = j + 1
    If j = 23 Then j = 1: k = k + 1
    RArr(k, j) = SArr(i, 1)
Next
Cells(3, 5).Resize(k, 22) = RArr
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Rất mong anh chị giúp đỡ. Em có bảng excel dưới đây và kết quả mong muốn. rất mong ace giúp đỡ em ạ. em tìm nát cái goolge 5 ngày rồi mà trình độ non quá chưa tìm được cách ạ. Hic. Em có gửi file đính kèm ở dưới ạ.

Em muốn chuyển dữ liệu từ cột dọc thành cột ngang với các cột được chia giống bảng "Mong muốn"


View attachment 263792View attachment 263793
Chạy code dưới đây
Mã:
Sub chuyenCotDong()
Dim Nguon
Dim Kq
Dim i As Long, j As Long, k As Long, t As Long
Nguon = Sheet1.Range("A2").CurrentRegion
ReDim Kq(1 To UBound(Nguon), 1 To 1)
With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(Nguon)
        If .exists(Nguon(i, 1)) = 0 Then
            .Item(Nguon(i, 1)) = 1000000 + .Count
            ReDim Preserve Kq(1 To UBound(Nguon), 1 To .Count)
            Kq(1, .Count) = Nguon(i, 2)
        Else
            k = .Item(Nguon(i, 1)) / 1000000 + 1
            j = .Item(Nguon(i, 1)) Mod 1000000 + 1
            .Item(Nguon(i, 1)) = .Item(Nguon(i, 1)) + 1000000
            Kq(k, j) = Nguon(i, 2)
            
            If t < k Then t = k
        End If
    Next i
    Sheet1.Range("D1").Resize(1, .Count) = .Keys
    Sheet1.Range("D2").Resize(t, .Count) = Kq
    Sheet1.Range("D2").Resize(t, .Count).Columns.AutoFit
End With
End Sub
 
Upvote 0
Mới đưa lên mà hối dữ vậy.
Nhấn nút và xem kết quả, dữ liệu nhiều nên tốc độ hơi chậm.
Anh ơi em cảm ơn nhiều lắm ạ. nhấn nút là nhấn nút gì ạ. Em thấy a dùm hàm và thường thì em sẽ cầm chuột kéo cho tới hết ạ. có nút nào bấm phát ra không anh nhỉ. hihi
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

  • chuyencotthanhdong.xlsb
    215.7 KB · Đọc: 7
Upvote 0
Anh ơi em cảm ơn nhiều lắm ạ. nhấn nút là nhấn nút gì ạ. Em thấy a dùm hàm và thường thì em sẽ cầm chuột kéo cho tới hết ạ. có nút nào bấm phát ra không anh nhỉ. hihi
Trời ạ, hỏi trong Box Lập trình mà không biết cái nút là cái nào thì chết rồi.
Hàm là trong Sheet2, còn cái nút màu xanh ngay đầu cột C: D của Sheet1 có tên là Lặp cột sang dòng
 
Upvote 0
Trời ạ, hỏi trong Box Lập trình mà không biết cái nút là cái nào thì chết rồi.
Hàm là trong Sheet2, còn cái nút màu xanh ngay đầu cột C: D của Sheet1 có tên là Lặp cột sang dòng
Vâng. em tấm chiếu mới ạ. Em xem rồi a ơi. không có cái đó. Nhưng thôi cũng ko sao ạ. em kéo tay có kết quả là mừng rồi. em cảm ơn a nhiều nhé. Cảm ơn tất cả mọi người.
 

File đính kèm

  • xemrkoco.PNG
    xemrkoco.PNG
    69.8 KB · Đọc: 10
Upvote 0
Bài 3: 16 giây
Bài 4: 63 giây và đảo lộn thứ tự cột, dư 2 cột
Code này 0.2 giây:
PHP:
Sub ColToRows()
Dim SArr(), RArr(), LastRw As Long, Rws As Long
Dim k As Long, j As Long
Application.ScreenUpdating = False
t = Timer
LastRw = [A100000].End(xlUp).Row
SArr = Range("B2:B" & LastRw).Value
Rws = UBound(SArr, 1) / 22 + 1
Range("E3:Z10000").ClearContents
ReDim RArr(1 To Rws, 1 To 22)
k = 1
For i = 1 To UBound(SArr, 1)
    j = j + 1
    If j = 23 Then j = 1: k = k + 1
    RArr(k, j) = SArr(i, 1)
Next
Cells(3, 5).Resize(k, 22) = RArr
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub
Chạy thì có nhanh đó, nhưng cho tui hỏi Thầy trong em này
Rws = UBound(SArr, 1) / 22 + 1
Con số 22 ở đâu ra vậy?
Híc, chắc chơi ăn gian rồi
 
Upvote 0
thấy có 22 cột,hổng bít phải hok o_O
Chỉ đúng một phần khi thấy được kết quả thôi, nếu không dựa vô quy luật của cột A thì còn số 22 nó chả có ý nghĩa gì, quy luật nó là sự lặp đi lặp lại từ chữ q đến v là 22 Cell, căn cứ vào quy luật mới lấy dữ liệu từ cột B để đưa vào phần kết quả bắt đầu từ cột E: Z
 
Lần chỉnh sửa cuối:
Upvote 0
Chạy thì có nhanh đó, nhưng cho tui hỏi Thầy trong em này
Rws = UBound(SArr, 1) / 22 + 1
Con số 22 ở đâu ra vậy?
Híc, chắc chơi ăn gian rồi
Tiêu đề kết quả (hình bài 1) có sẵn 22 cột. Quy luật cột A (xem như tiêu đề) cũng chu kỳ 22. Đề bài sao làm vậy á.
Nhưng nhanh cũng chẳng để làm gì, người ta thích công thức ba mươi mấy ngàn ô cơ.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom