Giúp đoạn code VBA chuyển số liệu dạng cột sang dạng hàng

  • Thread starter Thread starter kan
  • Ngày gửi Ngày gửi
Liên hệ QC

kan

Thành viên mới
Tham gia
26/1/08
Bài viết
47
Được thích
6
Mình có bảng khối lượng dạng cột (1 cột, 10220 dòng) muốn copy sang 1 sheet khác và chuyển sang dạng hàng với điều kiện mỗi hàng sẽ copy 100 hàng bên sheet khối lượng sang.
Cứ 100 số liệu copy sang paste thành 1 hàng, số liệu cuối cùng nếu không đủ 100 số thì vẫn copy vvà để 1 hàng.
Mình gửi kèm theo file, mong các thành viên trên 4rum giúp đỡ.
Cám ơn nhiều !
 

File đính kèm

Dùng công thức là được rồi, bạn ah

Sang sheet2 bạn gõ công thức sau
tại A1 (giả định DL ở sheet1 nếu tên khác thì bạn thay vào nhé)
=INDIRECT("sheet1!A"&100*(ROW()-1)+COLUMN())
sau

Copy công thức cho 100 cột A1,B1,
rồi copy cho các hàng tiếp theo 2, 3 ,... 103 dòng

hay nói cách khác
copy cho toàn vùng chứa số liệu sheet2

dòng cuối xóa các giá trị thừa (0) đi

thế là OK

sau khi chuyển xong / tốt nhất copy -> paste special \ value cho nhẹ bạn ah
.
 
Upvote 0
Bắt đầu từ ô A1 ở sheet mới, nhập công thức:
PHP:
=OFFSET(dlieu,COLUMNS($A:A)+(ROWS($1:1)-1)*100 -1,0,1,1)
(trong đó: dlieu là tên của vùng chứa 10220 ô của bảng khối lượng)

kéo công thức đến cột: CV (cột thứ 100)
kéo xuống đến dòng 101
OK

-hvl-
 
Upvote 0
Mình có bảng khối lượng dạng cột (1 cột, 10220 dòng) muốn copy sang 1 sheet khác và chuyển sang dạng hàng với điều kiện mỗi hàng sẽ copy 100 hàng bên sheet khối lượng sang.
Cứ 100 số liệu copy sang paste thành 1 hàng, số liệu cuối cùng nếu không đủ 100 số thì vẫn copy vvà để 1 hàng.
Mình gửi kèm theo file, mong các thành viên trên 4rum giúp đỡ.
Cám ơn nhiều !
Trước mắt dùng tạm code này đã
PHP:
Sub CopyTN()
Dim eRow As Long, iLan As Long, k As Long
Sheets("Chuoi").Cells.ClearContents
 k = 1

eRow = Sheets("B1").[B65000].End(xlUp).Row
For il = 1 To Int((eRow - 1) / 100)
    Sheets("B1").Select
    Sheets("B1").Range(Cells(k + 1, 2), Cells(100 + k, 2)).Copy
    Sheets("Chuoi").Select
    Range("B" & il + 1).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
        k = il + 100
    '.Range(.Cells(il + 1, 2), .Cells(il + 1, 101)).Value = trangspose(Sheets("B1").Range(Cells(il + 1, 2), Cells(101 + il, 2)).Value)'
Next

End Sub
Sẽ chỉnh lại sau
Dùng Code sau nhanh hơn
PHP:
Sub CopyTN()
Dim eRow As Long, iLan As Long, k As Long, Data As Range
Application.ScreenUpdating = False
Sheets("Chuoi").Select
Cells.ClearContents
k = 1
eRow = Sheets("B1").[B65000].End(xlUp).Row
For iLan = 1 To Int((eRow - 1) / 100)
  With Sheets("B1")
    Set Data = .Range(.Cells(k + 1, 2), .Cells(101 + k, 2))
  End With
  k = iLan + 100
  Range(Cells(iLan + 1, 2), Cells(iLan + 1, 101)).Value = WorksheetFunction.Transpose(Data.Value)
Next
Set Data = Nothing
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Mình có bảng khối lượng dạng cột (1 cột, 10220 dòng) muốn copy sang 1 sheet khác và chuyển sang dạng hàng với điều kiện mỗi hàng sẽ copy 100 hàng bên sheet khối lượng sang.
Cứ 100 số liệu copy sang paste thành 1 hàng, số liệu cuối cùng nếu không đủ 100 số thì vẫn copy vvà để 1 hàng.
Mình gửi kèm theo file, mong các thành viên trên 4rum giúp đỡ.
Cám ơn nhiều !

 
Upvote 0
Cũng là VBA với phương pháp chủ yếu dựa vào Transpose, xin tham khảo:
PHP:
Sub TransferData()
 Dim i As Long, k As Long, Src As Range, Des As Range
 With Sheet2
   .Range("B2").CurrentRegion.Clear
   For i = 2 To Sheet1.[B65536].End(xlUp).Row Step 100
     Set Src = Sheet1.Range(Sheet1.Cells(i, 2), Sheet1.Cells(i + 99, 2))
     Set Des = .Range(.Cells(k + 2, 2), .Cells(k + 2, 101))
     Des.Value = WorksheetFunction.Transpose(Src): k = k + 1
   Next
 End With
End Sub
 

File đính kèm

Upvote 0
Nếu VBA,

Cũng góp một tí.
PHP:
Sub Rng_ToRng()
Dim Rng As Range, ToRng As Range, i As Long
Set Rng = Application.InputBox("Vung 1 :", Type:=8)
Set ToRng = Application.InputBox("Vung 2 :", Type:=8)
For i = 1 To Rng.Count
    ToRng(i) = Rng(i)
Next i
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom