Xin giúp đỡ 1 đoạn code vb copy có điều kiện trong excel. (2 người xem)

Liên hệ QC

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

tuanbonus

Thành viên mới
Tham gia
2/6/12
Bài viết
23
Được thích
3
Xin chào anh em trong diễn đàn, mình thành viện mới đang nghiêu cứu ngôn ngữ VB. đang gặp khó khăn xin nhờ các bật tiền bối hổ trợ giúp 1 đoạn mã này.

Lấy dữ liệu từ workbook2-(CHI_TIET) qua workbook1-(KETQUA) có 2 điều kiện như sau:

a) Đâu tiên sẽ lấy dữ liệu của 3 cột (A4:A147 & B4:B147 & C4:C147) qua workbook KETQUA. 3 cột này tham chiếu qua KETQUA nếu trùng dữ liệu với 3 cột A & B & C (3 cột này phải trùng nhau tương ứng A=A,B=B,C=C) thì không copy, chỉ copy những dữ liệu mới và Paste nối tiếp phiá dưới. (không dán đè lên dữ liệu có sẵn)

b) Lấy các cột SỐ LƯỢNG, sẽ tìm từ E4:M147 của workbook CHI_TIET dán qua (E & M) của KETQUA tương ứng với 3 cột A,B,C.

mình ngồi ngâm cứu mãi chỉ được có tí thế này, không đáp ứng được điều kiện, xin các bật tiền bối của diễn đàng cứu giúp, minh xin chân thành cảm ơn.
 

File đính kèm

Có code VB nào để nghiên cứu?Tôi có thấy code nào đâu nhỉ?

nên nhớ có nhiều cách làm không nhất thiết phải cứ VB code nhé
 
Xin giúp đỡ 1 đoạn code vb copy có điều kiện trong excel

dear anh Hoàng,
vì workbook KETQUA sẽ là database, nhiều người sẽ dùng chung & update thường xuyên từ workbook CHI_TIET. thao tác thủ công mất rất nhiều thời gian.

em có đính kèm lại code anh xem chỉ giáo giúp, nếu có cách khác hay hơn xin anh mách giúp.
cái khó của em khi make code là copy & update dữ liệu vào KETQUA có điều kiện, như 1 hàm VLOOKUP trả về khi thoả điều kiện, ở đây nếu trùng nhau ở 3 cột (VT, MAU, QUI CÁCH) thì chỉ copy dữ liệu qua thôi.
 
Xin giúp đỡ 1 đoạn code vb copy có điều kiện trong excel

dear anh Hoàng,
vì workbook KETQUA sẽ là database, nhiều người sẽ dùng chung & update thường xuyên từ workbook CHI_TIET. thao tác thủ công mất rất nhiều thời gian.

em có đính kèm lại code anh xem chỉ giáo giúp, nếu có cách khác hay hơn xin anh mách giúp.
cái khó của em khi make code là copy & update dữ liệu vào KETQUA có điều kiện, như 1 hàm VLOOKUP trả về khi thoả điều kiện, ở đây nếu trùng nhau ở 3 cột (VT, MAU, QUI CÁCH) thì chỉ copy dữ liệu qua thôi.
 

File đính kèm

Một số ý kiến sau khi xem file đính kèm của bạn:
1. Có phải bạn muốn tổng hợp số liệu vào WB KetQua từ nhiều nguồn (nhiều người nhập vào WB Chi_Tiet)?
2. Khi đưa dữ liệu vào Chi_Tiet thì đưa thêm (bổ sung, nếu đã có bộ 3 mã) vào bên dưới hay là sửa lại dữ liệu đã có?
3. Sau khi đã cập nhật dữ liệu, lần sau thì làm sao biết những bộ 3 mã này đã cập nhật trước đó rồi? Vì nếu không kiểm soát thì quá trình cập nhật sẽ tổng hợp lại dữ liệu đã cập nhật trước đó.
4. Ở trên bạn có nói:
...thì không copy, chỉ copy những dữ liệu mới và Paste nối tiếp phiá dưới.
không copy là không copy cái gì? đã không sao còn "chỉ copy..." - câu này rất khó hiểu ý bạn muốn nói gì?
 
Lần chỉnh sửa cuối:
dear anh Hoàng,
vì workbook KETQUA sẽ là database, nhiều người sẽ dùng chung & update thường xuyên từ workbook CHI_TIET. thao tác thủ công mất rất nhiều thời gian.

em có đính kèm lại code anh xem chỉ giáo giúp, nếu có cách khác hay hơn xin anh mách giúp.
cái khó của em khi make code là copy & update dữ liệu vào KETQUA có điều kiện, như 1 hàm VLOOKUP trả về khi thoả điều kiện, ở đây nếu trùng nhau ở 3 cột (VT, MAU, QUI CÁCH) thì chỉ copy dữ liệu qua thôi.
Xem thử file này, sau khi cập nhật dữ liệu xong thì xoá số liệu bên sheet chi tiết để khỏi sợ bấm nút nhiều lần sẽ cộng dồn lên nhiều lần.
Nhớ Enable Macros.
 

File đính kèm

dear a.Hoang.
1. yes, đúng thế aHoàng vì bảng CHI TIẾT này có thể có đến 5 bảng để tập hợp vào KETQUA Bảng KQ này như 1 DATABASE được update thường xuyên.

2.Bảng CHI-TIET này được cập nhật thủ công của nhân viên, mổi người 1 bảng, và sao khi nó được Copy or Cut qua KETQUA rồi thi bảng CHI TIẾT sẽ là "CLEAR CONTENTS" cho tất cả các dữ liệu để nhập tiếp dữ liệu mới.

3.Từ 2 ý trên (#1, #2) lần cập nhật (update) tiếp theo thì bảng CHI TIET có 3 cột (VT, MÀU, Q.CÁCH) sẽ có dữ liệu mới và cả dữ liệu củ,
(vd: ở 2 bảng CHI TIET & KETQUA có 1 dòng (row) trong đó có 3 cells VT: có cùng 1 chủng loại "Leather". MÀU: có cùng 1 chủng loại "white". ĐVT: có cùng 1 chủng loại "44" thì mới gọi là trùng nhau, còn lại 1 trong 3 cells này khác nhau thì khác nhau).

Nếu là trùng nhau thì khi Copy hoặc Cut dán đè lên 3 cái cells củ ở bảng KQ cũng được, còn những dữ liệu mới (không trùng nhau) thì dán tiếp phía dưới, không được dán đè lên dữ liệu đang có ở bảng KETQUA.

Tiếp theo đến phần lấy các cột SỐ LƯỢNG, từ cột E trở về sau là những cột SLượng những cells như (E2:E3, F2:F3, G2:G3.....) là tên một mặt hàng khi cập nhật mới cũng sẽ có tên mới và tên củ nếu 2 bảng CHI TIET & KQ có E2:E3 trùng nhau thì nó sẽ xoá SLượng đang có ớ cột đó ở bảng KQ rồi tham chiếu 2 chiều như hàm Excel để update lại SL mới cho cột đó từ bảng CHI TIET (tham chiếu giữa tên mặt hàng (E2:E3, F2:F3....) với 3 cột VT, MÀU, QUY CACH để gán số lượng)

Còn những cột của mặt hàng mới, thì nó lấy cột rỗng (empty column) kế tiếp để copy tên mặt hàng mới rồi tham chiếu 2 chiều để gán SỐ LƯỢNG.

bảng CHI TIET thì mặt định chó 9 columns số lượng thôi.
Sao khi hoàn tất các bước ỏ bảng CHI TIET sẽ là Clear những dữ liệu vừa lấy. chuẩn bị cho lần update kế tiếp.

HY VỌNG ANH HIỂU Ý EM VÀ GIÚP EM HOÀN THÀNH TỐT VIỆC NÀY, EM CẢM ƠN.
 
Xem thử file này, sau khi cập nhật dữ liệu xong thì xoá số liệu bên sheet chi tiết để khỏi sợ bấm nút nhiều lần sẽ cộng dồn lên nhiều lần.
Nhớ Enable Macros.

em tks anh BaTe,
nhưng em có mấy điều kiện em nêu phía dưới nữa anh mách giúp em vài đoạn nữa đi anh, em cám ơn anh
 
em tks anh BaTe,
nhưng em có mấy điều kiện em nêu phía dưới nữa anh mách giúp em vài đoạn nữa đi anh, em cám ơn anh
Còn vài đoạn nữa là gì, bạn giải thích rõ kèm theo ví dụ cụ thể thì dễ hiểu hơn. Đọc cả bài #7 bên trên thật tình tôi cũng mơ mơ hồ hồ.
Thử hiểu như vầy nhé: Lấy dữ liệu từ sheet ChiTiet qua sheet KetQua, Nếu cùng mã (A & B & D) thì lấy số liệu mới đè lên số liệu cũ, nếu không thì giữ nguyên số liệu cũ đã có ở sheet KetQua. Nếu mã này chưa có bên sheet Ketqua thì chép nguyên dữ liệu của mã này vào dòng kế tiếp trong sheet Ketqua. Đúng không?
 

File đính kèm

Còn vài đoạn nữa là gì, bạn giải thích rõ kèm theo ví dụ cụ thể thì dễ hiểu hơn. Đọc cả bài #7 bên trên thật tình tôi cũng mơ mơ hồ hồ.
Thử hiểu như vầy nhé: Lấy dữ liệu từ sheet ChiTiet qua sheet KetQua, Nếu cùng mã (A & B & D) thì lấy số liệu mới đè lên số liệu cũ, nếu không thì giữ nguyên số liệu cũ đã có ở sheet KetQua. Nếu mã này chưa có bên sheet Ketqua thì chép nguyên dữ liệu của mã này vào dòng kế tiếp trong sheet Ketqua. Đúng không?


dear anh BaTe,
Yes, đúng vậy đó anh BaTe, anh đã hiểu được ý em rồi, & em cám ơn anh rất nhiều nhiều anh cho em đoạn code tuyệt vời:

còn khúc cuối nữa anh BaTe, anh add thêm cho em như ý anh ở trên:

"Lấy dữ liệu từ sheet ChiTiet qua sheet KetQua, Nếu cùng mã (A & B & D) thì lấy số liệu mới đè lên số liệu cũ, nếu không thì giữ nguyên số liệu cũ đã có ở sheet KetQua. Nếu mã này chưa có bên sheet Ketqua thì chép nguyên dữ liệu của mã này vào dòng kế tiếp trong sheet Ketqua"

và cộng thêm 1 điều kiện nữa là: anh nhình ở các Cells (E2&E3, F2&F3, G2&G3 đến M2&M3) của sheet CHITIET, đây là tên những mặt hàng, nếu nó trùng với bất kỳ cột nào của (E2&E3,F2&F3.........(N cell) của bảng KQ thì copy đè lên ở bảng KQ. Nếu không trùng nhau thì nó lấy cột rỗng tiếp theo của bảng KQ để gán số lượng. (không copy đè lên các mặt hàng đã có) vì mổi lần update là có mặt hàng mới, cũng có củ.

nó giống như điều kiện anh nói ở trên nhưng đây là cột column.

giúp em nhé anh BaTe ơi, sắp xong rồi.
 
Hiểu chết liền!
Híc! Cò ơi cứu bồ!

dear anh BATE,
thì như anh đã nói:
"Lấy dữ liệu từ sheet ChiTiet qua sheet KetQua, Nếu cùng mã (A & B & D) thì lấy số liệu mới đè lên số liệu cũ, nếu không thì giữ nguyên số liệu cũ đã có ở sheet KetQua. Nếu mã này chưa có bên sheet Ketqua thì chép nguyên dữ liệu của mã này vào dòng kế tiếp trong sheet Ketqua.
Và số lượng cũng vậy nếu mã ở các cột F & E & G... ở các cells (E2 & E3; F2 & F3; G2 & G3 ...) trùng thì lấy số mới đè lên số củ, nếu mã này chưa có bên sheet KQ thì gán vào CỘT tiếp theo của sheet Ketqua".như file đính kèm, lần update tiếp theo nếu các cột E & F được thay đổi tên ở cell (E2 & E3; F2 & F3.....) thì số lượng đè lại đè lên các tên tên đang có của sheet Ketqua.

giúp em tí nữa đi anh BATE
 

File đính kèm

Đưa liệu giống thật đi, 2 cái nầy có gì giống nhau đâu mà làm.
|
E​
|
F​
|
G​
|
H​
|
I​
|
2​
|
TAO​
|
MAN​
|
LE​
|
CHE​
|
COM​
|
3​
|
NAU​
|
HONG​
|
DEN​
|
DF​
|
DFD​
|
|
E​
|
F​
|
G​
|
2​
|
CAM​
|
XOAI​
|
BUOI​
|
3​
|
TRANG​
|
DEN​
|
DO​
|
 
Đưa liệu giống thật đi, 2 cái nầy có gì giống nhau đâu mà làm.
|
E​
|
F​
|
G​
|
H​
|
I​
|
2​
|
TAO​
|
MAN​
|
LE​
|
CHE​
|
COM​
|
3​
|
NAU​
|
HONG​
|
DEN​
|
DF​
|
DFD​
|
|
E​
|
F​
|
G​
|
2​
|
CAM​
|
XOAI​
|
BUOI​
|
3​
|
TRANG​
|
DEN​
|
DO​
|

dear anh BATE,
Lần update tiếp theo, nếu (E2 & E3) của sheet Ketqua trùng với (E2 & E3) của sheet CHITIET thì sẽ dán đè lên số lượng củ của sheet Ketqua còn nếu mà không thì giữ nguyên số lượng củ. Còn nếu E2 & E3 không có ở sheet Ketqua thì lấy cột trống tiếp theo của sheet Ketqua để gán số lượng, tương tự cho các cột còn lại (F, G, H, I.....) ý em là vậy đó anh BATE.
 
dear anh BATE,
Lần update tiếp theo, nếu (E2 & E3) của sheet Ketqua trùng với (E2 & E3) của sheet CHITIET thì sẽ dán đè lên số lượng củ của sheet Ketqua còn nếu mà không thì giữ nguyên số lượng củ. Còn nếu E2 & E3 không có ở sheet Ketqua thì lấy cột trống tiếp theo của sheet Ketqua để gán số lượng, tương tự cho các cột còn lại (F, G, H, I.....) ý em là vậy đó anh BATE.
Thử lại với file này xem.

hu hu hu, các sư phụ ơi! a BATE ơi! cứu em đi, em xin cảm tạ.

Đừng viết những bài như vậy nữa.
Người khác không trả lời vì có thể không hiểu bạn muốn gì, hoặc đang tìm cách để giải quyết theo yêu cầu của bạn, hoặc gì gì đó...
Không phải cứ hu hu.., cứu cứu... là người khác phải giúp bạn đâu.
Bài viết không giá trị mất công các Mod phải xóa bài.
 

File đính kèm

Lần chỉnh sửa cuối:
dear anh BATE,
yes, đúng rồi anh BATE 1000 lần cảm ơn anh.

nhưng em chay file nó báo lổi này anh BATE, anh check lại dòng này giúp em xem lỗi gì vậy anh?

Arr2(Dic2.Item(Rng1(I, 1) & Rng1(I, 2) & Rng1(I, 4)), Dic.Item(Ws1.Cells(2, J) & Ws1.Cells(3, J)) + 4) = Rng1(I, J)
 

File đính kèm

dear anh BATE,
yes, đúng rồi anh BATE 1000 lần cảm ơn anh.

nhưng em chay file nó báo lổi này anh BATE, anh check lại dòng này giúp em xem lỗi gì vậy anh?

Arr2(Dic2.Item(Rng1(I, 1) & Rng1(I, 2) & Rng1(I, 4)), Dic.Item(Ws1.Cells(2, J) & Ws1.Cells(3, J)) + 4) = Rng1(I, J)
Bạn "giỡn" vui thật!
Dữ liệu trong 4 cột đầu sheet ChiTiet có trong 4 cột đầu của sheet KetQua đâu mà không lỗi?
4 cột đầu sheet Chitiet phải có sẵn trong sheet KetQua code mới chạy được.
Từ đầu bạn đâu có nói là nếu dòng nào không có bên sheet KetQua thì xử lý nó ra sao? Chỉ nói đến thêm cột thôi mà!
Thêm cho bạn 1 Sub nữa, "chạy tá lả" luôn, dữ liệu trong sheet KetQua sẽ "lộn xà ngầu".
Muốn dễ tìm kiếm thì Sort nó lại nhé.
------------------------
Không cần nói nhiều vậy đâu, chỉ cần biết "Nhấn Nút Cảm Ơn" là được rồi.
 

File đính kèm

Lần chỉnh sửa cuối:
dear anh BATE,
chạy verry good và đúng như yêu cầu rồi không tá lả đâu anh, cám ơn anh, nhưng anh có thể khai giúp em vài biến trong đoạn code này để link và copy giữa 2 workbooks với nhau được không anh, code gắn ở workbook KETQUA để copy từ workbook CHITET qua. Em định tự điều chỉnh mà ngồi làm cả đêm vẫn bị ERROR. đúng như anh nói "--Bể ...dốt mênh mông, quay đầu là bờ ?!" càng ngẫm câu này càng thắm )(&&@@ mong anh giúp em thêm tí nữa.
 

File đính kèm

dear anh BATE,
chạy verry good và đúng như yêu cầu rồi không tá lả đâu anh, cám ơn anh, nhưng anh có thể khai giúp em vài biến trong đoạn code này để link và copy giữa 2 workbooks với nhau được không anh, code gắn ở workbook KETQUA để copy từ workbook CHITET qua. Em định tự điều chỉnh mà ngồi làm cả đêm vẫn bị ERROR. đúng như anh nói "--Bể ...dốt mênh mông, quay đầu là bờ ?!" càng ngẫm câu này càng thắm )(&&@@ mong anh giúp em thêm tí nữa.
Sao không thử Record Macro?
Tôi xài Excel 2003 thì nó ra như thế này:
PHP:
Sub Macro1()
    Windows("CHITIET.xls").Activate
    Sheets("CHITIET").Select
    Sheets("CHITIET").Copy After:=Workbooks("Ketqua.xls").Sheets(1)
End Sub
Điều kiện cả 2 file Chitiet và Ketqua phải được mở sẵn.
Với lại Copy sheet thủ công chỉ mất vài giây, Cót két làm gì cho phiền phức nhỉ?
 
Sao không thử Record Macro?
Tôi xài Excel 2003 thì nó ra như thế này:
PHP:
Sub Macro1()
    Windows("CHITIET.xls").Activate
    Sheets("CHITIET").Select
    Sheets("CHITIET").Copy After:=Workbooks("Ketqua.xls").Sheets(1)
End Sub
Điều kiện cả 2 file Chitiet và Ketqua phải được mở sẵn.
Với lại Copy sheet thủ công chỉ mất vài giây, Cót két làm gì cho phiền phức nhỉ?

dear anh BATE,
ý em là thay gì copy từ sheet CHITIET qua sheet KQ như anh đã cho em đoan code OK rồi, nhưng em muốn copy trực tiếp từ workbook CHITIET qua workbook KQ luôn, vì workbook KQ là tập hợp & update của nhiều workbooks CHITIET có thể lên đến 5-7files CHITIET anh BATE ơi.
 

File đính kèm

Web KT

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

Back
Top Bottom