Chuyển dữ liệu từ hàng ngang thành hàng dọc và thêm dòng

Liên hệ QC

RachelS2BB

Thành viên mới
Tham gia
2/10/18
Bài viết
3
Được thích
0
Hiện tại mình đang gặp phải vấn đề như sau:
Dữ liệu mình đang có được sắp xếp theo dạng cột:
Untitled.png

Và mình muốn chuyển đổi dữ liệu thành dạng ngang như thế này:
Untitled 1.png
Dữ liệu mình cần xử lý tương đối lớn thì không biết có cách nào có thể làm được như vậy không?
Mình có đính kèm file ví dụ để mọi người rõ.
Mong mọi người giúp đỡ. Thanks all.
 

File đính kèm

Lần chỉnh sửa cuối:
Hiện tại mình đang gặp phải vấn đề như sau:
Dữ liệu mình đang có được sắp xếp theo dạng cột:
View attachment 204973

Và mình muốn chuyển đổi dữ liệu thành dạng ngang như thế này:
View attachment 204974
Dữ liệu mình cần xử lý tương đối lớn thì không biết có cách nào có thể làm được như vậy không?
Mong mọi người giúp đỡ. Cảm ơn all.
Gửi file lên làm cho tiện bạn
 
Vì dữ liệu công ty nên không public được bạn ơi. Bạn có cách nào chỉ mình với.
 
Vì dữ liệu công ty nên không public được bạn ơi. Bạn có cách nào chỉ mình với.
Sao bạn không biết làm File với dữ liệu giả định gần giống với thực tế rồi gửi lên để người giúp có cái mà thử và lường trước những trường hợp có thể sảy ra.
 
Thử cái này xem
Mã:
Sub doc_ngang()
Dim sh As Worksheet
Dim shn As Worksheet
Dim d As Long
Dim dn As Long
Dim n As Long
Dim i As Long
Dim j As Long
Set sh = Sheets("Ngang")
Set shn = Sheets("Doc")
d = sh.Range("A" & Rows.Count).End(3).Row
For i = 1 To d
  n = Application.WorksheetFunction.CountA(sh.Range(i & ":" & i))
  dn = shn.Range("A" & Rows.Count).End(3).Row + 1
  For j = 1 To n - 1
    shn.Range("A" & dn).Offset(j - 1, 0).Value = sh.Range("A" & i).Value
    shn.Range("B" & dn).Offset(j - 1, 0).Value = sh.Range("A" & i).Offset(0, j).Value
  Next j
Next i
End Sub
Bạn đặt tên 2 sheet lại cho phù hợp nha:
 
Hiện tại mình đang gặp phải vấn đề như sau:
Dữ liệu mình đang có được sắp xếp theo dạng cột:
View attachment 204973

Và mình muốn chuyển đổi dữ liệu thành dạng ngang như thế này:
View attachment 204974
Dữ liệu mình cần xử lý tương đối lớn thì không biết có cách nào có thể làm được như vậy không?
Mong mọi người giúp đỡ. Cảm ơn all.
Thử:
PHP:
Option Explicit
Sub abc()
    Dim a, b(), i&, j&, k&
    With Sheets(1)
        a = .Range("A1", .Range("A1").CurrentRegion).Value
    End With
    ReDim b(1 To UBound(a) * UBound(a, 2), 1 To 2)
    For i = 1 To UBound(a)
        For j = 2 To UBound(a, 2)
            If a(i, j) > 0 Then
                k = k + 1
                b(k, 1) = a(i, 1)
                b(k, 2) = a(i, j)
            End If
        Next
    Next
    With Sheets(2)
        .UsedRange.ClearContents
        .Range("A1:B1").Resize(k).Value = b
    End With
End Sub
 

File đính kèm

Mình gửi file Test nhé. Trong file có 97 dòng và 8 cột (1 cột Code và 7 cột Value) -> cần chuyển thành 679 dòng và 2 cột (Code và Value). Mong mọi người giúp đỡ nhé. Cảm ơn mọi người.
 

File đính kèm

Thử với 1 việc duy nhất là bấm nút:
PHP:
Option Explicit
Sub abc2()
    Dim a, b(), i&, j&, k&
    With Sheets("Input")
        a = .Range("A4", .Range("A4").End(xlDown)).Resize(, 8).Value
    End With
    ReDim b(1 To UBound(a) * UBound(a, 2), 1 To 2)
    For i = 1 To UBound(a)
        For j = 2 To UBound(a, 2)
            If a(i, j) > 0 Then
                k = k + 1
                b(k, 1) = a(i, 1)
                b(k, 2) = a(i, j)
            End If
        Next
    Next
    With Sheets("Output")
        .UsedRange.ClearContents
        .Range("A1:B1").Resize(k).Value = b
    End With
End Sub
 

File đính kèm

Thử với 1 việc duy nhất là bấm nút:
PHP:
Option Explicit
Sub abc2()
    Dim a, b(), i&, j&, k&
    With Sheets("Input")
        a = .Range("A4", .Range("A4").End(xlDown)).Resize(, 8).Value
    End With
    ReDim b(1 To UBound(a) * UBound(a, 2), 1 To 2)
    For i = 1 To UBound(a)
        For j = 2 To UBound(a, 2)
            If a(i, j) > 0 Then
                k = k + 1
                b(k, 1) = a(i, 1)
                b(k, 2) = a(i, j)
            End If
        Next
    Next
    With Sheets("Output")
        .UsedRange.ClearContents
        .Range("A1:B1").Resize(k).Value = b
    End With
End Sub
Cột đầu tiên có số 0 không biết có lấy không :)
 
Web KT

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

Back
Top Bottom