tranphuson
Thành viên thường trực
- Tham gia
- 14/8/09
- Bài viết
- 269
- Được thích
- 10
- Giới tính
- Nam
Bạn thử cái nàyVui lòng giúp mình copy dữ liệu bằng VBA
Mỗi Cột C1, kết hợp với B2 đến hết B440. Cột C1 Sheet "DATA" sẽ được copy dọc qua Sheet "COPY"
Tổng cộng có 74 Cột bên Sheet "DATA" nhân với 439 dòng Cột B Sheet "DATA" = 32,486 dòng
Xin cảm ơn
Sub CopyData()
Dim sArr, dArr, C As Long, R As Long, I As Long, J As Long, K As Long, Er As Long
With Sheet1
C = .Range("B1").End(xlToRight).Column
If C > 2 Then
sArr = .Range("B1", .Range("B" & Rows.Count).End(xlUp)).Resize(, C - 1).Value
R = (UBound(sArr) - 1) * (C - 2)
If R < Rows.Count - 1 Then
ReDim dArr(1 To R, 1 To 3)
For J = 2 To UBound(sArr, 2)
For I = 2 To UBound(sArr, 1)
K = K + 1: dArr(K, 1) = K
dArr(K, 2) = sArr(1, J): dArr(K, 3) = sArr(I, 1)
Next I
Next J
With Sheet2
Er = .Range("E" & Rows.Count).End(xlUp).Row
If Er > 1 Then .Range("E2:G" & Er).ClearContents
.Range("E2").Resize(K, 3) = dArr
End With
Else
MsgBox "So dong nhieu hon so dong bang tinh"
End If
Else
MsgBox "Nothing"
End If
End With
End Sub
Dài dòng quá, Chạy lẹBạn thử cái này
PHP:Sub CopyData() Dim sArr, dArr, C As Long, R As Long, I As Long, J As Long, K As Long, Er As Long With Sheet1 C = .Range("B1").End(xlToRight).Column If C > 2 Then sArr = .Range("B1", .Range("B" & Rows.Count).End(xlUp)).Resize(, C - 1).Value R = (UBound(sArr) - 1) * (C - 2) If R < Rows.Count - 1 Then ReDim dArr(1 To R, 1 To 3) For J = 2 To UBound(sArr, 2) For I = 2 To UBound(sArr, 1) K = K + 1: dArr(K, 1) = K dArr(K, 2) = sArr(1, J): dArr(K, 3) = sArr(I, 1) Next I Next J With Sheet2 Er = .Range("E" & Rows.Count).End(xlUp).Row If Er > 1 Then .Range("E2:G" & Er).ClearContents .Range("E2").Resize(K, 3) = dArr End With Else MsgBox "So dong nhieu hon so dong bang tinh" End If Else MsgBox "Nothing" End If End With End Sub
Bạn thử cái này
PHP:Sub CopyData() Dim sArr, dArr, C As Long, R As Long, I As Long, J As Long, K As Long, Er As Long With Sheet1 C = .Range("B1").End(xlToRight).Column If C > 2 Then sArr = .Range("B1", .Range("B" & Rows.Count).End(xlUp)).Resize(, C - 1).Value R = (UBound(sArr) - 1) * (C - 2) If R < Rows.Count - 1 Then ReDim dArr(1 To R, 1 To 3) For J = 2 To UBound(sArr, 2) For I = 2 To UBound(sArr, 1) K = K + 1: dArr(K, 1) = K dArr(K, 2) = sArr(1, J): dArr(K, 3) = sArr(I, 1) Next I Next J With Sheet2 Er = .Range("E" & Rows.Count).End(xlUp).Row If Er > 1 Then .Range("E2:G" & Er).ClearContents .Range("E2").Resize(K, 3) = dArr End With Else MsgBox "So dong nhieu hon so dong bang tinh" End If Else MsgBox "Nothing" End If End With End Sub
Vậy anh có thể chỉ mình thêm cách sử dụng này được chứ!Dạng bài này không cần code hay công thức gì ráo, cứ dùng UnPivotTable ra kết quả trong 30s
Thật ra với từ khóa UnPivotTable, bạn đã có thể tìm được các thông tin mình cần rồi.Vậy anh có thể chỉ mình thêm cách sử dụng này được chứ!
Cảm ơn Anh
Cảm ơn Anh đã hướng dẫn thêm 1 cách và chỉ ra các lỗi trong file nàyThật ra với từ khóa UnPivotTable, bạn đã có thể tìm được các thông tin mình cần rồi.
Lưu ý: Sau khi PivotTable được tạo sẽ có công đoạn double click vào giao điểm của 2 GrandTotal dòng và cột (trong video là khoảng giây thứ 40), lập tức 1 sheet khác được tạo với dữ liệu là cái bạn cần
----------------------------------
Nhân tiện cảnh báo: File của bạn bị dính quá nhiều styles rác, đồng thời style normal cũng bị luôn