Lấy công nợ theo tên khách hàng bằng VBA (2 người xem)

Liên hệ QC

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

phancolanvy

Thành viên mới
Tham gia
19/2/19
Bài viết
25
Được thích
5
Các bác sửa dùm code VBA lấy dữ liệu từ sheet khác theo tên khách hàng, code không chạy được
218116
 

File đính kèm

Các bác sửa dùm code VBA lấy dữ liệu từ sheet khác theo tên khách hàng, code không chạy được
View attachment 218116
Code này ở đâu bạn có mà không tự chỉnh được?
Bạn lấy "râu ông này cắm cằm bà kia" làm sao chạy?
Sao không dùng Mã KH mà dùng Tên Khách hàng để lọc?
Không xài file .xls nữa, nó nặng nề lắm.
Muốn VBA thì các sheet khác cũng VBA luôn đi, công thức SUMPRODUCT, SUMIF, VLOOKUP, ... với dữ liệu lớn cũng oải cho máy lắm.
 

File đính kèm

Code này ở đâu bạn có mà không tự chỉnh được?
Bạn lấy "râu ông này cắm cằm bà kia" làm sao chạy?
Sao không dùng Mã KH mà dùng Tên Khách hàng để lọc?
Không xài file .xls nữa, nó nặng nề lắm.
Muốn VBA thì các sheet khác cũng VBA luôn đi, công thức SUMPRODUCT, SUMIF, VLOOKUP, ... với dữ liệu lớn cũng oải cho máy lắm.

Dạ tại em đang tìm hiểu VBA từ sách và một số file từ diễn đàn nên không rành ạ. Bác tiện thể góp ý sửa file dùm em cám ơn. Nếu trường hợp em muốn sheet GPE khi lấy dữ liệu theo tên khách thì cộng dồn lại theo mã phiếu (chỉ cộng những phiếu có cùng mã) bác giúp dùm, tại vì khi gởi cho khách xem chi tiết vậy hơi nhiều ạ
 
Dạ tại em đang tìm hiểu VBA từ sách và một số file từ diễn đàn nên không rành ạ. Bác tiện thể góp ý sửa file dùm em cám ơn. Nếu trường hợp em muốn sheet GPE khi lấy dữ liệu theo tên khách thì cộng dồn lại theo mã phiếu (chỉ cộng những phiếu có cùng mã) bác giúp dùm, tại vì khi gởi cho khách xem chi tiết vậy hơi nhiều ạ
Cùng số phiếu nhưng mã hàng, Kg, Lốc, Số lượng, ... khác nhau thì cộng ra sao?
Bỏ các cột đó, chỉ lấy số phiếu thôi thì được.
 
Cùng số phiếu nhưng mã hàng, Kg, Lốc, Số lượng, ... khác nhau thì cộng ra sao?
Bỏ các cột đó, chỉ lấy số phiếu thôi thì được.
Dạ chỉ lấy số phiếu thôi thầy ơi. Mình có thể cho một bảng nhỏ bên cạnh không ạ, vì khi trả tiền khách sẽ đối chiếu theo số lượng phiếu trước cho nhanh, khi nào cần chi tiết theo loại hàng thì mới gởi thêm ạ
 
Dạ chỉ lấy số phiếu thôi thầy ơi. Mình có thể cho một bảng nhỏ bên cạnh không ạ, vì khi trả tiền khách sẽ đối chiếu theo số lượng phiếu trước cho nhanh, khi nào cần chi tiết theo loại hàng thì mới gởi thêm ạ
Lấy số phiếu, các loại HH trong phiếu. Bảng nhỏ là sao không hình dung ra được.
 

File đính kèm

Lấy số phiếu, các loại HH trong phiếu. Bảng nhỏ là sao không hình dung ra được.
Cám ơn thầy rất nhiều
Đoạn code về Dictionary hay quá mà em không hiểu nó như thế nào luôn thầy ơi

Public Sub congno()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), tArr(), I As Long, J As Long, K As Long, R As Long, N As Long, DK As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheet3.Range("A5", Sheet3.Range("C50000").End(xlUp)).Resize(, 15).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 14)
With Sheets("GPE")
tArr = .Range("B5").Resize(, 10).Value
DK = .Range("E2").Value
'Can loc theo ten don vi mua, nhap ten don vi vao o E2
For I = 1 To R
If sArr(I, 3) = DK Then 'dong I cot 3 cua bang da chon
If Not Dic.Exists(sArr(I, 2)) Then
K = K + 1
dArr(K, 1) = K
Dic.Item(sArr(I, 2)) = K
For J = 1 To 10
If tArr(1, J) <> Empty Then
dArr(K, J) = sArr(I, tArr(1, J))
End If
Next J
Else
N = Dic.Item(sArr(I, 2))
dArr(N, 4) = dArr(N, 4) & " +" & sArr(I, 5)
For J = 5 To 7
If tArr(1, J) <> Empty Then dArr(N, J) = dArr(N, J) + sArr(I, tArr(1, J))
Next J
If sArr(I, 12) <> Empty Then dArr(N, 8) = sArr(I, 12)
dArr(N, 9) = dArr(N, 9) + sArr(I, 13)
dArr(N, 10) = dArr(N, 10) + sArr(I, 14)
End If
End If
Next I
.Range("B6").Resize(200, 10).ClearContents
.Range("B6").Resize(200, 10).Borders.LineStyle = 0
If K Then
.Range("B7").Resize(K, 10) = dArr
.Range("B7").Resize(K, 10).Borders.LineStyle = 1
.Range("F6:H6,J6:K6").Value = "=SUM(R[1]C:R[" & K & "]C)"
End If
End With
End Sub

Public Sub No_PhaiThu()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Rws As Long, Txt As String
sArr = Sheets("CONGNOCHITIET").Range("C5", Sheets("CONGNOCHITIET").Range("C100000").End(xlUp)).Resize(, 12).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 10)
With CreateObject("Scripting.Dictionary")
For I = 1 To R
If sArr(I, 1) <> Empty Then
Txt = sArr(I, 1)
If Not .Exists(Txt) Then
K = K + 1
.Item(Txt) = K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 1)
dArr(K, 3) = sArr(I, 2)
End If
Rws = .Item(Txt)
dArr(Rws, 4) = dArr(Rws, 4) + sArr(I, 7)
dArr(Rws, 5) = dArr(Rws, 5) + sArr(I, 8)
dArr(Rws, 6) = dArr(Rws, 6) + sArr(I, 11)
dArr(Rws, 7) = dArr(Rws, 7) + sArr(I, 9)
dArr(Rws, 8) = dArr(Rws, 8) + sArr(I, 12)
End If
Next I
End With
With Sheets("CONGNOPHAITHU")
.Range("A5:H170").ClearContents
.Range("A5:H5").Resize(K) = dArr
.Range("B5:H5").Resize(K).Sort Key1:=.Range("B5"), Order1:=xlAscending
End With
End Sub

Cám ơn thầy rất nhiều
Đoạn code về Dictionary hay quá mà em không hiểu nó như thế nào luôn thầy ơi
Bài đã được tự động gộp:

Cám ơn thầy rất nhiều
Đoạn code về Dictionary hay quá mà em không hiểu nó như thế nào luôn thầy ơi

Public Sub congno()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), tArr(), I As Long, J As Long, K As Long, R As Long, N As Long, DK As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheet3.Range("A5", Sheet3.Range("C50000").End(xlUp)).Resize(, 15).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 14)
With Sheets("GPE")
tArr = .Range("B5").Resize(, 10).Value
DK = .Range("E2").Value
'Can loc theo ten don vi mua, nhap ten don vi vao o E2
For I = 1 To R
If sArr(I, 3) = DK Then 'dong I cot 3 cua bang da chon
If Not Dic.Exists(sArr(I, 2)) Then
K = K + 1
dArr(K, 1) = K
Dic.Item(sArr(I, 2)) = K
For J = 1 To 10
If tArr(1, J) <> Empty Then
dArr(K, J) = sArr(I, tArr(1, J))
End If
Next J
Else
N = Dic.Item(sArr(I, 2))
dArr(N, 4) = dArr(N, 4) & " +" & sArr(I, 5)
For J = 5 To 7
If tArr(1, J) <> Empty Then dArr(N, J) = dArr(N, J) + sArr(I, tArr(1, J))
Next J
If sArr(I, 12) <> Empty Then dArr(N, 8) = sArr(I, 12)
dArr(N, 9) = dArr(N, 9) + sArr(I, 13)
dArr(N, 10) = dArr(N, 10) + sArr(I, 14)
End If
End If
Next I
.Range("B6").Resize(200, 10).ClearContents
.Range("B6").Resize(200, 10).Borders.LineStyle = 0
If K Then
.Range("B7").Resize(K, 10) = dArr
.Range("B7").Resize(K, 10).Borders.LineStyle = 1
.Range("F6:H6,J6:K6").Value = "=SUM(R[1]C:R[" & K & "]C)"
End If
End With
End Sub

Public Sub No_PhaiThu()
Application.ScreenUpdating = False
Dim Dic As Object, sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Rws As Long, Txt As String
sArr = Sheets("CONGNOCHITIET").Range("C5", Sheets("CONGNOCHITIET").Range("C100000").End(xlUp)).Resize(, 12).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 10)
With CreateObject("Scripting.Dictionary")
For I = 1 To R
If sArr(I, 1) <> Empty Then
Txt = sArr(I, 1)
If Not .Exists(Txt) Then
K = K + 1
.Item(Txt) = K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 1)
dArr(K, 3) = sArr(I, 2)
End If
Rws = .Item(Txt)
dArr(Rws, 4) = dArr(Rws, 4) + sArr(I, 7)
dArr(Rws, 5) = dArr(Rws, 5) + sArr(I, 8)
dArr(Rws, 6) = dArr(Rws, 6) + sArr(I, 11)
dArr(Rws, 7) = dArr(Rws, 7) + sArr(I, 9)
dArr(Rws, 8) = dArr(Rws, 8) + sArr(I, 12)
End If
Next I
End With
With Sheets("CONGNOPHAITHU")
.Range("A5:H170").ClearContents
.Range("A5:H5").Resize(K) = dArr
.Range("B5:H5").Resize(K).Sort Key1:=.Range("B5"), Order1:=xlAscending
End With
End Sub

Cám ơn thầy rất nhiều
Đoạn code về Dictionary hay quá mà em không hiểu nó như thế nào luôn thầy ơi
Thầy cộng mấy mã hàng lại đẹp quá luôn ạ
 
Các bác sửa dùm code VBA lấy dữ liệu từ sheet khác theo tên khách hàng, code không chạy được
Cho mình hỏi ngoài lề chút. Là bạn theo dõi công nợ gói gọn mỗi tháng trong 1 file excel (nghĩa là 1 năm có 12 file).
Vậy nếu Như hiện tại là tháng 5 mà có phát hiện sai sót ở tháng 1. Thì phải mở từng file lên cập nhập lại à
 
Cảm ơn anh Ba tê đã tận tình chỉnh sửa bổ sung code. Em thấy file này có thể coi như là 1 tác phẩm kinh điển hoặc cũng như là 1 thư viện để học tập về code cho những dạng bài tổng hợp, trích xuất dữ liệu.
 
Cảm ơn anh Ba tê đã tận tình chỉnh sửa bổ sung code. Em thấy file này có thể coi như là 1 tác phẩm kinh điển hoặc cũng như là 1 thư viện để học tập về code cho những dạng bài tổng hợp, trích xuất dữ liệu.
Chỉ là "chữa cháy" với cái mớ dữ liệu "lu xu bu" mà thôi.
Muốn "kinh điển" thì phải có Data chuẩn, sắp xếp khoa học.
Xem trong file thì còn hàng tá sheets bị Hide mà không hiểu mục đích là gì vì nhìn công thức bị lỗi tùm lum.
Như bạn hỏi ở bài trên (#8), dữ liệu kiểu này thì hàng tháng còn phải tạo dữ liệu thủ công nhiều, rất dễ sai sót.
 
Chỉ là "chữa cháy" với cái mớ dữ liệu "lu xu bu" mà thôi.
Muốn "kinh điển" thì phải có Data chuẩn, sắp xếp khoa học.
Xem trong file thì còn hàng tá sheets bị Hide mà không hiểu mục đích là gì vì nhìn công thức bị lỗi tùm lum.
Như bạn hỏi ở bài trên (#8), dữ liệu kiểu này thì hàng tháng còn phải tạo dữ liệu thủ công nhiều, rất dễ sai sót.
Dạ đúng là hàng tháng là một file khác nhau, đây là file tiếp nhận từ bạn khác đã nghỉ việc. Mình sửa lại khá nhiều mà không rành VBA nên nếu để cả năm thì dữ liệu nhiều quá hàm chạy không nổi, không biết phải chuẩn dữ liệu thế nào cho hợp lý, nhờ các bác góp yếu dùm
Bài đã được tự động gộp:

Cho mình hỏi ngoài lề chút. Là bạn theo dõi công nợ gói gọn mỗi tháng trong 1 file excel (nghĩa là 1 năm có 12 file).
Vậy nếu Như hiện tại là tháng 5 mà có phát hiện sai sót ở tháng 1. Thì phải mở từng file lên cập nhập lại à
Mỗi tháng kiểm kê đối chiếu theo phiếu giấy rồi chuyển cuối kỳ sang đầu kỳ tháng sau luôn. Công ty còn mới cũng đang tìm hiểu một số phần mềm, mà thử một số phần mềm còn rắc rối hơn nữa, chưa tìm ra loại nào hợp ý
 
Lần chỉnh sửa cuối:
Dạ đúng là hàng tháng là một file khác nhau, đây là file tiếp nhận từ bạn khác đã nghỉ việc. Mình sửa lại khá nhiều mà không rành VBA nên nếu để cả năm thì dữ liệu nhiều quá hàm chạy không nổi, không biết phải chuẩn dữ liệu thế nào cho hợp lý, nhờ các bác góp yếu dùm
Bài đã được tự động gộp:


Mỗi tháng kiểm kê đối chiếu theo phiếu giấy rồi chuyển cuối kỳ sang đầu kỳ tháng sau luôn. Công ty còn mới cũng đang tìm hiểu một số phần mềm, mà thử một số phần mềm còn rắc rối hơn nữa, chưa tìm ra loại nào hợp ý
Chỉ 1 sheet Data:
1 năm 365 ngày
1 ngày xuất 100 phiếu
1 phiếu xuất 10 mặt hàng
Tổng cộng 1 năm 365.000 dòng dữ liệu.
-------------------------------------------------
Có thể dùng VBA.
1 file sử dụng 1 năm.
1 năm chuyển cuối kỳ sang đầu kỳ 1 lần.
Thống kê từng tháng, 1 vài tháng, cả năm... có thể sử dụng chung 1 sheet.
-------------------------------------------------
Không kể các sheet phụ: Mã KH, Mã vật tư...
Tìm ra loại hợp lý là do mình.
 
- - - - - - - - - - - - - - - -
Không kể các sheet phụ: Mã KH, Mã vật tư...
Các 'Mã KH', 'Mã VT' theo mình không thể là các trang phụ được.
Mà là, với mình, chính là xương sống của 1 CSDL
Thường mình gọi chúng là các bảng (Table) & có thể nên nhét chung vô 1 trang tính & gọi tên là 'DMuc'
Trong 'DMuc' các bảng này cách nhau chí ít 1 cột trống để dễ bề làm ăn với chúng
& để xây dựng 1 CSDL ta phải mất nhiều công sức để xây dựng các bộ mã này thật khoa học
Mình lấy ví dụ: Muốn xây dựng bộ mã về vật tư trong kho của bạn đã, đang & sẽ có ta cần:
Đầu tiên là mã phân loại (để phân loại hàng), như
F: Văn phòng phẩm (. . .)
E: Thiết bị điện
X: Vật tư trong xây dựng
N: Nhiên liệu
. . . . .
Sau đó đến trạng thái của vậy tư nếu cần:
B: Bột
L lõng
K: Khí
M: kim loại màu
D: kim loại đen
T: Thủy tinh hay dễ vỡ
H: Hay hút ẩm,
. . . . .
Thêm kí tự thứ ba X để phân theo đặc thù vật tư riêng có của CQ bạn
Sau cùng là dẫy số để phân biết các vật tư cùng loại
Dẫy số này dài ngắn tùy qui mô kho của bạn, nh7ng thường thỏa mãn được cho chũng loại VT có nhiều nhất trong kho của bạn.

. . . . (chuyện này chung chung là vậy, cụ thể có thể khác) . . . .

Nói thêm bộ mã được tạo ra trong Excel nên có độ dài như nhau
Trong hình này:
218273
Mã có số thứ tự từ 3 đến 5 là chưa được tốt cho lắm (. . . )

Cũng là nói thêm với chủ bài đăng: File đưa lên nên giả lập & đừng "dấu diếm" chuyện gì trong nới!
 
Lần chỉnh sửa cuối:
Các 'Mã KH', 'Mã VT' theo mình không thể là các trang phụ được.
Mà là, với mình, chính là xương sống của 1 CSDL
Thường mình gọi chúng là các bảng (Table) & có thể nên nhét chung vô 1 trang tính & gọi tên là 'DMuc'
Trong 'DMuc' các bảng này cách nhau chí ít 1 cột trống để dễ bề làm ăn với chúng
& để xây dựng 1 CSDL ta phải mất nhiều công sức để xây dựng các bộ mã này thật khoa học
Mình lấy ví dụ: Muốn xây dựng bộ mã về vật tư trong kho của bạn đã, đang & sẽ có ta cần:
Đầu tiên là mã phân loại (để phân loại hàng), như
F: Văn phòng phẩm (. . .)
E: Thiết bị điện
X: Vật tư trong xây dựng
N: Nhiên liệu
. . . . .
Sau đó đến trạng thái của vậy tư nếu cần:
B: Bột
L lõng
K: Khí
M: kim loại màu
D: kim loại đen
T: Thủy tinh hay dễ vỡ
H: Hay hút ẩm,
. . . . .
Thêm kí tự thứ ba X để phân theo đặc thù vật tư riêng có của CQ bạn
Sau cùng là dẫy số để phân biết các vật tư cùng loại
Dẫy số này dài ngắn tùy qui mô kho của bạn, nh7ng thường thỏa mãn được cho chũng loại VT có nhiều nhất trong kho của bạn.

. . . . (chuyện này chung chung là vậy, cụ thể có thể khác) . . . .

Nói thêm bộ mã được tạo ra trong Excel nên có độ dài như nhau
Trong hình này:
View attachment 218273
Mã có số thứ tự từ 3 đến 5 là chưa được tốt cho lắm (. . . )

Cũng là nói thêm với chủ bài đăng: File đưa lên nên giả lập & đừng "dấu diếm" chuyện gì trong nới!
Cám ơn bác đã góp ý về mã. Mã có độ dài như nhau là mình biết mà góp ý với sếp chưa chịu, sếp đang muốn cho nhìn dễ hiểu và ngắn gọn. Với lại mình đang cần hoàn thiện gấp báo cáo nên vấn đề mã sẽ chuẩn lại sau. Mình có tìm một số bài về cách tạo mã trên diễn đàn nhưng mà thấy nói chung chung quá chưa hiểu.
Xin nói luôn là file mình đưa lên là y nguyên không giấu gì luôn đó, hiện tại là file chỉ có bấy nhiêu thôi chứ không có gì để dấu
Bài đã được tự động gộp:

Chỉ 1 sheet Data:
1 năm 365 ngày
1 ngày xuất 100 phiếu
1 phiếu xuất 10 mặt hàng
Tổng cộng 1 năm 365.000 dòng dữ liệu.
-------------------------------------------------
Có thể dùng VBA.
1 file sử dụng 1 năm.
1 năm chuyển cuối kỳ sang đầu kỳ 1 lần.
Thống kê từng tháng, 1 vài tháng, cả năm... có thể sử dụng chung 1 sheet.
-------------------------------------------------
Không kể các sheet phụ: Mã KH, Mã vật tư...
Tìm ra loại hợp lý là do mình.
Em cảm ơn thầy rất nhiều. Em sẽ làm sắp xếp làm lại file cả năm
 
(2) Mã có độ dài như nhau là mình biết mà góp ý với sếp chưa chịu, sếp đang muốn cho nhìn dễ hiểungắn gọn. Với lại mình đang cần hoàn thiện gấp báo cáo nên vấn đề mã sẽ chuẩn lại sau.
Mình có tìm một số bài về cách tạo mã trên diễn đàn nhưng mà thấy nói chung chung quá chưa hiểu.

(1) . . . . là file mình đưa lên là y nguyên không giấu gì luôn đó, hiện tại là file chỉ có bấy nhiêu thôi chứ không có gì để dấu
Nhưng có muốn thêm trang tính để lập danh sách duy nhất về mã HH có được đâu;

(2.1) Thế nào là ngắn gọn? Phải chăng theo hình ở #15 thì mã có STT là 3 là ngắn gọn so với các mã khác & d8u3 nghĩa.
Nhưng trong Excel có xài đến ký tự đại diện '?' & nếu bạn muốn lọc các mặt hàng mã số TT 3 trên thì các mã 4 & 5 sẽ theo luôn vô danh sách cho coi;
(Bạn đừng nói với tôi là cả đời sẽ không xài đến chuyện lọc này nọ nha!)
(2.2) Chuyện "muốn nhìn cho dễ hiểu" thì mã HH số TT là 3 chỉ cần thêm 1 dấu gạch dưới là thỏa mọi chuyện rồi; Kể cả chuyện sếp cũng không thể thắc mắc về nghiệp vụ của bạn
Mà nói thêm: Mã 1 danh sách là để máy nhận biết & phân biết giữa các dòng dữ liệu; Tuyệt đối mã không phải để cho bạn (hay càng không phải để sếp của bạn) nhìn ngó & rở rẩm vô chúng đâu.
Nếu cứ muốn xía vô các mã đó thì có ngày CSDL của bạn thành đống rác cho coi!

Rất vui nhận được phản hồi từ bạn!
 
Nhưng có muốn thêm trang tính để lập danh sách duy nhất về mã HH có được đâu;

(2.1) Thế nào là ngắn gọn? Phải chăng theo hình ở #15 thì mã có STT là 3 là ngắn gọn so với các mã khác & d8u3 nghĩa.
Nhưng trong Excel có xài đến ký tự đại diện '?' & nếu bạn muốn lọc các mặt hàng mã số TT 3 trên thì các mã 4 & 5 sẽ theo luôn vô danh sách cho coi;
(Bạn đừng nói với tôi là cả đời sẽ không xài đến chuyện lọc này nọ nha!)
(2.2) Chuyện "muốn nhìn cho dễ hiểu" thì mã HH số TT là 3 chỉ cần thêm 1 dấu gạch dưới là thỏa mọi chuyện rồi; Kể cả chuyện sếp cũng không thể thắc mắc về nghiệp vụ của bạn
Mà nói thêm: Mã 1 danh sách là để máy nhận biết & phân biết giữa các dòng dữ liệu; Tuyệt đối mã không phải để cho bạn (hay càng không phải để sếp của bạn) nhìn ngó & rở rẩm vô chúng đâu.
Nếu cứ muốn xía vô các mã đó thì có ngày CSDL của bạn thành đống rác cho coi!

Rất vui nhận được phản hồi từ bạn!
Cám ơn bác đã giải thích cho mình hiểu, mình sẽ tìm hiểu cách tạo mã để hoàn thiện mã hàng hơn
 
Thầy ơi có thể giúp dùm em code tạo pivot table không ạ. Sheet "TT theo ngay" sau khi lấy dữ liệu xong thì em muốn có hiện hàng tổng theo từng ngày ạ
Pivot thì bạn chờ người khác vậy. Trên GPE này rất nhiều người rành về chuyện này.
Thú thiệt là tôi chưa từng vọc qua cái Pivot Table.
 

File đính kèm

Web KT

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

Back
Top Bottom