Chuyển dữ liệu từ cột dọc sang hàng ngang

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

cuonggps

Thành viên mới
Tham gia
9/12/11
Bài viết
33
Được thích
6
Em chào các bác. Em không hiểu biết quá nhiều về excel và có một file excel mong muốn các bác giúp em xử lý với. Em có dữ liệu ở cột A và cột B, sau khi lọc trùng lặp thì nó ra cái file như em đính kèm. Các giá trị ở cột A tương ứng với giá trị ở cột B, mà giờ cột A có các dữ liệu giống nhau.
Em muốn chuyển từ cột dọc sang hàng ngang như file đính kèm.
Chỉ lấy giá trị giống nhau duy nhất ở cột A và các giá trị tương ứng ở cột B chuyển sang hàng ngang.
Em nói có vẻ hơi khó hiểu. Các bác xem file rồi giúp em với ạ.
Mong phản hồi sớm của các bác ạ. Em cảm ơn trước ạ.
 

File đính kèm

Em chào các bác. Em không hiểu biết quá nhiều về excel và có một file excel mong muốn các bác giúp em xử lý với. Em có dữ liệu ở cột A và cột B, sau khi lọc trùng lặp thì nó ra cái file như em đính kèm. Các giá trị ở cột A tương ứng với giá trị ở cột B, mà giờ cột A có các dữ liệu giống nhau.
Em muốn chuyển từ cột dọc sang hàng ngang như file đính kèm.
Chỉ lấy giá trị giống nhau duy nhất ở cột A và các giá trị tương ứng ở cột B chuyển sang hàng ngang.
Em nói có vẻ hơi khó hiểu. Các bác xem file rồi giúp em với ạ.
Mong phản hồi sớm của các bác ạ. Em cảm ơn trước ạ.
Mã:
D1 =A1
Mã:
D2 =IFERROR(INDEX($A$1:$A$350,LOOKUP(2,1/($A$1:$A$350=D1),ROW($2:$350))),"")
Copy xuống
Mã:
E1 =IF(COLUMN(A1)<=COUNTIF($A$1:$A$350,$D1),INDEX($B$1:$B$350,MATCH($D1,$A$1:$A$350,0)+COLUMN(A1)-1),"")
Copy cho các ô còn lại
 

File đính kèm

Mã:
D1 =A1
Mã:
D2 =IFERROR(INDEX($A$1:$A$350,LOOKUP(2,1/($A$1:$A$350=D1),ROW($2:$350))),"")
Copy xuống
Mã:
E1 =IF(COLUMN(A1)<=COUNTIF($A$1:$A$350,$D1),INDEX($B$1:$B$350,MATCH($D1,$A$1:$A$350,0)+COLUMN(A1)-1),"")
Copy cho các ô còn lại
dạ em cảm ơn bác rất nhiều ạ <3
 
Mã:
D1 =A1
Mã:
D2 =IFERROR(INDEX($A$1:$A$350,LOOKUP(2,1/($A$1:$A$350=D1),ROW($2:$350))),"")
Copy xuống
Mã:
E1 =IF(COLUMN(A1)<=COUNTIF($A$1:$A$350,$D1),INDEX($B$1:$B$350,MATCH($D1,$A$1:$A$350,0)+COLUMN(A1)-1),"")
Copy cho các ô còn lại
 
Lần chỉnh sửa cuối:
Mã:
D1 =A1
Mã:
D2 =IFERROR(INDEX($A$1:$A$350,LOOKUP(2,1/($A$1:$A$350=D1),ROW($2:$350))),"")
Copy xuống
Mã:
E1 =IF(COLUMN(A1)<=COUNTIF($A$1:$A$350,$D1),INDEX($B$1:$B$350,MATCH($D1,$A$1:$A$350,0)+COLUMN(A1)-1),"")
Copy cho các ô còn lại
Alo bác ơi, em làm mà dữ liệu nhiều nó vẫn không hết. Dữ liệu cột A của em lên đến 10k, nhưng nó chỉ kéo được đến 200 điểm trùng lặp. Em có kiểm tra lại thì thấy chưa hết. Mà làm 10k dữ liệu ở cột A như thế máy nó cũng lag, mà làm ít thì lại phải làm nhiều lần. Bác giúp em làm 3k dữ liệu 1 lần với ạ.
Bác xem chỉnh sửa giúp em với ạ.
 
Lần chỉnh sửa cuối:
Alo bác ơi, em làm mà dữ liệu nhiều nó vẫn không hết. Dữ liệu cột A của em lên đến 10k, nhưng nó chỉ kéo được đến 200 điểm trùng lặp. Em có kiểm tra lại thì thấy chưa hết. Mà làm 10k dữ liệu ở cột A như thế máy nó cũng lag, mà làm ít thì lại phải làm nhiều lần. Bác giúp em làm 3k dữ liệu 1 lần với ạ.
Bác xem chỉnh sửa giúp em với ạ.
Dữ liệu nhiều nên dùng macro VBA
 
Click tuần tự từng nút,
quan sát và kiểm tra lại coi đã dúng yêu cầu chưa...
 

File đính kèm

Lần chỉnh sửa cuối:

File đính kèm

Lần chỉnh sửa cuối:
dùng như nào ạ bác, giúp em với ạ :(
Bài đã được tự động gộp:


Không được bác ạ. Bác xem giúp em với.
bấm mũi tên chạy code
Mã:
Sub XYZ()
  Dim arr(), res()
  Dim sRow&, sr&, i&, j&, k&, ma
 
  With Sheets("Sheet1") '"Sheet1" là ten sheet chua du lieu
    arr = .Range("A1", .Range("B" & Rows.Count).End(xlUp)).Value
  End With
  sRow = UBound(arr)
  sr = sRow / 5 'So dong ket qua. Neu Code bi loi, chinh so 5 thành 4, 3 ,2
  ReDim res(1 To sr, 1 To 20)
  For i = 1 To sRow
    If ma <> arr(i, 1) Then
      ma = arr(i, 1)
      k = k + 1
      j = 2
      res(k, 1) = ma
      res(k, j) = arr(i, 2)
    Else
      j = j + 1
      If j > UBound(res, 2) Then ReDim Preserve res(1 To sr, 1 To UBound(res, 2) + 20)
      res(k, j) = arr(i, 2)
    End If
  Next i
  With Sheets("Sheet1") '"Sheet1" là ten sheet ket qua
    .Range("D1").Resize(k, UBound(res, 2)).NumberFormat = "#"
    .Range("D1").Resize(k, UBound(res, 2)) = res
  End With
End Sub
 

File đính kèm

bấm mũi tên chạy code
Mã:
Sub XYZ()
  Dim arr(), res()
  Dim sRow&, sr&, i&, j&, k&, ma
 
  With Sheets("Sheet1") '"Sheet1" là ten sheet chua du lieu
    arr = .Range("A1", .Range("B" & Rows.Count).End(xlUp)).Value
  End With
  sRow = UBound(arr)
  sr = sRow / 5 'So dong ket qua. Neu Code bi loi, chinh so 5 thành 4, 3 ,2
  ReDim res(1 To sr, 1 To 20)
  For i = 1 To sRow
    If ma <> arr(i, 1) Then
      ma = arr(i, 1)
      k = k + 1
      j = 2
      res(k, 1) = ma
      res(k, j) = arr(i, 2)
    Else
      j = j + 1
      If j > UBound(res, 2) Then ReDim Preserve res(1 To sr, 1 To UBound(res, 2) + 20)
      res(k, j) = arr(i, 2)
    End If
  Next i
  With Sheets("Sheet1") '"Sheet1" là ten sheet ket qua
    .Range("D1").Resize(k, UBound(res, 2)).NumberFormat = "#"
    .Range("D1").Resize(k, UBound(res, 2)) = res
  End With
End Sub
Em thay bằng dữ liệu khác và bấm mũi tên nó báo lỗi bác ạ. Bác xem lại em với.
 

File đính kèm

Em có file dữ liệu có chung nhu cầu xử lý dữ liệu như chủ top ạ, nhưng số lượng cột cần xử lý nhiều hơn, chi tiết em đính kèm file
đây chỉ là file mẫu, dữ liệu em cần xử lý rất lớn, nên các bác hướng dẫn thêm trong trường hợp thêm số lượng dòng ở sheet data và tăng số lượng cột ở sheet bài toán ạ
Nhờ các bác cao thủ giúp đỡ em với ạ, em cảm ơn nhiều
 

File đính kèm

Em có file dữ liệu có chung nhu cầu xử lý dữ liệu như chủ top ạ, nhưng số lượng cột cần xử lý nhiều hơn, chi tiết em đính kèm file
đây chỉ là file mẫu, dữ liệu em cần xử lý rất lớn, nên các bác hướng dẫn thêm trong trường hợp thêm số lượng dòng ở sheet data và tăng số lượng cột ở sheet bài toán ạ
Nhờ các bác cao thủ giúp đỡ em với ạ, em cảm ơn nhiều
Chạy code . . .
Mã:
Sub XYZ()
  Dim arr(), res()
  Dim sRow&, i&, j&, c&, k&, ma
 
  With Sheets("Data") '"Data" là ten sheet chua du lieu
    arr = .Range("A2", .Range("G" & Rows.Count).End(xlUp)).Value
  End With
  sRow = UBound(arr)
  ReDim res(1 To sRow, 1 To 4 + 9 * 3)
  For i = 1 To sRow
    If ma <> arr(i, 1) Then
      ma = arr(i, 1)
      k = k + 1
      For j = 1 To 4
        If c < 6 Then c = j Else c = c + 9
        res(k, j) = arr(i, j)
      Next j
    End If
    res(k, j) = arr(i, 5)
    res(k, j + 9) = arr(i, 6)
    res(k, j + 18) = arr(i, 7)
    j = j + 1
  Next i
  With Sheet4 'sheet ket qua
    i = .Range("G" & Rows.Count).End(xlUp).Row
    If i > 1 Then .Range("A2:AE" & i).Clear
    .Range("A2").Resize(k, 4).NumberFormat = "@"
    .Range("A2").Resize(k, UBound(res, 2)) = res
    .Range("A2").Resize(k, UBound(res, 2)).Borders.LineStyle = 1
  End With
End Sub
 
Lần chỉnh sửa cuối:
Chạy code . . .
Mã:
Sub XYZ()
  Dim arr(), res()
  Dim sRow&, i&, j&, c&, k&, ma
 
  With Sheets("Data") '"Data" là ten sheet chua du lieu
    arr = .Range("A2", .Range("G" & Rows.Count).End(xlUp)).Value
  End With
  sRow = UBound(arr)
  ReDim res(1 To sRow, 1 To 4 + 9 * 3)
  For i = 1 To sRow
    If ma <> arr(i, 1) Then
      ma = arr(i, 1)
      k = k + 1
      For j = 1 To 4
        If c < 6 Then c = j Else c = c + 9
        res(k, j) = arr(i, j)
      Next j
    End If
    res(k, j) = arr(i, 5)
    res(k, j + 9) = arr(i, 6)
    res(k, j + 18) = arr(i, 7)
    j = j + 1
  Next i
  With Sheet4 'sheet ket qua
    i = .Range("G" & Rows.Count).End(xlUp).Row
    If i > 1 Then .Range("A2:AE" & i).Clear
    .Range("A2").Resize(k, 4).NumberFormat = "@"
    .Range("A2").Resize(k, UBound(res, 2)) = res
    Range("A2").Resize(k, UBound(res, 2)).Borders.LineStyle = 1
  End With
End Sub
Em làm được rồi ạ, em cảm ơn bác nhiều
 
Web KT

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

Back
Top Bottom