hoangyen69
Thành viên chính thức
- Tham gia
- 3/7/10
- Bài viết
- 51
- Được thích
- 5
Chỗ nào là báo cáo, chỗ nào là dữ liệu, chuyển là sao...................?Hiện mình đang cần chuyển từ báo cáo về lại dữ liệu nhưng không biết làm, các bạn chỉ giúp mình, cảm ơn ! Mình gửi file đính kèm
Sheet1 là báo cáo, sheet2 là dữ liệu, từ sheet1 tạo kết quả sheet2. Hên xuiChỗ nào là báo cáo, chỗ nào là dữ liệu, chuyển là sao...................?
Bạn không có 1 dòng giải thích bạn muốn làm gì, sao mọi người hiểu?
Sub a()
Dim i, j, k As Integer, lastrow, lastcol As Long
lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
lastcol = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
k = 2
For i = 2 To lastcol
For j = 2 To lastrow
Cells(k, 1) = Sheet1.Cells(1, i)
Cells(k, 2) = Sheet1.Cells(j, 1)
Cells(k, 3) = Sheet1.Cells(j, i)
k = k + 1
Next j
Next i
End Sub
Ban đầu mình có báo cáo là sheet 1, làm sao để trình bày được ra dữ liệu là sheet 2Có mỗi cái file, không một lời giải thích, cố đợi đến mùa quýt sẽ có người giúp.
Ban đầu mình có báo cáo là sheet 1, làm sao để trình bày được ra dữ liệu là sheet 2Chỗ nào là báo cáo, chỗ nào là dữ liệu, chuyển là sao...................?
Bạn không có 1 dòng giải thích bạn muốn làm gì, sao mọi người hiểu?
Không giống kết quả trong sheet2. Bạn xem lại giúp mình. Cảm ơn !bạn xài thử code này xem sao:
Mã:Sub a() Dim i, j, k As Integer, lastrow, lastcol As Long lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row lastcol = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column k = 2 For i = 2 To lastcol For j = 2 To lastrow Cells(k, 1) = Sheet1.Cells(1, i) Cells(k, 2) = Sheet1.Cells(j, 1) Cells(k, 3) = Sheet1.Cells(j, i) k = k + 1 Next j Next i End Sub
Cảm ơn bạn !Đây bạn
Bạn ơi, trường hợp dữ liệu lớn giống vầy thì file chạy lâu và có khi không chạy được, bạn xem lại giúp mình nhéĐây bạn
Góp ý cho bạn:Bạn ơi, trường hợp dữ liệu lớn giống vầy thì file chạy lâu và có khi không chạy được, bạn xem lại giúp mình nhé
Nếu vậy sửa lại code thế này.Bạn ơi, trường hợp dữ liệu lớn giống vầy thì file chạy lâu và có khi không chạy được, bạn xem lại giúp mình nhé
Sub GPE()
On Error Resume Next
Dim i As Long, j As Long, k As Long, Arr(), dArr()
Arr = Sheet1.Range("A1:AJY" & Sheet1.Range("A65000").End(xlUp).Row).Value
ReDim dArr(1 To UBound(Arr, 1) * UBound(Arr, 2), 1 To 3)
For j = 2 To UBound(Arr, 2)
For i = 2 To UBound(Arr, 1)
k = k + 1
dArr(k, 1) = Arr(1, j)
dArr(k, 2) = Arr(i, 1)
dArr(k, 3) = Arr(i, j)
Next i
Next j
Sheet3.Range("A2:C" & Sheet3.Range("A65000").End(xlUp).Row).ClearContents
Sheet3.Range("A2").Resize(k, 3) = dArr
End Sub
Cảm ơn bạn đã góp ý cho mình. Như tiêu đề thì file excel của mình gồm sheet 1 là báo cáo. Số cột 700 và có khả năng lên 1000 cột, số dòng là 500, mình cần chuyển sheet 1 về dạng dữ liệu như sheet 2. Nghĩa là 700 cột sẽ nhân cho 500 dòng thành 350.000 dòng đó bạn. Mục đích là mình cần filter cho dễ và có thể tận dụng để làm các báo cáo khác. Cảm ơn !Góp ý cho bạn:
Bạn muốn làm cái gì thì nên nêu rõ vấn đề, các thành viên sẽ giúp cho giải pháp nào là tốt nhất.
Chứ không nên nhập liệu đến 4800 cột, nội tìm cột để nhập liệu là đã mất hết thời gian rồi, còn đâu là thời gian làm nữa.
Tại bài 12, tôi nêu vầy: Bạn muốn làm cái gì thì nên nêu rõ vấn đề, các thành viên sẽ giúp cho giải pháp nào là tốt nhất.Cảm ơn bạn đã góp ý cho mình. Như tiêu đề thì file excel của mình gồm sheet 1 là báo cáo. Số cột 700 và có khả năng lên 1000 cột, số dòng là 500, mình cần chuyển sheet 1 về dạng dữ liệu như sheet 2. Nghĩa là 700 cột sẽ nhân cho 500 dòng thành 350.000 dòng đó bạn. Mục đích là mình cần filter cho dễ và có thể tận dụng để làm các báo cáo khác. Cảm ơn !
Mình hiểu ý của bạn là xây dựng cách nhập liệu theo chiều dọc để lên báo cáo. Nhưng vấn đề mình nhờ ở đây là ko có dữ liệu ban đầu, chỉ có dạng báo cáo vậy thôi, giờ cần làm ra dữ liệu. File có tiêu đề 700 cột và 500 dòng mình cũng gửi đính kèm lên diễn đàn rồi mà. Bạn xem những nội dung phía trên sẽ thấyTại bài 12, tôi nêu vầy: Bạn muốn làm cái gì thì nên nêu rõ vấn đề, các thành viên sẽ giúp cho giải pháp nào là tốt nhất.
Có nghĩa là bạn đưa cái File với sheet nào đó có chứa tiêu đề 700 hoặc 1000 cột lên, để các thành viên giúp xây dựng lại cấu trúc và nhập liệu theo chiều dọc (có thể còn 40 cột), việc nhập liệu sẽ thuận tiên và đỡ sai sót khi di chuyển qua quá nhiều cột, nếu nhập liệu theo chiều dọc thì việc tổng hợp cũng được dễ dàng, nhanh chóng hơn.
Tiêu đề cột của bạn thế này: dh1, dh2......................, dh1000. Ai biết nó là cái gì, tiêu đề cột phải cụ thể theo cái thực tế để còn hình dung được cấu trúc của nó thế nào.Mình hiểu ý của bạn là xây dựng cách nhập liệu theo chiều dọc để lên báo cáo. Nhưng vấn đề mình nhờ ở đây là ko có dữ liệu ban đầu, chỉ có dạng báo cáo vậy thôi, giờ cần làm ra dữ liệu. File có tiêu đề 700 cột và 500 dòng mình cũng gửi đính kèm lên diễn đàn rồi mà. Bạn xem những nội dung phía trên sẽ thấy
Tiêu đề cột thực tế nó là vậy mà bạn. Bạn hỏi kỹ thì mình sẽ giải thích thôi. Dh là "đặt hàng"Tiêu đề cột của bạn thế này: dh1, dh2......................, dh1000. Ai biết nó là cái gì, tiêu đề cột phải cụ thể theo cái thực tế để còn hình dung được cấu trúc của nó thế nào.
Với tiêu đề cột như File của bạn thì tôi xin chịu thua, miễn góp ý nữa.
Bạn sửa vài chỗ trong nội dung macro đó lại như vầy sẽ hết lỗi;Bạn ơi, trường hợp dữ liệu lớn giống vầy thì file chạy lâu và có khi không chạy được, bạn xem lại giúp mình nhé
Sub GPE()
Dim i, j, K As Long, lastrow, lastcol As Long, Tmr As Double
With Sheet1.[B1]
lastrow = .CurrentRegion.Rows.Count
lastcol = .CurrentRegion.Columns.Count
End With
On Error GoTo LoiCT
K = 2: Tmr = Timer()
For i = 2 To lastcol
For j = 2 To lastrow
Cells(K, 1) = Sheet1.Cells(1, i)
Cells(K, 2) = Sheet1.Cells(j, 1)
Cells(K, 3) = Sheet1.Cells(j, i)
K = K + 1
Next j
Next i
MsgBox Timer() - Tmr, , "OK"
Err_: Exit Sub
LoiCT:
If Err = 6 Then
MsgBox K, , Timer() - Tmr: Resume Err_
Else
MsgBox Err: Exit Sub
End If
End Sub
Cảm ơn bạn, nhờ bạn coi lại dùm mình từ dòng số 119402 bị dư ra rồi bạnNếu vậy sửa lại code thế này.
Mã:Sub GPE() On Error Resume Next Dim i As Long, j As Long, k As Long, Arr(), dArr() Arr = Sheet1.Range("A1:AJY" & Sheet1.Range("A65000").End(xlUp).Row).Value ReDim dArr(1 To UBound(Arr, 1) * UBound(Arr, 2), 1 To 3) For j = 2 To UBound(Arr, 2) For i = 2 To UBound(Arr, 1) k = k + 1 dArr(k, 1) = Arr(1, j) dArr(k, 2) = Arr(i, 1) dArr(k, 3) = Arr(i, j) Next i Next j Sheet3.Range("A2:C" & Sheet3.Range("A65000").End(xlUp).Row).ClearContents Sheet3.Range("A2").Resize(k, 3) = dArr End Sub