Sao chép dữ liệu từ file đến file (1 người xem)

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

Người dùng đang xem chủ đề này

van80

Thành viên chính thức
Tham gia
5/7/09
Bài viết
73
Được thích
4
Hỏi: Cần giúp trong Vba, với yêu cầu như sau:
Yêu cầu mình có mô tả chi tiết trong file đính kèm ( ở sheet(main) của file tonghop), mình xin trích dẫn 1 ý như sau:
- Tại ô D4 = 1 và ta click vào nút lệnh tong hop 18k thì chương trình sẽ mở ra hộp thoại Open.
- Ta dựa vào hộp thoại Open này tìm đến file k1.
- Khi ta lick chuột vào file k1 Khi đó dữ liệu trong file k1 của sheet(k1) sao chép vào sheet(data) của file tonghop.
Kết thúc !
Chú ý: Dữ liệu copy lần sao phải ghi nối tiếp theo tương ứng từng k, có nghĩa là copy k1 xong rồi đến lượt copy k2 thì dữ liệu của k1 vẫn còn trong shee(data) của file tonghop ( nhiệm vụ của sheet(data) phải chứa tất cả dữ liệu của 18k).

Nhân tiện đây anh giúp em chuyện này nha! Nếu sau một thời gian các dữ liệu của từng k thay đổi thì em phải cập nhật lại. Khi cập nhật lại thì dữ liệu của từng k trước đây phải cập nhật theo. Ví dụ : Ta cập nhật k1 thì dữ liệu cũ của k1 phải thay thế dữ liệu mới của k1 tương tự như vậy cho những k còn lại.

Mong các Anh, chị trên diễn đàn giúp dùm, trân trọng cảm ơn !
file đính kèm View attachment PCTHCS.rar

Sau khi đã tổng hợp rồi, bây giờ em muốn xuất ra từng file tương ứng với từng k dựa vao mã địa bàn điều tra ở cột U. Tức là các dòng có mã 001 thì xuất thành file K1, 002 thì xuất thành file k2, tương tự như vậy cho những mã còn lại.
file mẫu đã tổng hợp View attachment tonghop.rar
 
Lần chỉnh sửa cuối:
Hỏi: Cần giúp trong Vba, với yêu cầu như sau:
Yêu cầu mình có mô tả chi tiết trong file đính kèm ( ở sheet(main) của file tonghop), mình xin trích dẫn 1 ý như sau:
- Tại ô D4 = 1 và ta click vào nút lệnh tong hop 18k thì chương trình sẽ mở ra hộp thoại Open.
- Ta dựa vào hộp thoại Open này tìm đến file k1.
- Khi ta lick chuột vào file k1 Khi đó dữ liệu trong file k1 của sheet(k1) sao chép vào sheet(data) của file tonghop.
Kết thúc !
Chú ý ô D4 là ô điều kiện cần sao chép dữ liệu.
Mong các Anh, chị trên diễn đàn giúp dùm, trân trọng cảm ơn !
file đính kèm View attachment 101917
1. Đã có điều kiện tại ô D4 thì cần gì mở hộp thoại Open để chọn file k1 để là gì. Nếu D4=5 thì ta biết copy file k5 vào file tổng hợp rồi. Nếu mở hộp thoại Open thì ta không cần điều kiện tại D4. Bạn muốn kiểu nào?
2. Khi copy lần sau thì dữ liệu đè lên hay copy nối tiếp?
 
Upvote 0
Cám ơn bạn viehoai đã giúp mình.
1. Mình muốn chọn mở hộp thoại Open cho chuyên nghiệp hơn, bạn giúp mình kiểu này đi.
2. khi copy lần sau dữ liệu ghi đè lên theo tương ứng từng k.
Bạn viehoai giúp mình với.
 
Upvote 0
Cám ơn bạn viehoai đã giúp mình.
1. Mình muốn chọn mở hộp thoại Open cho chuyên nghiệp hơn, bạn giúp mình kiểu này đi.
2. khi copy lần sau dữ liệu ghi đè lên theo tương ứng từng k.
Bạn viehoai giúp mình với.
Với dữ liệu như trong file thì bạn sử dụng code sau (bỏ hẳn cái ô D4 đi luôn):
[GPECODE=vb]Sub TongHop()
Dim i As Integer, Wb As Workbook

Application.ScreenUpdating = False
Sheets("Data").[A8:W65000].Clear
With Application.FileDialog(1)
.Title = "Chon File thanh phan"
.FilterIndex = 3
.InitialFileName = ThisWorkbook.Path
.AllowMultiSelect = True: .Show
If .SelectedItems.Count = 0 Then Exit Sub
For i = 1 To .SelectedItems.Count
Set Wb = Workbooks.Open(.SelectedItems(i))
Wb.Sheets(Replace(Wb.Name, ".xls", "")).[B8].Resize(1000, 22).Copy ThisWorkbook.Sheets("Data").[B65000].End(xlUp).Offset(1)
Wb.Close False
Next
End With
Application.ScreenUpdating = True
End Sub[/GPECODE]
Mà bạn cho dữ liệu mẫu sơ sài quá, chẳng thấy STT đâu cả.
 

File đính kèm

Upvote 0
Với dữ liệu như trong file thì bạn sử dụng code sau (bỏ hẳn cái ô D4 đi luôn):
[GPECODE=vb]Sub TongHop()
Dim i As Integer, Wb As Workbook

Application.ScreenUpdating = False
Sheets("Data").[A8:W65000].Clear
With Application.FileDialog(1)
.Title = "Chon File thanh phan"
.FilterIndex = 3
.InitialFileName = ThisWorkbook.Path
.AllowMultiSelect = True: .Show
If .SelectedItems.Count = 0 Then Exit Sub
For i = 1 To .SelectedItems.Count
Set Wb = Workbooks.Open(.SelectedItems(i))
Wb.Sheets(Replace(Wb.Name, ".xls", "")).[B8].Resize(1000, 22).Copy ThisWorkbook.Sheets("Data").[B65000].End(xlUp).Offset(1)
Wb.Close False
Next
End With
Application.ScreenUpdating = True
End Sub[/GPECODE]
Mà bạn cho dữ liệu mẫu sơ sài quá, chẳng thấy STT đâu cả.
Anh thì làm theo cách này
[GPECODE=vb]Sub CopyData()
Dim Sh As String, fname As String
Dim Arr()
On Error GoTo Thoat
Application.ScreenUpdating = False
Workbooks.Open Filename:=Application.GetOpenFilename
fname = ActiveWorkbook.Name
Sh = Left(fname, InStr(1, fname, ".") - 1)
Arr = ActiveWorkbook.Sheets(Sh).Range("A8:W1000").Value
ThisWorkbook.Sheets("data").Range("A8").Resize(1000, 23).Value = Arr
ActiveWorkbook.Close
Thoat:
Application.ScreenUpdating = True
End Sub[/GPECODE]
 
Upvote 0
Anh thì làm theo cách này
[GPECODE=vb]Sub CopyData()
Dim Sh As String, fname As String
Dim Arr()
On Error GoTo Thoat
Application.ScreenUpdating = False
Workbooks.Open Filename:=Application.GetOpenFilename
fname = ActiveWorkbook.Name
Sh = Left(fname, InStr(1, fname, ".") - 1)
Arr = ActiveWorkbook.Sheets(Sh).Range("A8:W1000").Value
ThisWorkbook.Sheets("data").Range("A8").Resize(1000, 23).Value = Arr
ActiveWorkbook.Close
Thoat:
Application.ScreenUpdating = True
End Sub[/GPECODE]
Cách của anh chỉ cho phép cập nhật từ từng file đơn lẻ, không chọn một lúc nhiều file thành phần được.
Hơn nữa, việc chỉ lấy giá trị thì sẽ làm mất định dạng của các cột P và U. Anh so sánh file thành phần và file tổng sẽ thấy điều này.
 
Upvote 0
Cách của anh chỉ cho phép cập nhật từ từng file đơn lẻ, không chọn một lúc nhiều file thành phần được.
Hơn nữa, việc chỉ lấy giá trị thì sẽ làm mất định dạng của các cột P và U. Anh so sánh file thành phần và file tổng sẽ thấy điều này.
Vì tác giả cần chọn 1 file mà thôi, còn nếu lấy định dạng thì sử dụng copy. Nhưng nếu vậy mỗi file có kiểu định dạng khác nhau thì có tốt không?
Thôi thì những vấn đề này tác giả muốn gì thì dùng đó
 
Upvote 0
Cảm ơn Anh Hoàng Nghĩa phúc! ý của em là không phải vậy, sheet(data) của file tonghop phải chứa tất cả dữ liệu của 18k. có nghĩa là copy k1 xong rồi đến lượt copy k2 thì dữ liệu của k1 vẫn còn trong sheet(data)... Nhân tiện đây anh giúp em chuyện này nha! Nếu sau một thời gian các dữ liệu của từng k thay đổi thì em phải cập nhật lại. Khi cập nhật lại thì dữ liệu của từng k trước đây phải cập nhật theo. Ví dụ : Ta cập nhật k1 thì dữ liệu cũ của k1 phải thay thế dữ liệu mới của k1 tương tự cho những k còn lại.
Dữ liệu mẫu của em nhiều, nếu copy hết 18k vào sheet(data) thì dung lượng lên tới 5mb
Cảm ơn anh nhiều !
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Anh Hoàng Nghĩa phúc! ý của em là không phải vậy, sheet(data) của file tonghop phải chứa tất cả dữ liệu của 18k. có nghĩa là copy k1 xong rồi đến lượt copy k2 thì dữ liệu của k1 vẫn còn trong sheet(data)... Nhân tiện đây anh giúp em chuyện này nha! Nếu sau một thời gian các dữ liệu của từng k thay đổi thì em phải cập nhật lại. Khi cập nhật lại thì dữ liệu của từng k trước đây phải cập nhật theo. Ví dụ : Ta cập nhật k1 thì dữ liệu cũ của k1 phải thay thế dữ liệu mới của k1...
Cảm ơn anh nhiều !
Giả sử bạn đã nạp k1, k3, k4, k7 dự liệu copy nối tiếp nhau. Vậy bạn muốn cập nhật lại k4 thì làm sao biết được dữ liệu ở file sheet data từ hàng nào đến hàng nào mà cập nhật?
Nếu làm được các tên có mã số, từ mã số, ta có thể cập nhật được dễ dàng
 
Upvote 0
Cảm ơn anh viehoai !
cập nhật ở đây là chép toàn bộ dữ liệu của k đó đè lên dữ liệu của k cũ. Ví dụ: cập nhật k4 thì phải xóa hết dữ liệu của k4 trong sheet data và ghi dữ liệu mới của k4 vào sheet data. ý của em là vậy, mong anh giúp dùm.
 
Upvote 0
Cảm ơn anh viehoai !
cập nhật ở đây là chép toàn bộ dữ liệu của k đó đè lên dữ liệu của k cũ. Ví dụ: cập nhật k4 thì phải xóa hết dữ liệu của k4 trong sheet data và ghi dữ liệu mới của k4 vào sheet data. ý của em là vậy, mong anh giúp dùm.
Nhưng dựa vào đâu mà đè? không biết dựa vào đâu để nhận dạng ra dữ liệu của k4 ở file tổng hợp để mà đè lên nó
 
Upvote 0
Dạ đúng rồi anh, hay là anh lất ô D4 làm ô điều kiện để cập nhật dữ liệu. Nếu ô D4 = 4 thì xóa hết dữ liệu k4 của sheet data rồi sao đó cật nhật dữ liệu k4 mới vào.

Theo em thì em nghĩ như thế này: Cho dù copy hay cập nhập cũng vậy, mình lấy ô D4 làm ô diều kiện, ô D4 = giá trị nào thì click vào nút lệnh tong hop 18k việc đầu tiên là chương trình sẽ xóa dữ liệu tương với giá trị ở ô D4 (D4=4 thì xóa dữ liệu k4 của sheet data, dưa vào mã địa bàn điều tra 004 ) sau đó mở hôp thoại Open copy k4 vào sheet data của file tonghop.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Dạ đúng rồi anh, hay là anh lất ô D4 làm ô điều kiện để cập nhật dữ liệu. Nếu ô D4 = 4 thì xóa hết dữ liệu k4 của sheet data rồi sao đó cật nhật dữ liệu k4 mới vào.
Bạn vẫn không hiểu ý mình rồi. Bạn xem file mình trình bày sẽ hiểu hơn
 

File đính kèm

Upvote 0
Em hiểu rồi. Trước hết cho em cảm ơn anh viehoai và anh nghiaphuc. Em đá sử dụng đoạn code của anh nghiaphuc và chỉnh sửa lại một tí và kết hợp với 1 đoạn code nữa là thành công rồi. Cụ thể như thế này:
Sub TongHop()
Dim i As Integer, Wb As Workbook

Application.ScreenUpdating = False
'Sheets("Data").[A8:W65000].Clear
With Application.FileDialog(1)
.Title = "Chon File thanh phan"
.FilterIndex = 3
.InitialFileName = ThisWorkbook.Path
.AllowMultiSelect = True: .Show
If .SelectedItems.Count = 0 Then Exit Sub
For i = 1 To .SelectedItems.Count
Set Wb = Workbooks.Open(.SelectedItems(i))
Wb.Sheets(Replace(Wb.Name, ".xls", "")).[B8].Resize(1000, 22).Copy ThisWorkbook.Sheets("Data").[B65000].End(xlUp).Offset(1)
Wb.Close False
Next
End With
Application.ScreenUpdating = True
End Sub


Sub DeleteRows()
Sheets("data").Select
Range("U6:U9000").Select
Dim strToDelete As String
Dim rngSrc As Range
Dim NumRows As Integer
Dim ThisRow As Integer
Dim ThatRow As Integer
Dim ThisCol As Integer
Dim J As Integer
Dim DeletedRows As Integer
strToDelete = Sheet2.Range("D4")

Set rngSrc = ActiveSheet.Range(ActiveWindow.Selection.Address)
NumRows = rngSrc.Rows.Count
ThisRow = rngSrc.Row
ThatRow = ThisRow + NumRows - 1
ThisCol = rngSrc.Column


For J = ThatRow To ThisRow Step -1
If Cells(J, ThisCol) = strToDelete Then
Rows(J).Select
Selection.Delete Shift:=xlUp
DeletedRows = DeletedRows + 1
End If
Next J


Range("D4").Select
Sheets("main").Select
End Sub

ở nút lệnh tổng 18k em viết như thế này:
Private Sub CommandButton1_Click()
DeleteRows
TongHop
End Sub

Thành 100% theo ý của 2 anh mình vừa bàn luận. Em mới vừa chạy thử dữ liệu rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhân tiện đây 2 anh viehoai và nghiaphuc giúp em một vấn đề nữa nha!
Bây giờ đã tổng hợp xong 18k vào sheet data của file topnhop rồi. Yêu cầu của em làm ngược lại tổng hợp rồi bây giờ tách ra lại. Ở sheet(main) của file tonghop em tạo thêm 1 nút lệnh nữa có tên là "xuat 18k". Tức là dữ liệu của sheet(data) xuất thành 18 file tương ứng với mã địa bàn điều tra ở cột U. có nghĩa là ở cột U của sheet(data) có giá trị là 001 thì xuât tất cả dòng có mã 001 này xuất thành 1 file k1, tương tự như vậy 002 xuất thành file k2, 003 xuất thành file k3, .... Trân trọng cảm ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Nhân tiện đây 2 anh viehoai và nghiaphuc giúp em một vấn đề nữa nha!
Bây giờ đã tổng hợp xong 18k vào sheet data của file topnhop rồi. Yêu cầu của em làm ngược lại tổng hợp rồi bây giờ tách ra lại. Ở sheet(main) của file tonghop em tạo thêm 1 nút lệnh nữa có tên là "xuat 18k". Tức là dữ liệu của sheet(data) xuất thành 18 file tương ứng với mã địa bàn điều tra ở cột U. có nghĩa là ở cột U của sheet(data) có giá trị là 001 thì xuât tất cả dòng có mã 001 này xuất thành 1 file k1, tương tự như vậy 002 xuất thành file k2, 003 xuất thành file k3, .... Trân trọng cảm ơn !
Bạn đưa lại file tổng hợp bạn đã được tổng hợp mình xem, rồi mới viết code xuất được
 
Upvote 0
Cảm ơn Anh Hoàng Nghĩa phúc! ý của em là không phải vậy, sheet(data) của file tonghop phải chứa tất cả dữ liệu của 18k. có nghĩa là copy k1 xong rồi đến lượt copy k2 thì dữ liệu của k1 vẫn còn trong sheet(data)... Nhân tiện đây anh giúp em chuyện này nha! Nếu sau một thời gian các dữ liệu của từng k thay đổi thì em phải cập nhật lại. Khi cập nhật lại thì dữ liệu của từng k trước đây phải cập nhật theo. Ví dụ : Ta cập nhật k1 thì dữ liệu cũ của k1 phải thay thế dữ liệu mới của k1 tương tự cho những k còn lại.
Dữ liệu mẫu của em nhiều, nếu copy hết 18k vào sheet(data) thì dung lượng lên tới 5mb
Cảm ơn anh nhiều !
Chỗ màu đỏ: Code của tôi cho phép bạn chọn nhiều file một lúc mà. Bạn thử chạy code và chọn cả 18 file thành phần xem nó ra cái gì nào?!
Chỗ màu xanh: Mắc gì lại phải cập nhật kiểu như thế, cứ xóa sạch rồi lấy lại dữ liệu mới không phải nhẹ nhàng hơn sao?!
 
Upvote 0
Xuất file tổng hợp thành nhiều file

chào các anh chị trên diễn đàn !
- Trong sheet(main) của file tonghop em tạo một nút lệnh " xuat 18k"
- Dữ liệu xuất từ sheet(data) mã địa bàn điều tra là dựa vào cột U của sheet(data)
Cụ thể là:
Điều kiện xuất phải phụ thuộc vào ô D4 của sheet(main)
+ Khi ô D4 =001 Tất cả các dòng có mã 001 của sheet(data) thì xuất thành file k1, khi xuất file phải mở hộp thoại save, dựa vào hộp thoại này để lưu trữ file k1
+ Khi ô D4 =002 Tất cả các dòng có mã 002 của sheet(data) thì xuất thành file k2, khi xuất file phải mở hộp thoại save, dựa vào hộp thoại này để lưu trữ file k2
+ Tương tự như vậy cho các mã còn lại
File đính kèm :View attachment tonghop.rar
Trân trọng cảm ơn !
 
Upvote 0
chào các anh chị trên diễn đàn !
- Trong sheet(main) của file tonghop em tạo một nút lệnh " xuat 18k"
- Dữ liệu xuất từ sheet(data) mã địa bàn điều tra là dựa vào cột U của sheet(data)
Cụ thể là:
Điều kiện xuất phải phụ thuộc vào ô D4 của sheet(main)
+ Khi ô D4 =001 Tất cả các dòng có mã 001 của sheet(data) thì xuất thành file k1, khi xuất file phải mở hộp thoại save, dựa vào hộp thoại này để lưu trữ file k1
+ Khi ô D4 =002 Tất cả các dòng có mã 002 của sheet(data) thì xuất thành file k2, khi xuất file phải mở hộp thoại save, dựa vào hộp thoại này để lưu trữ file k2
+ Tương tự như vậy cho các mã còn lại
File đính kèm :View attachment 101968
Trân trọng cảm ơn !
Thế bạn có ý kiến gì về bài viết trên của tôi?
Chỗ màu đỏ: Code của tôi cho phép bạn chọn nhiều file một lúc mà. Bạn thử chạy code và chọn cả 18 file thành phần xem nó ra cái gì nào?!
Chỗ màu xanh: Mắc gì lại phải cập nhật kiểu như thế, cứ xóa sạch rồi lấy lại dữ liệu mới không phải nhẹ nhàng hơn sao?!
Vấn đề này chưa xong mà lại nhảy sang vấn đề khác nó cứ tức tức thế nào ấy.
 
Upvote 0
Thế bạn có ý kiến gì về bài viết trên của tôi?

Vấn đề này chưa xong mà lại nhảy sang vấn đề khác nó cứ tức tức thế nào ấy.
Chào anh nghiaphuc!
- Đoạn code của anh em đã vận dụng rồi chạy rất tốt, sao chép từng k hay kể cả chọn 18k cùng một lúc đều được. Em rất cảm ơn anh về đoạn code này.
- Khi sau 1 thời gian chắc chắn có một số k dữ liệu sẽ thay đổi và một số k dữ liệu không thay đổi, bỡi vì vậy khi cập nhật thì em chỉ chọn những k có dữ liệu thay đổi do đó em cần phải dựa vào ô D4 để làm điều kiện cập nhật. Giả sử k1 thay đổi các k còn lại không thay đổi khi cập nhật tại ô D4 em gõ = 1 lúc đó chương sẽ tự động xóa dữ liệu k1 mà đã sao chép trước đây vào sheet(data) rồi sao chép k1 mới vào.
- Do đó em mới vận dụng đoạn code DeleteRows.
Anh giúp dùm em file tonghop nha ! vấn đề là ngươc lại xuất ra từng file.View attachment tonghop.rar
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh nghiaphuc!
- Đoạn code của anh em đã vận dụng rồi chạy rất tốt, sao chép từng k hay kể cả chọn 18k cùng một lúc đều được. Em rất cảm ơn anh về đoạn code này.
- Khi sau 1 thời gian chắc chắn có một số k dữ liệu sẽ thay đổi và một số k dữ liệu không thay đổi, bỡi vì vậy khi cập nhật thì em chỉ chọn những k có dữ liệu thay đổi do đó em cần phải dựa vào ô D4 để làm điều kiện cập nhật. Giả sử k1 thay đổi các k còn lại không thay đổi khi cập nhật tại ô D4 em gõ = 1 lúc đó chương sẽ tự động xóa dữ liệu k1 mà đã sao chép trước đây vào sheet(data) rồi sao chép k1 mới vào.
- Do đó em mới vận dụng đoạn code DeleteRows.
Anh giúp dùm em file tonghop nha ! vấn đề là ngươc lại xuất ra từng file.View attachment 101975
Dạng những bài này nếu không theo những ý mình nói các bài trước mà Nghiaphuc làm được thì mình thật sự Bái Phục! Bái Phục (Ngoại trừ làm theo bài 17 nha)
 
Upvote 0
Dạng những bài này nếu không theo những ý mình nói các bài trước mà Nghiaphuc làm được thì mình thật sự Bái Phục! Bái Phục (Ngoại trừ làm theo bài 17 nha)

Anh viehoai ơi ! Anh nghỉ sao vậy, mọi vấn đề mà 2 anh em mình bàn luận thì em đã giải quyết xong rồi. Bây giờ anh viehoai giúp em ở bài 18 đi. Cảm ơn anh nhiều.
 
Upvote 0

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

Back
Top Bottom