Lọc và gán số lượng qua sheet khác (2 người xem)

Liên hệ QC

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

overnight_9

strive for mastery
Tham gia
4/7/12
Bài viết
160
Được thích
81
Nghề nghiệp
Công nhân
Filter số lượng và gán qua sheet khác

kg: các thầy,
các thầy xem & giúp em đoạn code này.

Nội dung:
DH.xls (sheets("DHN") các cột được dùng đến (H8, J8, O8, X8, Y8)
CSU.xls(sheets("(CB_DP"), các ô dùng đến là (Y16 đến IV17), dòng ("Y18:IV250") để gán số lượng.

2 files trên, mục đích là cộng SỐ LƯỢNG từ file DH ở chiều dọc, gán cho cho file CSU thành chiều ngang, từ sheet CB_DP tham chiếu qua sheet DHN các cột như sau:

Từ 2 hàng của workbook("CSU.xls").Sheets("CB_DP").Range("Y16: & IV17") tham chiếu qua 2 cột workbook("DH.xls").sheets("DHN").Range("H8:H65000", "J8:J65000") và (dùng lệnh Trim của excel cắt bỏ các , khoảng trắng, dấu chấm, dấu phẩy, dấu nháy) chỉ lấy A --> Z, a --> z, 1 --> 0, trước khi đưa vào MẢNG. Nếu trùng nhau thì tham chiếu qua sheets("DHN").Range("X8:X65000") nếu cột này có chữ "OK" thì tham chiếu tiếp qua Range("O8:O65000) để cộng số lượng lại rồi gán qua vùng ("Y18:IV250") của sheets("CB_DP"). Nếu thỏa mãn đk thì trở lại đánh dấu bằng cách nghi ngày tháng (FormatDate) vào ("Y8:Y65000") của sheets("DHN") tương ứng với các dòng vừa được lấy số lượng.
em cám ơn các thầy.
 

File đính kèm

Lần chỉnh sửa cuối:
Còn xúi người khác dùng lệnh Trim nữa mới ghê chứ

kg:
các thầy xem & giúp em đoạn code này.(dùng lệnh Trim của excel cắt bỏ các , khoảng trắng, dấu chấm, dấu phẩy, dấu nháy) chỉ lấy A --> Z, a --> z, 1 --> 0, trước khi đưa vào MẢNG.
.

Thử code này xem thế nào, 2 file này đều đang mở nghen

Hôm nay thử áp dụng chiêu VBScript.RegExp vào bài này để rút kinh nghiệm

PHP:
Sub tong()
Dim DH As Worksheet, CSu As Worksheet
Dim Temp As Object
Dim kq(), dulieu(), dk1, dk2, i, j
Set DH = Workbooks("DH.xls").Sheets("DHN")
Set CSu = Workbooks("CSU.xls").Sheets("CB_DP")
Set Temp = CreateObject("VBScript.RegExp")
Temp.Global = True
Temp.Pattern = "\W"
CSu.[Y18:IV250].ClearContents
kq = CSu.Range(CSu.[y16], CSu.[y16].End(2).Offset(2)).Value
dulieu = DH.Range(DH.[H28], DH.[H65536].End(3)).Resize(, 17).Value

For i = 1 To UBound(kq, 2)
   For j = 1 To UBound(dulieu)
      dk1 = UCase(kq(1, i) & kq(2, i))
      dk2 = UCase(dulieu(j, 1) & dulieu(j, 3))
      dk1 = Temp.Replace(dk1, "")
      dk2 = Temp.Replace(dk2, "")
      If dk1 = dk2 And dulieu(j, 16) = "OK" Then
         kq(3, i) = kq(3, i) + dulieu(j, 8)
         dulieu(j, 17) = Date
      End If
   Next
Next
CSu.[y16].Resize(3, i - 1) = kq
DH.[H28].Resize(j - 1, 17) = dulieu
End Sub
 
Lần chỉnh sửa cuối:
dear anh QuangHai,
nó không chay anh oi, chay mổi ClearContents thôi rồi tịt luôn anh àh.
check lai giúp em với.
 
Mình mới test lại thử vẫn chạy ào ào mà có lỗi gì đâu chứ.

vậy gởi file cho em đi. em test nó ko chay mà cũng không báo lỗi gì hết.

mà anh Hải mới xét có 1 điều kiện thôi.
PHP:
kq = CSu.Range(CSu.[y16], CSu.[y16].End(2).Offset(2)).Value
dulieu = DH.Range(DH.[H28], DH.[H65536].End(3)).Resize(, 17).Value

tới 2 điều kiện mà anh Hải

Từ 2 hàng của workbook("CSU.xls").Sheets("CB_DP").Range("Y16: & IV17") tham chiếu qua 2 cột workbook("DH.xls").sheets("DHN").Range("H8:H65000", "J8:J65000") và

em cám ơn
 
Lần chỉnh sửa cuối:
mà anh Hải mới xét có 1 điều kiện thôi.
PHP:
kq = CSu.Range(CSu.[y16], CSu.[y16].End(2).Offset(2)).Value
dulieu = DH.Range(DH.[H28], DH.[H65536].End(3)).Resize(, 17).Value

tới 2 điều kiện mà anh Hải

em cám ơn


Hic hic, cái chỗ ấy mình khai báo vùng dữ liệu sẽ gán vào mảng mà. Người ta xét điều kiện ở đây nè ông tướng ơi. Đọc code kiểu này chết tui rồi

Nếu dk1= dk2 và nếu dulieu(j,16)= "ok" thì làm cái này cho tui nha...

Coi file đính kèm nghen

PHP:
      If dk1 = dk2 And dulieu(j, 16) = "OK" Then
         kq(3, i) = kq(3, i) + dulieu(j, 8)
         dulieu(j, 17) = Date
      End If
 

File đính kèm

Lần chỉnh sửa cuối:
Hic hic, cái chỗ ấy mình khai báo vùng dữ liệu sẽ gán vào mảng mà. Người ta xét điều kiện ở đây nè ông tướng ơi. Đọc code kiểu này chết tui rồi

Anh nói anh mới nghiên cứu lập trình mới 3 or 4 tháng tin nổi không đây sư huynh???

em nhìn tổng quát, không tính phần cơ bản, riêng phần ARRAY để áp dụng nhuần nhuyễn như anh cũng mất trên 4 tháng rồi,

khó tin thật. HIC HIC HIC
 
Anh nói anh mới nghiên cứu lập trình mới 3 or 4 tháng tin nổi không đây sư huynh???

em nhìn tổng quát, không tính phần cơ bản, riêng phần ARRAY để áp dụng nhuần nhuyễn như anh cũng mất trên 4 tháng rồi,

khó tin thật. HIC HIC HIC

Ngoài lề chủ đề topic tí:


Ngày 30/6/2012 là sinh nhật lần thứ 6 của GPE. Lúc đó mình chưa biết xài mảng nữa đó, chỉ vọc phá được vài code cơ bản xử lý trực tiếp trên sheet. Đêm 29/6 còn phải gởi 1 bài nhờ giải thích cách Redim cho 1 mảng, được anh Cò và 1 vài thành viên khác trả lời hướng dẫn

Vậy Overnight tính thử xem từ đầu tháng 7 đến giờ là bao lâu? Thực ra cũng nhờ chịu khó đọc và suy luận code từ diễn đàn nên giờ cũng tạm gọi đã nắm được cơ bản VBA For Excel, nhưng đổi lại thì do thức khuya nhiều nên mất hết mấy ký thịt rồi
 
hi anh QuangHai,
em sorry, em muốn học từng phần thông cảm em nhé.
em thêm 1 bước nữa là.
Sheets("CB_DP") vùng ("Y24:IV65000") là vùng số lượng có sẵn sau khi lấy vùng ("Y18:IV18") có số lượng rồi thì sẽ nhân với vùng ("Y24:IV65000").
vd: $Y$18 * (Y24 to Y65000); $Z$18 * (Z24 to Z65000)....$IV$18 * (IV24 to IV65000).

em cám ơn anh.
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom