Một cách viết:Em có 1 bảng ví dụ như file đính kèm, giờ em muốn dùng VBA để chuyển dữ liệu từ sheet Nguon sang sheet Ketqua theo cách thức dữ liệu hàng sang dữ liệu cột.
Dữ liệu thực tế của em rất dài, khoảng 5000 hàng và 50 cột.
Public Sub Chuyen()
    Dim Vung As Range, VungChuyen As Range, I As Long, J As Long, K As Long, Mg As Variant
    Set Vung = Sheets("Nguon").Range(Sheets("Nguon").[A1], Sheets("Nguon").[A50000].End(xlUp))
    ReDim Mg(1 To Sheets("Nguon").Range("A1").CurrentRegion.Cells.Count, 1 To 2)
        For I = 1 To Vung.Rows.Count
            Set VungChuyen = Range(Vung(I), Vung(I).End(xlToRight))
                For J = 2 To VungChuyen.Columns.Count
                    K = K + 1
                    Mg(K, 1) = Vung(I): Mg(K, 2) = VungChuyen(J)
                Next J
        Next I
    [E2:F50000].ClearContents
    [E2].Resize(K, 2) = Mg
End Sub
	
Các ace giúp em phần này với.
Xem giúp sao code chạy không đúng.
Phần màu vàng là kết quả em cần.
Em cảm ơn!
Sub chuyendoi()
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim wb As Workbook
  Set wb = ThisWorkbook
  For i = 2 To 6
    For j = 2 To 4
      [COLOR=#ff0000]For k = 1 To 15
        Cells(k, 7) = Cells(1, i) & Cells(j, 1)
      Next k[/COLOR]
    Next j
  Next i
End Sub
	Sub chuyendoi()
  Dim i As Long, j As Long, k As Long
  For i = 2 To 6
    For j = 2 To 4
     [COLOR=#0000cd] k = k + 1
      Cells(k, 7) = Cells(1, i) & Cells(j, 1)
      Cells(k, 8) = Cells(j, i)[/COLOR]
    Next j
  Next i
End Sub
	

Gửi bạn tham khảo:Các anh giúp em với, tiêu chí chuyển data từ hàng ngang sang hàng dọc của em cũng như chủ thớt.
Tuy nhiên em có số lượng cột nhiều và dòng nhiều hơn. Em cũng ko biết miêu tả sao, em có đính kèm file, mong các anh giúp em ạ.
Sub Rows2Columns()
    Dim sArr(), Res()
    Dim I As Long, J As Long, K As Long
    
    sArr() = Sheet5.Range("A1", Sheet5.Range("A1").End(xlDown)).Resize(, 8).Value
    ReDim Res(1 To UBound(sArr, 1) * UBound(sArr, 2), 1 To 4)
    
    For I = 2 To UBound(sArr, 1)
        For J = 3 To 8
            K = K + 1
            Res(K, 1) = sArr(I, 1): Res(K, 2) = sArr(I, 2)
            Res(K, 3) = sArr(1, J): Res(K, 4) = sArr(I, J)
        Next J
    Next I
    
    Sheet1.Range("J2").Resize(K, 4) = Res
    MsgBox "Done", vbInformation, "GPE"
End Sub
	


bác cho em hỏi là nếu như dữ liệu hàng ban đầu có dữ liệu trùng nhau thì khi chuyển sang cột mình muốn xoá bỏ 1 dữ liệu trùng thì có thể sửa lại mã này như thế nào không ạ!Gửi bạn tham khảo:
PHP:Sub Rows2Columns() Dim sArr(), Res() Dim I As Long, J As Long, K As Long sArr() = Sheet5.Range("A1", Sheet5.Range("A1").End(xlDown)).Resize(, 8).Value ReDim Res(1 To UBound(sArr, 1) * UBound(sArr, 2), 1 To 4) For I = 2 To UBound(sArr, 1) For J = 3 To 8 K = K + 1 Res(K, 1) = sArr(I, 1): Res(K, 2) = sArr(I, 2) Res(K, 3) = sArr(1, J): Res(K, 4) = sArr(I, J) Next J Next I Sheet1.Range("J2").Resize(K, 4) = Res MsgBox "Done", vbInformation, "GPE" End Sub


Bạn nên lập 1 chủ đề mới, đưa dữ liệu giả định và nêu rõ yêu cầu.bác cho em hỏi là nếu như dữ liệu hàng ban đầu có dữ liệu trùng nhau thì khi chuyển sang cột mình muốn xoá bỏ 1 dữ liệu trùng thì có thể sửa lại mã này như thế nào không ạ!



em gửi file lên đây mong bác có thể giúp em sửa lại bỏ qua các mã trùng ạ!Bạn nên lập 1 chủ đề mới, đưa dữ liệu giả định và nêu rõ yêu cầu.
Mọi người sẽ có phương án trợ giúp cho bạn ngay thôi.



dạ em cảm ơn bác nhiều ạ. đúng như ý em rồi ạ.Vẫn code của bạn, tôi chỉ thêm phần chạy Dic để loại bỏ dòng trùng thôi.
Có thể dùng Dic ngay trong vòng lặp đầu tiên.Vẫn code của bạn, tôi chỉ thêm phần chạy Dic để loại bỏ dòng trùng thôi.
Sub LOCKH()
    Dim ArrDH(), KQ()
    Dim i As Long, j As Long, k As Long
    Dim Dic As Object, Txt As String
  Set Dic = CreateObject("Scripting.Dictionary")
    ArrDH() = Sheet2.Range("A4", Sheet2.Range("A4").End(xlDown)).Resize(, 37).Value
    ReDim KQ(1 To UBound(ArrDH, 1) * UBound(ArrDH, 2), 1 To 3)
     For i = 1 To UBound(ArrDH, 1)
        For j = 8 To 22
            If ArrDH(i, j) <> "" Then
                Txt = ArrDH(i, 1) & "#" & ArrDH(i, j)
                If Not Dic.Exists(Txt) Then
                        k = k + 1
                        Dic.Item(Txt) = ""
                    KQ(k, 1) = ArrDH(i, 1)
                    KQ(k, 2) = ArrDH(i, 3)
                    KQ(k, 3) = ArrDH(i, j)
                End If
            End If
        Next j
    Next i
    Sheet1.Range("A3").Resize(20000, 3).ClearContents
    Sheet1.Range("A3").Resize(k, 3) = KQ
Set Dic = Nothing
End Sub
	anh ơi,em có file này, em muốn chuyển dữ liệu cột (D) ở sheet2 thành hàng , anh có thể viết code cho file này giúp em được không, em cảm ơnGửi bạn tham khảo:
PHP:Sub Rows2Columns() Dim sArr(), Res() Dim I As Long, J As Long, K As Long sArr() = Sheet5.Range("A1", Sheet5.Range("A1").End(xlDown)).Resize(, 8).Value ReDim Res(1 To UBound(sArr, 1) * UBound(sArr, 2), 1 To 4) For I = 2 To UBound(sArr, 1) For J = 3 To 8 K = K + 1 Res(K, 1) = sArr(I, 1): Res(K, 2) = sArr(I, 2) Res(K, 3) = sArr(1, J): Res(K, 4) = sArr(I, J) Next J Next I Sheet1.Range("J2").Resize(K, 4) = Res MsgBox "Done", vbInformation, "GPE" End Sub
anh ơi,em có file này, em muốn chuyển dữ liệu cột (D) ở sheet2 thành hàng , anh có thể viết code cho file này giúp em được không, em cảm ơn
anh ơi em nhầm, em muốn chuyển dữ liệu cột (B) ở sheet2 thành hàng , anh có thể viết code cho file này giúp em được không, em cảm ơn