PDA

View Full Version : Làm thế nào để kết nối 3 file excel?



npv
01-10-07, 11:24 AM
Em đang phải làm công tác báo cáo và đưa ra các số liệu để phân tích số liệu. Em có 3 file excel, excel1,2,3. Trong đó nó có các cột liên kết với nhau. Em xin giải thích cụ thể như sau:
File Excel 1 là file gốc, sẽ gắn dữ liệu của 2 file excel 2,3 vào file 1.
Mỗi khách hàng sẽ có một mã số, các khách hàng này có thể mua hàng theo nhiểu hợp đồng khác nhau (cụ thể trong file excel 1). Khách hàng khi mua hàng phải đặt cọc, mỗi lần đặt cọc sẽ có một số biên lai đặt cọc. Khách hàng có thể đặt cọc cho một hợp đồng cụ thể hoặc cho toàn bộ quá trình mua bán. Trong file excel 2 có một cột là số hợp đồng mua hàng, nếu khách hàng đặt cọc cho một hợp đồng mua hàng cụ thể thì trong cột này sẽ xuất hiện số hợp đồng mua hàng. Ngoài ra có khách không phải đặt cọc.
Do đó để ghép file excel 2 vào file excel 1 thì các bác chú ý cho em như sau: Ghép theo số khách hàng, nếu khách hàng không có đặt cọc thì ghi giá trị là 0, còn khách hàng đặt cọc cho toàn bộ quá trình mua bán thì chỉ ghi giá trị vào hợp đồng đầu tiên của khách hàng đó, còn các hợp đồng khác thì bỏ qua. Khách hàng đặt cọc cho 1 hợp đồng cụ thể thì ghi giá trị cho hợp đồgn cụ thể đó.
File excel 3 là file về mức độ ưu tiên cái này dùng để ra chính sách đổi với khách hàng.

Em nhờ các bác giúp em.

P/S: Kết quả thu được là file excel 4 để các bác tham khảo. Cái này em làm bằng tay nên mất rất nhiều thời gian mà đây là ví dụ nên ít khách hàng còn trong thực tế rất nhiều khách hàng thì làm bằng tay hầu như là không thể. Rất mong các đại ca ra tay giúp đỡ.

npv
04-10-07, 04:30 PM
Sao chẳng bác nào giúp đỡ em thế?

anhphuong
04-10-07, 05:35 PM
Bạn nên tổ chức lại cơ sở dữ liệu cho hợp lý hơn. Cách tốt nhất là bạn đưa tất cả vào một file duy nhất, mỗi bảng tính chứa những dữ liệu cũ thể của bạn rồi từ đó dùng các công thức hoặc cao hơn là dùng VBA để liên kết các bảng tính lại để tìm ra kết quả như ý muốn. Chúc bạn thành công
Thân

npv
05-10-07, 01:22 PM
Cám ơn bác anhphuong nhiều. Đưa về một file duy nhất thì đơn giản, nhưng mà cũng không dùng các công thức được. Em biết là dùng VBA là được ngay, nhưng mà cái này em đâu có biết lập trình đâu, nên ý của em là em xin các bác một đoạn code để em áp dụng. Cám ơn các pác nhiều.

anhtuan1066
05-10-07, 01:31 PM
Này bạn ơi... dử liệu nhiều quá nhìn rối lắm... Theo cách của bạn anhphuong đầu tiên bạn nên đưa nó về cùng 1 file, sau đó post lên với 1 ít dử liệu thôi (chừng 10 dòng) cái nào ko cần thiết bạn lượt bỏ đi... Tiếp theo ghi rõ yêu cầu ngay sheet cần nối ấy... Nói rõ từng dòng 1 bạn muốn tổng cộng theo tiêu chí gì (cộng trừ cái gì với cái gì)... như thế còn theo dỏi dc chứ như tôi ko chuyên ngành thì nhìn vào chả hiểu gì cả
ANH TUẤN

npv
08-10-07, 03:28 PM
Nghe lời các bác em gom nó lại thành 1 file, 3 sheet đầu là dữ liệu, sheet cuối là kết quả cần tạo ra sau khi chạy chương trình.
Nhờ các bác ra tay giúp đỡ.

ThuNghi
08-10-07, 03:56 PM
Trong này Số HĐ mua hàng là duy nhất? Có trùng?
Thấy Sổ KH 465 có 3 HĐ, vậy có phải là quản theo HD.
Sheet KetQua là kết quả của 3 sh theo số HĐ.
Làm thê nào biết số BL: BL013 là của HĐ MCP200300112 hay là
MCP200300183
Vì trong sh datcoc không thể hiện.
Bạn xem lại DL. Cái này chỉ cần sumif và Vlookup là OK.

npv
09-10-07, 03:28 PM
Chào bạn ThuNghi, hợp đồng mua hàng là duy nhất, nhưng hợp đồng mua hàng cần phải có đặt cọc. Nếu là khách hàng vãng lai, hoặc chưa có quan hệ thân thiết thì thường là đặt cọc một lần cho một hợp đồng, trường hợp này là một biên lai đặt cọc (BL) tương ứng với một hợp đồng mua hàng. Nhưng đối với khách hàng đã quan hệ lâu dài, khách hàng có thể đặt cọc một số tiền nhất định cho tất cả hợp đồng (có thể là hợp đồng đã ký và hợp đồng chưa ký), trường hợp này một biên lai đặt cọc có thể tương ứng với nhiều hợp đồng và đương nhiên trên biên lai đặt cọc đó sẽ không ghi là đặt cọc cho hợp đồng nào. Cho nên nếu là đặt cọc cho nhiều hợp đồgn thì chỉ cần điền số tiền đặt cọc và số biên lai đặt cọc cho hợp đồng mua hàng đầu tiên còn lại là để trống. Tuy nhiên cần chú ý trường hợp khách hàng vừa đặt cọc cho 1 hợp đồng cụ thể vừa đặt cọc cho tất cả các hợp đồng. Nên khi các bạn thiết kế chương trình nên suy ngược từ bên đặt cọc, nếu bên đặt cọc có số hợp đồng cụ thể thì dễ, còn không có thì chỉ cần điền vào hợp đồng đầu tiên của khách hàgn đó là được.
Cám ơn các bạn nhiều và chờ đợi sự giúp đỡ.

SoiBien
09-10-07, 05:59 PM
Em cảm thấy DL của bác chắc còn nhiều trường hợp hơn, không biết bác có thể làm thêm ví dụ nữa không ??? cứ cụ thể như thế là được rồi.

nuhonbietly
10-10-07, 10:40 AM
Tôi đã down file của bạn về rồi. Nhưng thực sự tôi ko hiểu bạn muốn làm cái gì.
bạn phải nói rõ cần tính cột nào ( bạn phải để trống cột đó)
Nhìn qua thì tối thấy bạn chắc sẽ cần dùng đến hàm Vlookup và hàm sumif

ThuNghi
10-10-07, 11:22 AM
Yêu cầu số KH trong sh HD mua hang phải xắp xếp tăng dần
Bạn xem qua file có đúng yêu cầu? if OK tôi sẽ làm khoa học hơn.

npv
10-10-07, 01:24 PM
Cám ơn bạn ThuNghi!
Để tiện cho việc theo dõi bạn có thể sắp xếp lại kết quả của một khách hàng theo số biên lai được không. Nghĩa là một khách hàng mà có cả biên lai đặt cọc cho một hợp đồng cụ thể và cho tất cả các hợp đồng thì đặt số biên lai cho một hợp đồng lên đầu tiên, sau đó đến biên lai cho tất cả các hợp đồng. Trong file ví dụ có khách hàng Nguyễn Thị Hoa có hai biên lai đặt cọc, biên lai số BL018 là cho hợp đồng mua hàng số MCP200300156, còn biên lai số BL019 là cho tất cả các hợp đồng mua hàng, thì kết quả là biên lai số BL018 sẽ đặt trước, còn BL019 sẽ đặt sau. Mình gửi lại file để bạn theo dõi lại nhé.

thanhmai05
10-10-07, 02:07 PM
Sau khi tải file về và xem dữ liệu của bạn, tôi hiểu thế này ko biết có trúng ý bạn không ?
1. Bạn cần kiểm tra từ đầu năm đến thời điểm hiện tại 1 khách hàng đã kí tổng giá trị hợp đồng là bao nhiêu, đã đặt cọc bao nhiêu, hiện tại còn phải trả bao nhiêu ? cái này dùng hàm sumif là xong.
2. Bạn cần liệt kê danh sách các hợp đồng mà 1 khách hàng đã kí từ đầu năm đến hiện tại và liệt kê các biên lại đặt cọc của khách hàng đó để đối chiếu với khách hàng ? Cái này dùng filter.
Theo ý tôi, bạn nên sắp xếp lại dữ liệu để vào số liệu ít lần và dùng vlookup lấy dữ liệu vừa chính xác lại tiết kiệm thời gian. Nên thêm cột thứ tự và thời gian vào các sheet hợp đồng mua bán, đặt cọc để có thể đối chiếu dễ dàng hơn.

ThuNghi
10-10-07, 04:13 PM
Trong file ví dụ có khách hàng Nguyễn Thị Hoa có hai biên lai đặt cọc, biên lai số BL018 là cho hợp đồng mua hàng số MCP200300156, còn biên lai số BL019 là cho tất cả các hợp đồng mua hàng, thì kết quả là biên lai số BL018 sẽ đặt trước, còn BL019 sẽ đặt sau.
Thì sort sh DatCoc theo số BL
Còn làm = VBA thì xem file sau.

hoiphamvan
11-10-07, 01:40 PM
Theo tôi, Bạn chỉ cần mở 3 files sau đó lập công thức (ví dụ tại ô nào đó của Excel1.xls lập công thức ='[excel2.xls]1111'!B7) khi thay đổi dữ liệu Files này sẽ thay đổi Files kia

npv
11-10-07, 01:40 PM
Cám ơn ThuNghi, nhưng không sort sh DatCoc theo số BL được đâu vì trong trường hợp này BL018 là cho hợp đồng mua hàng số MCP200300156 thì làm được như thế nhưng mà nếu ngược lại BL019 mà cho MCO200300156 thì không làm được. À mà mình nói như thế này không biết có tham lam quá không, mình rất thích cách giải quyết bài toán của bạn bằng hàm excel nhưng mà nói thật mình đọc mấy hàm đó không hiểu được cho lắm, nên có thể bạn có thể giải thích mấy hàm đó cho mình được không vì mình thấy trong mấy hàm đó có các biến như DM_2, HDmh... mình không hiểu bạn lấy đâu ra. Ngại quá nhưng mà đã mất công hỏi thì phải hỏi cho chót. Gửi bạn Soibien, đúng là ban đầu số liệu có thêm một trường hợp nữa là có khách hàng không phải đặt cọc, do đó KH đó sẽ không xuất hiện ở trong sheet datcoc, mà chỉ có trong 2 sheet hopdongmuahang và uutien mà thôi, như thế khi link sang sheet kq thì chỉ cần link từ 2 sheet kia mà thôi. Bởi mình nghĩ là sau khi hỏi được các trường hợp kia thì mình tự làm được. Nhưng mà khó quá bây giờ chẳng làm được gì ngoài việc sử dụng luôn bảng của bạn ThuNghi và thay số vào là xong nhưng mà số liệu bạn ThuNghi hình như là chặn đến 1000 dòng thôi nên bây giờ không biết xử lý ra sao. Lại phải nhờ các bạn. Cảm ơn các bạn trước. Ngại quá.

ThuNghi
11-10-07, 03:24 PM
Bạn nhấn Ctr F3, bạn sẽ thấy đó là những vùng range đặt tên thay vì A1:A1000 thì đặt là MyRange...
Ví dụ ta đặt A1:C1000 thì đặt là MyRange
Thì cột B1:B1000 là Index(MyRange,0,1) lấy xuống 0 dòng, lấy qua 1 dòng.
Cái này chỉ khó quá, cứ làm và tìm hiểu sẽ thấy rất hay.
Cứ thấy name nào mà có số 1000 thì bạn sửa thành 5000 hay 10000. Nhớ là phải sửa hết cho bằng 1 số. Ví dụ
=OFFSET(HDMuaHang!$A$2,0,0,COUNTA(HDMuaHang!$A$2:$ A$1000),7)
=OFFSET(HDMuaHang!$A$2,0,0,COUNTA(HDMuaHang!$A$2:$ A$10000),7)

h DatCoc theo số BL được đâu vì trong trường hợp này BL018 là cho hợp đồng mua hàng số MCP200300156 thì làm được như thế nhưng mà nếu ngược lại BL019 mà cho MCO200300156 thì không làm được
Cái này khó nha.