Xin giúp đỡ : Lấy dữ liệu từ các file khác nhau?

Liên hệ QC
Anh Nghiaphuc ơi, anh gởi nhầm file cho em rồi , chỉ có 1 file nhập ngày bằng giao diện Calender thôi (cái này gởi rồi) ,xin gởi lại dùm em nha ,cám ơn nhiều

"...trường hợp gộp ô lại thì xử lý khó chịu hơn và dữ liệu được sao chép chỉ là giá trị, nó không tự động cập nhật khi file dữ liệu nguồn thay đổi..." !$@!!!$@!!anh có thể nói rõ hơn ý này ko ? có phải dữ liệu sao chép ngoài giá trị ra rồi còn gì nữa ko , ko tự động cập nhật khi dữ liệu nguồn thay đổi - là thay đổi gì -\\/.-\\/.

". . .Ở đây, mình vẫn còn vướng mắc 2 vấn đề . ." !$@!!!$@!!Anh có thể nói rõ hơn ko , em chưa hiểu ý anh muốn nói gì -\\/.-\\/.

". . . Hẳn bạn cũng thấy trường hợp gộp ô lại thì xử lý khó chịu hơn . ." Em đang có 1 ý tưởng mới giúp khắc phục điều này ,xin anh chờ trong giấy lát
- Thành thật xin lỗi, không biết có phải lúc đó buồn ngủ quá không nữa. bạn xem lại file đính kèm ở bài trên (#25)
- Trong cách không gộp ô, dữ liệu thu được là từ công thức, nghĩa là khi dữ liệu nguồn thay đổi thì dữ liệu ở file tổng hợp cũng tự động cập nhật theo, còn với file của bạn (có gộp ô) thì dữ liệu thu được không phải là từ công thức mà là copy dữ liệu ở file nguồn rồi dán giá trị sang file tổng hợp, do đó nó sẽ không thể tự động cập nhật giá trị được.
- "Ở đây, mình vẫn còn vướng mắc 2 vấn đề":
1 - Nếu chọn ngày có file tương ứng (10/11/2009) thì không thấy ngày đã chọn trên Calendar.
2 - Mình đã nói rõ: Bạn cứ nhập text bất kỳ (VD: abc), bạn sẽ thấy lỗi ở dòng lấy tên file dữ liệu. Mình đã xử lý anh chàng này (hơi "củ chuối" một xíu): Vào Module1, thay đổi Sub sau:
PHP:
Sub Copy_Data_TC1() 'Sao chep du lieu cho S3'
    Dim Ngay, FName As String
    Dim FileS As FileSearch
 
    Ngay = [B11]
    If Ngay = "" Then
        MsgBox "Phai chon mot ngay nao do.", vbOKOnly, "Thong bao loi"
        [C11:J11].ClearContents
        Exit Sub
    End If
    On Error GoTo Day_Error
    FName = Right("0" & Year(Ngay) Mod 100, 2) & " " & Month(Ngay) & " " & Day(Ngay) & ".xls"
    Set FileS = Application.FileSearch
    With FileS
        .NewSearch
        .Filename = FName
        .LookIn = ThisWorkbook.Path & "\CSDL"
        .SearchSubFolders = False
        .Execute
    End With
    If FileS.FoundFiles.Count = 0 Then
        MsgBox "Khong ton tai file du lieu tuong ung.", vbOKOnly, "Thong bao loi"
        [C11:J11].ClearContents
        Exit Sub
    Else
        FName = Replace(FName, ThisWorkbook.Path & "\CSDL\", "")
        [C11].Formula = "='" & ThisWorkbook.Path & "\CSDL\[" & FName & "]BC1'!D14"
        [C11].Copy Destination:=[D11:J11]
        Exit Sub
    End If
Day_Error:    MsgBox "Nhap ngay khong hop le.", vbOKOnly, "Thong bao loi": [B11:J11].ClearContents: Exit Sub
End Sub
- Bạn có ý tưởng mới thì nêu ra thử xem sao!
 
Lần chỉnh sửa cuối:
"...Trong cách không gộp ô, dữ liệu thu được là từ công thức, nghĩa là khi dữ liệu nguồn thay đổi thì dữ liệu ở file tổng hợp cũng tự động cập nhật theo, còn với file của bạn (có gộp ô) thì dữ liệu thu được không phải là từ công thức mà là copy dữ liệu ở file nguồn rồi dán giá trị sang file tổng hợp, do đó nó sẽ không thể tự động cập nhật giá trị được. ..." Có phải ý anh nói là khi các file XLS thay đổi dữ liệu thì file XLS tổng hợp (KLT.xls) sẽ ko thể tự động cập nhật phải ko , em thấy với cách anh làm thì nó tự động đấy !

Ví dụ : anh mở file KLT.xls và nhập vào ngày 01/11/2009 thì sẽ thấy dữ liệu file 09 11 01.xls hiện ra , bây giờ anh đóng 2 file này lại ,chỉ ở file 09 11 01.xls và sửa lại nội dung (VD:kê thêm số lượng tiền chẳng hạn) ,sau đó anh lưu và đóng file này lại , tiếp đó anh mở file KLT.xls xem sẽ thấy nó tự động

" . .Nếu chọn ngày có file tương ứng (10/11/2009) thì không thấy ngày đã chọn trên Calendar . ." Có phải ý anh là nếu ta nhập dữ liệu vào ô ngày bằng cách đánh máy trực tiếp vào thì trên calender ko thấy có sự thay đổi tương ứng có phải vậy ko ? hay là ý nào em chưa hiểu ,mong anh giải thích rõ hơn

Còn vấn đề số 2 , em hiểu ý anh rồi , anh quả là một người cẩn thận ,nếu làm chuyện lớn thì không chê vào đâu được !
 
"...Trong cách không gộp ô, dữ liệu thu được là từ công thức, nghĩa là khi dữ liệu nguồn thay đổi thì dữ liệu ở file tổng hợp cũng tự động cập nhật theo, còn với file của bạn (có gộp ô) thì dữ liệu thu được không phải là từ công thức mà là copy dữ liệu ở file nguồn rồi dán giá trị sang file tổng hợp, do đó nó sẽ không thể tự động cập nhật giá trị được. ..." Có phải ý anh nói là khi các file XLS thay đổi dữ liệu thì file XLS tổng hợp (KLT.xls) sẽ ko thể tự động cập nhật phải ko , em thấy với cách anh làm thì nó tự động đấy !

Ví dụ : anh mở file KLT.xls và nhập vào ngày 01/11/2009 thì sẽ thấy dữ liệu file 09 11 01.xls hiện ra , bây giờ anh đóng 2 file này lại ,chỉ ở file 09 11 01.xls và sửa lại nội dung (VD:kê thêm số lượng tiền chẳng hạn) ,sau đó anh lưu và đóng file này lại , tiếp đó anh mở file KLT.xls xem sẽ thấy nó tự động
Thực ra với cách copy-dán thì dữ liệu không cập nhật đâu bạn. Bạn thử mở file 09 11 10.xls ra => Sửa nội dung tại Sheet BC và BC1 => Lưu lại => Mở file KLT.xls => Chọn Update tại hộp thoại thông báo => Xem kết quả tại 2 Sheet Báo cáo TC và Báo cáo TC 1, bạn sẽ thấy điều này (tất nhiên là ngày tại 2 Sheet này phải là ngày 10/11/2009 để tương ứng với file 09 11 10.xls).
" . .Nếu chọn ngày có file tương ứng (10/11/2009) thì không thấy ngày đã chọn trên Calendar . ." Có phải ý anh là nếu ta nhập dữ liệu vào ô ngày bằng cách đánh máy trực tiếp vào thì trên calender ko thấy có sự thay đổi tương ứng có phải vậy ko ? hay là ý nào em chưa hiểu ,mong anh giải thích rõ hơn
Bạn thử chọn ô B11 trên Sheet Báo cáo TC 1 và chọn một số ngày trên Calendar xem sao.

-0-/. Trong Sub Copy_Data_TC1 ở bài trên, bạn có thể bỏ câu
PHP:
: Exit Sub
cuối cùng, bởi vì ngay sau đó là End Sub => Không cần Exit Sub cũng được.
//**/ Còn ý tưởng mới của bạn thì sao nhỉ?
 
Lần chỉnh sửa cuối:
Em vừa nghĩ ra i ý tưởng để giải quyết vấn đề này (ko sợ ô đơn hay ô gộp nữa) .Em sẽ mô phỏng ứng dụng này thành 1 hàm gọi là Hàm Look cell . Em đã thể hiện ý tưởng rất chi tiết .Em xin trình bày sơ lượt như sau :
Trong file đình kèm có 4 sheet
- Sheet 1 : Phân tích chi tiết các trường hợp trong hàm Lookcell
- Sheet 2 : Giao diện và cấu trúc hàm (nhờ anh giúp ở phần này)
- Sheet 3 : Ứng dụng hàm để giải quyết các T/h ở sheet 1
- Sheet 4 : Kết luận

Em quên xin bổ sung thêm ,hàm này có thể xử lý với các sheet có tên tiếng viết và có khoảng cách (VD:Kê tiền) và ko phù thuộc vào tên sheet (tức tên sheet là Kê tiền khi thay đổi tên khác thì công thức tự động thay đổi theo)

Do còn nhiều hạn chế về kiến thức nếu có gì ko đúng mong anh chỉ bảo thêm ,xin cám ơn +-+-+-+
 
Chỉnh sửa lần cuối bởi điều hành viên:
- Trước hết, phải công nhận rằng bạn là người cực kỳ cẩn thận và có khiếu thẩm mỹ, nhìn các file của bạn là biết.
- Thứ 2, góp ý 1 xíu về hàm Lookcell: Sao truy cập tới 1 ô trong Workbook mà không thấy tên Worksheet đâu cả? Theo mình thì cần thiết phải có thêm tham số Sheet nữa, tức là cú pháp của hàm là:
=Lookcell(Path,Name,Sheet,Cell)
- Cuối cùng, cái hàm này có vẻ còn hơi khó khăn vì vấn đề:
hàm này có thể xử lý với các sheet có tên tiếng viết và có khoảng cách (VD:Kê tiền) và ko phù thuộc vào tên sheet (tức tên sheet là Kê tiền khi thay đổi tên khác thì công thức tự động thay đổi theo)
Để nghiên cứu thêm đã. Mình thấy ý tưởng của bạn cũng khá hay. Hy vọng sớm có lời giải cho bạn.
Thân!
 
Lần chỉnh sửa cuối:
Xin cám ơn sự quan tâm và giúp đỡ của anh trong thời gian qua . Em nghĩ sự góp ý của anh là rất hợp lý . Hy vọng sớm nhận được hồi âm của anh , xin cám ơn
 
Anh Nghiaphuc ơi ,chắc anh bận lắm có khi nào quên luôn em ko ?
Thực ra thì mình đang... bí với hàm LookCell vì vấn đề: nếu thêm tham số Sheet vào thì nó không thể tự động thay đổi khi tên Sheet Kê tiền thay đổi, còn nếu không thêm tham số này vào thì không được, mà nếu thêm vào nhưng không tự động cập nhật thì có khi dùng cách lúc trước hay hơn.
Khó quá... khó quá... +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+
 
Vậy mà em tưởng anh quên rồi chứ , xin anh ráng giúp dùm ,nghe anh nhắn thế am mừng lắm . Xin cám ơn anh ,
Hôm rồi ,em xem trên diễn đàn GPE có bán sách "Lập Trình VBA Trong Excel" của thầy Phan Tự Hướng
Link : http://www.giaiphapexcel.com/forum/showthread.php?t=22105
Em ko biết sách này có thể dùng cho những người chưa biết gì được ko ,nếu anh biết xin chỉ giúp ,xin cám ơn
 
mình có các file chứa dữ liệu muốn tổng hợp lại thành 1 file có số liệu là tổng số liệu của các file đó. mình làm mãi không được nhờ các bạn giúp
View attachment 44598
 
mình gửi lại file các bạn giúp mình nhé
Cái này mà bấm nút làm chi mệt, cấu trúc các file như nhau mà. Đặt tất cả các file vào 1 thư mục, sau đó thực hiện các phép tính theo yêu cầu của bạn, giống như thao tác qua lại giữa các sheet mà. Khi dữ liệu các file L6 L7.. thay đổi thì chỉ cần update file Toan truong là được thôi.
 
Cái này mà bấm nút làm chi mệt, cấu trúc các file như nhau mà. Đặt tất cả các file vào 1 thư mục, sau đó thực hiện các phép tính theo yêu cầu của bạn, giống như thao tác qua lại giữa các sheet mà. Khi dữ liệu các file L6 L7.. thay đổi thì chỉ cần update file Toan truong là được thôi.
Bạn ấy đưa ra ý tưởng là dùng nút cũng đúng vì nếu không phải là mấy file L6 L7 thôi trong trường hợp nhiều file mà làm như bạn thì tốn thời gian hơn.
 
Bạn ấy đưa ra ý tưởng là dùng nút cũng đúng vì nếu không phải là mấy file L6 L7 thôi trong trường hợp nhiều file mà làm như bạn thì tốn thời gian hơn.
Cấu trúc các file như nhau nên chẳng có gì là tốn thời gian, nếu có tốn thì cũng chỉ 1 lần, khi có thay đổi mình tự thay đổi được. Nếu nhờ viết code thì phải post lên cho người khác sửa code lại cũng bất tiện không kém. Nếu muốn bấm nút thì trong quá trình làm record macro rồi gán vào nút mà bấm thôi.
 
Cấu trúc các file như nhau nên chẳng có gì là tốn thời gian, nếu có tốn thì cũng chỉ 1 lần, khi có thay đổi mình tự thay đổi được. Nếu nhờ viết code thì phải post lên cho người khác sửa code lại cũng bất tiện không kém. Nếu muốn bấm nút thì trong quá trình làm record macro rồi gán vào nút mà bấm thôi.
mặc dù các file như nhau nhưng nếu nhiều file làm thủ công thì ít nhất cũng phải làm công thức tính tổng gộp tất cả các file lại. Theo mình là mất thời gian.
 
Cảm ơn các bạn đã quan tâm

mặc dù các file như nhau nhưng nếu nhiều file làm thủ công thì ít nhất cũng phải làm công thức tính tổng gộp tất cả các file lại. Theo mình là mất thời gian.
Ý mình là dùng code vì các file L6,L7... chỉ là ví vụ. Bởi vì các file có cấu trúc y hệt nhưng số lượng file là không cố định. Mình muốn khi giao cho mỗi Giáo viên 1 file (*.xls) có cấu trúc như nhau, GV nhập số liệu của mình và nộp lại, mình sẽ copy vào một thư mục sau đó bấm nút là dữ liệu tự động tổng hợp cho file cần tổng hợp là xong. Từ đó sẽ áp dụng cho cả các công việc khác tương tự vậy.
 
Bạn download file đính kèm, đây là kết quả mình thu được từ macro thôi chứ code thì chịu thua thôi.
 

File đính kèm

  • QL.rar
    20.8 KB · Đọc: 77
Bạn download file đính kèm, đây là kết quả mình thu được từ macro thôi chứ code thì chịu thua thôi.
Tại sao bạn không dùng Consolidate nhỉ? Record macro quá trình tổng hợp bằng Consolidate từ 4 file con xem thế nào nhé
Bào đảm code sẽ cực ngắn đấy! Nếu biết chỉnh sửa code thì lại càng ngắn hơn (không thì cứ để nguyên cũng chẳng sao)
Consolidate này có 1 điểm độc đáo là không cần mở file vẫn tổng hợp được
Bạn thử xem!
(chưa biết PivotTable thì thế nào)
 
Cảm ơn các bạn. Mình thấy như vậy là rất tốt rồi. Mình muốn đoạn mã tự động find trong thư mục đó có bao nhiêu file để từ đấy tự động điền công thức:
"=[L6.xls]CL1!RC+[L7.xls]CL1!RC+[L8.xls]CL1!RC+[L9.xls]CL1!RC+....+[file_Ln]" có được không.
Dùng thì:
Range("B4").Select
Selection.Consolidate Sources:= _
Array("'E:\LAP TRINH EXCEL 2010\QL\L9.xls'!R4C2:R15C12" _
, "'E:\LAP TRINH EXCEL 2010\QL\L8.xls'!R4C2:R15C12",....), Function:=xlSum, TopRow _
:=False, LeftColumn:=False, CreateLinks:=False
Range("B4").Select
Nhưng vẫn bị cố định bởi 4 file
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom