gamegamegamegame
Thành viên hoạt động



- Tham gia
- 5/6/15
- Bài viết
- 144
- Được thích
- 5
Mong dc góp ý của moi nngườiEm muốn tạo một macro láy dữ liệu từ book1.xlsx sang book2.xlsx
- macro nằm ở book2.xlsx
-khi lấy dữ liệu không cần mở file book1.xlsx chỉ cần mở fil e book2.xlsx
xin các thầy giúp đở
Bài của bạn không khó ... có nhiều cách lấy... Sử dụng ADO, Macro4, VBA...Mình làm cho bạn VBA nha ... Tốc độ cũng không thua kém gì ADO đâu ...Chép code sau vào File Book2 và chạy code (Lưu ý 2 File phải cùng Folder nếu khác Folder là Lỗi code)..Nếu thay đổi tên File,Sheet là phải sửa lại CodeEm muốn tạo một macro láy dữ liệu từ book1.xlsx sang book2.xlsx
- macro nằm ở book2.xlsx
-khi lấy dữ liệu không cần mở file book1.xlsx chỉ cần mở fil e book2.xlsx
xin các thầy giúp đở
Private Sub LayDuLieu_Book1()
Application.ScreenUpdating = False
Dim Arr(), Res(), i As Long, j As Long, k As Long
With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0)
With .Sheets("Sheet1")
Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value
End With
.Close False
End With
ReDim Res(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
For i = 1 To UBound(Arr, 1)
If Arr(i, 1) <> "" Then
k = k + 1
For j = 1 To UBound(Arr, 2)
Res(k, j) = Arr(i, j)
Next
End If
Next
Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Res
Application.ScreenUpdating = True
End Sub
Bài của bạn không khó ... có nhiều cách lấy... Sử dụng ADO, Macro4, VBA...Mình làm cho bạn VBA nha ... Tốc độ cũng không thua kém gì ADO đâu ...Chép code sau vào File Book2 và chạy code (Lưu ý 2 File phải cùng Folder nếu khác Folder là Lỗi code)..Nếu thay đổi tên File,Sheet là phải sửa lại Code
PHP:Private Sub LayDuLieu_Book1() Application.ScreenUpdating = False Dim Arr(), Res(), i As Long, j As Long, k As Long With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value End With .Close False End With ReDim Res(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then k = k + 1 For j = 1 To UBound(Arr, 2) Res(k, j) = Arr(i, j) Next End If Next Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Res Application.ScreenUpdating = True End Sub
cho mình hỏi nếu lấy nhiều hàng và cột hơn thì mình chỉnh code ở phần nào vậy bạnBài của bạn không khó ... có nhiều cách lấy... Sử dụng ADO, Macro4, VBA...Mình làm cho bạn VBA nha ... Tốc độ cũng không thua kém gì ADO đâu ...Chép code sau vào File Book2 và chạy code (Lưu ý 2 File phải cùng Folder nếu khác Folder là Lỗi code)..Nếu thay đổi tên File,Sheet là phải sửa lại Code
PHP:Private Sub LayDuLieu_Book1() Application.ScreenUpdating = False Dim Arr(), Res(), i As Long, j As Long, k As Long With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value End With .Close False End With ReDim Res(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) For i = 1 To UBound(Arr, 1) If Arr(i, 1) <> "" Then k = k + 1 For j = 1 To UBound(Arr, 2) Res(k, j) = Arr(i, j) Next End If Next Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Res Application.ScreenUpdating = True End Sub
Hỏi chung chung vậy khó nói lắm....dòng này Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Valuecho mình hỏi nếu lấy nhiều hàng và cột hơn thì mình chỉnh code ở phần nào vậy bạn
hỏi chung chung vậy khó nói lắm....dòng này arr = .range("a2", .[a65536].end(3)).resize(, 3).value
vọc đại đi sai đến đâu sửa đến đó.....mình vọc diết mới biết viết đó![]()
Nếu thích bạn có thể đổi kiểu sau chạy nhanh hơn nhiều nha (Tốc độ công thức 1)cảm ơn nhiều bạn vui tin quá![]()
Sub LayDuLieu_Book111()
Application.ScreenUpdating = False
Dim Arr()
With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0)
With .Sheets("Sheet1")
Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value
End With
.Close False
End With
Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr
Application.ScreenUpdating = True
End Sub
Nếu thích bạn có thể đổi kiểu sau chạy nhanh hơn nhiều nha
PHP:Private Sub LayDuLieu_Book111() Application.ScreenUpdating = False Dim Arr(), Res(), i As Long, j As Long, k As Long With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value End With .Close False End With Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr Application.ScreenUpdating = True End Sub
quá hay code này chạy nhanh lắm cảm ơn nhiềunếu thích bạn có thể đổi kiểu sau chạy nhanh hơn nhiều nha
PHP:sub laydulieu_book111() application.screenupdating = false dim arr() with workbooks.open(thisworkbook.path & "\book1.xlsx", 0) with .sheets("sheet1") arr = .range("a2", .[a65536].end(3)).resize(, 3).value end with .close false end with range("a2").resize(ubound(arr, 1), ubound(arr, 2)) = arr application.screenupdating = true end sub
Nếu thích bạn có thể đổi kiểu sau chạy nhanh hơn nhiều nha
PHP:Sub LayDuLieu_Book111() Application.ScreenUpdating = False Dim Arr() With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value End With .Close False End With Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr Application.ScreenUpdating = True End Sub
Thấy File bạn viết trong đó thế nào mới biết lỗi được....mình ko chơi FACEBOOK.. cảm ơn bạnHỂ MÌNH CHO CHÉP XUỐNG A3 LÀ BÁO LỖI
BẠN ƠI MÌNH CÓ THỂ KẾT BẠN FACEBOOK ĐC KO MÌNH HỌC Ở NHÀ MỘT MÌNH NHIỀU CÁI MƯỚNG HỎI MÀ KO BIẾT HỎI AI KÊT BAN VOI MINH NHÉ
tranbaoson21@gmail.com
Nếu thích bạn có thể đổi kiểu sau chạy nhanh hơn nhiều nha (Tốc độ công thức 1)
PHP:Sub LayDuLieu_Book111() Application.ScreenUpdating = False Dim Arr() With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value End With .Close False End With Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr Application.ScreenUpdating = True End Sub
Bạn xóa chữ Private đi thì chạy vô tư nha.... mình quên viết dòng đó vô ..còn tại sao từ từ mà nghiên cứu nha..Sub này paste vào sheet đúng không anh? Sao sự kiện này paste vào có thấy code khi Macro đâu nhỉ: Private Sub LayDuLieu_Book1()
Private chỗ này sao sao ý.....không click gì hết á anh? Nên làm sao chạy được sub khi khai báo như vậy nhỉ?
Hi. Tại sao thì cũng nghiên cứu tí tí rồi....nên thấy kỳ kỳ nên hỏi thui. hihhi![]()
Nếu thích bạn có thể đổi kiểu sau chạy nhanh hơn nhiều nha (Tốc độ công thức 1)
PHP:Sub LayDuLieu_Book111() Application.ScreenUpdating = False Dim Arr() With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value End With .Close False End With Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr Application.ScreenUpdating = True End Sub
Thì sửa lại như sauMình muốn dữ liệu cũ vẫn giữ lại và cập nhật thêm dữ liệu mới xuống bên dưới thì code như thế nào bạn. Thanks bạn trước
Sub LayDuLieu_NoiDuoi()
Application.ScreenUpdating = False
Dim Arr()
With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0)
With .Sheets("Sheet1")
Arr = Range("A2").CurrentRegion.Offset(1) ''<-- Luu y Kieu Du Lieu
End With
.Close False
End With
Range("A65536").End(3)(2).Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr
Application.ScreenUpdating = True
End Sub
Thì sửa lại như sau
Nếu dữ liệu không chuẩn thì sử dụng dòng này nhaPHP:Sub LayDuLieu_NoiDuoi() Application.ScreenUpdating = False Dim Arr() With Workbooks.Open(ThisWorkbook.Path & "\Book1.xlsx", 0) With .Sheets("Sheet1") Arr = Range("A2").CurrentRegion.Offset(1) ''<-- Luu y Kieu Du Lieu End With .Close False End With Range("A65536").End(3)(2).Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr Application.ScreenUpdating = True End Sub
Arr = .Range("A2", .[A65536].End(3)).Resize(, 3).Value
Còn dữ liệu ok thì sử dụng code trên ( Nói chung Tùy cơm mà húp mắm vậy ....hahaha)