Copy và lưu dữ liệu tự động

Liên hệ QC

baihocdt

Thành viên hoạt động
Tham gia
1/2/11
Bài viết
106
Được thích
11
Chào các bạn,
Do mình mỗi ngày đều phải copy và lưu dữ liệu giữa các sheet rất nhiều lần.
Mình muốn có 1 nút nhấn có thể giúp mình tự động copy và lưu dữ liệu để hỗ trợ mình trong công việc.
Các bạn xem file đính kèm và hỗ trợ giúp mình nhé.
Mình có viết mô tả yêu cầu cụ thể trong file.

Cảm ơn các bạn.
 

File đính kèm

Các bạn cho mình hỏi có cách nào để xác định dòng bắt đầu lưu dữ liệu tiếp theo là dòng thứ 21 (như trong ví dụ của file excel đính kèm) không ạ?
 
Upvote 0
Bạn chép macro này vô module & cho chạy:
PHP:
Sub ChepDuLieuHoaDon()
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim Rws As Long
With Sheets("Luu So")
1 ' Tìm Dòng Cuôi Cua "Hóa Don Bán Le":             '
    Set Rng = .Range(.[A1], .[A65500].End(xlUp))
    Set sRng = Rng.Find("HOA DON BAN SI", , xlFormulas, xlWhole)
    If sRng Is Nothing Then
        MsgBox "Nothing"
    Else
        Rws = 1 + sRng.End(xlUp).Row
        MsgBox "Dòng Cân Chép: " & Rws
2 ' Chép Du Liêu:        '
        Set Rng = Sheets("NHAP LIEU BAN LE").[b2].CurrentRegion.Offset(1, 1)
        If Rng = Nothing Then Exit Sub
        Rng.Copy Destination:=.Cells(Rws, "B")
        MsgBox "Chép Xong!", , "GPE.COM Xin Chào!"
    End If
3 ' Ghi Thú Tu Ngày?         '
End With
End Sub
Chúc vui cả ngày!
 
Upvote 0
Chào các bạn,
Do mình mỗi ngày đều phải copy và lưu dữ liệu giữa các sheet rất nhiều lần.
Mình muốn có 1 nút nhấn có thể giúp mình tự động copy và lưu dữ liệu để hỗ trợ mình trong công việc.
Các bạn cho mình hỏi có cách nào để xác định dòng bắt đầu lưu dữ liệu tiếp theo là dòng thứ 21 (như trong ví dụ của file excel đính kèm) không ạ?
Cảm ơn các bạn.
Góp ý cho bạn: Cái ý tưởng lưu nguyên cái hóa đơn sĩ và lẽ theo vùng định trước là phá sản rồi đó. Theo tôi thì bạn phải theo dõi thế này:
1/ Nên theo dõi nhập hàng và bán hàng riêng mỗi thứ 1 sheet. Có như vậy thì mới tính được hàng bán và hàng tồn.
2/ Lưu riêng mỗi cái hóa đơn xuống trong 1 sheet thì thật là dễ dàng. Nhưng, tôi khuyên Sử dụng 1 sheet làm mẫu hóa đơn với 2 nút:
- 1 nút lưu theo dõi nhập hàng.
- 1 nút lưu theo dõi bán hàng.
3/ Lưu hóa đơn thì chỉ nên lưu phần dữ liệu cần tổng hợp và lưu liên tục để việc tổng hợp được dễ dàng (dùng PivotTable chỉ 1 nốt nhạc), bạn lưu nguyên cái hóa đơn thì việc tổng hợp như thế nào bạn có nghĩ đến không? Việc lưu lẫn lộn thì càng khó khăn bội phần.
4/ Nên có 1 sheet danh mục hàng hóa với chủng loại và đơn giá để dùng nó áp giá tự động cho đỡ tốn công gõ từng loại hàng.
5/ Đây là mẫu về hình thức 1 hóa đơn bạn có thể xem để tham khảo và hình dung ra cái cần làm.

A_HD.JPG
 
Lần chỉnh sửa cuối:
Upvote 0
Theo góp ý của be09 tôi cấu trúc lại sheet luu so : chuyển hàng --> cột...
Tạo 3 nút để lưu vào 3 vùng khác nhau...
Nếu bạn đồng ý, ta tiếp tục bàn tiếp ...
 

File đính kèm

Upvote 0
Về thiết kế CSDL của chủ bài đăng mình xin có vài ý kiến thế này, từ bé xíu trở đi:

1./ Tên trang tính 'NHAP LIEU BAN LE' là quá lê thê;
a) 'LIEU' là dư thừa, nên bò đi
b) 'NHAP' dư các từ ở fía sau,; Rốt cuộc tên trang tính chỉ nên là 'N_BanLe'

2./Cũng tại trang này, ta thấy 4 các cột (trường) đầu có dữ liệu giống nhau í xì; chứng tỏ đó là 1 CSDL chưa tốt.
Nếu là mình thì tách ra làm 2 bảng (Table)
1 bảng chĩ gồm các cột đầu trùng nhau nói trên;
1 bảng gồm các cột còn lại;
Trong mỗi bảng này ta cần thêm 1 cột tạo mối quan hê giửa bảng này với bảng kia
Mỗi quan hê này được tạo ra từ [Ngày tháng] & [Số HĐ]
Sau khi tạo ra 2 table như vậy, ở Table 1 ta chỉ còn 1 dòng dữ liệu ứng với từng hóa đơn.
Ở Table 2 ta chỉ cần 4 cột ; Số hàng (dòng) nhiều ít là do hàng hóa ghi trong hóa đơn.

[Tất nhiên xử xí CSDL như vậy chỉ có thể là VBA]
Tất cả những liên quan đến vấn đề nêu ở mục (2) trên các bạn có thể xem tại: https://www.giaiphapexcel.com/diendan/threads/tạo-csdl-quan-hệ-trên-excel-fần-2-bài-1-csdl-để-quản-lý-nhập-xuất-tờ-tiền.130610/

Chúc các bạn ngày cuối tuần vui vẻ & hạnh phúc.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn tất cả góp ý của các bạn, mình xin ghi nhận và học hỏi.
Do mới chập chửng làm học VBA nên còn nhiều bở ngỡ, mong các bạn hỗ trợ giúp đỡ.
 
Upvote 0
Theo góp ý của be09 tôi cấu trúc lại sheet luu so : chuyển hàng --> cột...
Tạo 3 nút để lưu vào 3 vùng khác nhau...
Nếu bạn đồng ý, ta tiếp tục bàn tiếp ...

OK bạn, được vậy thì còn gì bằng.
Với đoạn code của bạn mình đã xác định được dòng cần chép dữ liệu (dòng tiếp theo ở vị trí cuối cùng).
Tuy nhiên còn có 1 vấn đề nữa là có nhiều lúc xuất hóa đơn không kịp, mình phải chừa ra một số dòng để lúc nào rãnh sẽ xuất sau.
Vì vậy sẽ có trường hợp mình lưu sổ các hóa đơn không phải ở vị trí tiếp theo phía cuối mà là chèn vào ở 1 vị trí nào đó ở khoảng giữa.
Bạn xem file đính kèm hỗ trợ mình giúp.
Cảm ơn bạn.
 

File đính kèm

Upvote 0
Tuy nhiên còn có 1 vấn đề nữa là có nhiều lúc xuất hóa đơn không kịp, mình phải chừa ra một số dòng để lúc nào rãnh sẽ xuất sau.
Vì vậy sẽ có trường hợp mình lưu sổ các hóa đơn không phải ở vị trí tiếp theo phía cuối mà là chèn vào ở 1 vị trí nào đó ở khoảng giữa . . . . .
Làm thế này thì CSDL của bạn đến lúc nào đó trở thành nồi fá lấu cho bợm nhậu thôi!
Ví dụ hóa đơn sắp nhập chỉ cần 5 dòng trống, nhưng bạn chừa ra trước thừa hay thiếu so với 5 dòng này thì sao đây?
Thừa dòng trống thì hậu quả chút ít về sau; Nhưng thiếu thì dữ liệu cũ sẽ bị chép đè.

Tóm lại những ai muốn tiếp tục giúp bạn theo iêu cầu của bạn là đang hại bạn đó!
 
Lần chỉnh sửa cuối:
Upvote 0
OK bạn, được vậy thì còn gì bằng.
Với đoạn code của bạn mình đã xác định được dòng cần chép dữ liệu (dòng tiếp theo ở vị trí cuối cùng).
Tuy nhiên còn có 1 vấn đề nữa là có nhiều lúc xuất hóa đơn không kịp, mình phải chừa ra một số dòng để lúc nào rãnh sẽ xuất sau.
Vì vậy sẽ có trường hợp mình lưu sổ các hóa đơn không phải ở vị trí tiếp theo phía cuối mà là chèn vào ở 1 vị trí nào đó ở khoảng giữa.
Bạn xem file đính kèm hỗ trợ mình giúp.
Cảm ơn bạn.
Tôi đã góp ý (tại bài 4) sao không thiết kế theo.
Làm cách trên thì tìm, chọn, áp giá mỗi người mua hàng chỉ tốn khoảng chưa đầy 1 phút và chỉ việc in và lưu hóa đơn, việc xuất hóa đơn là phải xuất ngay cho khách hàng (chứ đâu có cái vụ xuất sau).

A_AG.JPG
 
Upvote 0
Làm thế này thì CSDL của bạn đến lúc nào đó trở thành nồi fá lấu cho bợm nhậu thôi!
Ví dụ hóa đơn sắp nhập chỉ cần 5 dòng trống, nhưng bạn chừa ra trước thừa hay thiếu so với 5 dòng này thì sao đây?
Thừa dòng trống thì hậu quả chút ít về sau; Nhưng thiếu thì dữ liệu cũ sẽ bị chép đè.

Tóm lại những ai muốn tiếp tục giúp bạn theo iêu cầu của bạn là đang hại bạn đó!
Tôi đã góp ý (tại bài 4) sao không thiết kế theo.
Làm cách trên thì tìm, chọn, áp giá mỗi người mua hàng chỉ tốn khoảng chưa đầy 1 phút và chỉ việc in và lưu hóa đơn, việc xuất hóa đơn là phải xuất ngay cho khách hàng (chứ đâu có cái vụ xuất sau).

View attachment 201662
Cảm ơn bạn, mình sẽ suy nghĩ thêm. Tuy nhiên cái mình đang làm là làm tiếp theo cái file cũ của Sếp đã dùng bấy lâu nay, Sếp quen với việc tính toán trên file đó rồi nên không muốn thay đổi. Khổ thế đấy bạn ạ.
Bài đã được tự động gộp:

Làm thế này thì CSDL của bạn đến lúc nào đó trở thành nồi fá lấu cho bợm nhậu thôi!
Ví dụ hóa đơn sắp nhập chỉ cần 5 dòng trống, nhưng bạn chừa ra trước thừa hay thiếu so với 5 dòng này thì sao đây?
Thừa dòng trống thì hậu quả chút ít về sau; Nhưng thiếu thì dữ liệu cũ sẽ bị chép đè.

Tóm lại những ai muốn tiếp tục giúp bạn theo iêu cầu của bạn là đang hại bạn đó!


Đó cũng là vấn đề mình đang lo lắng. Tuy nhiên hiện tại bây giờ trước khi copy dữ liệu vào mình có thể xác định được các thông tin sau:
- Số lượng dòng cần copy của hóa đơn trong sheet N_BanLe
- Vị trí của dòng sẽ lưu dữ liệu trong sheet LUU_SO
Vấn đề bây giờ có cách nào để đếm được số dòng trống từ dòng bắt đầu lưu đến dòng có dữ liệu cũ kế tiếp. Sau đó mình sẽ insert thêm số lượng dòng trống cần thiết trước khi dán vào thì mình nghĩ sẽ không bị dán đè lên làm mất dữ liệu cũ bạn à.

Cho mình hỏi một chút, sáng giờ mình hì hục viết được 1 đoạn code trong VBA để thực hiện các công việc trên, không hiểu sao sau khi đóng file , rồi mở ra lại thì cái module mình tạo ra không còn nữa, các đoạn code cũng mất sạch. Không hiểu bị sao nữa, các bạn chỉ mình giúp.
Cảm ơn các bạn.
 
Upvote 0
Cảm ơn bạn, mình sẽ suy nghĩ thêm. Tuy nhiên cái mình đang làm là làm tiếp theo cái file cũ của Sếp đã dùng bấy lâu nay, Sếp quen với việc tính toán trên file đó rồi nên không muốn thay đổi. Khổ thế đấy bạn ạ.
Bài đã được tự động gộp:




Đó cũng là vấn đề mình đang lo lắng. Tuy nhiên hiện tại bây giờ trước khi copy dữ liệu vào mình có thể xác định được các thông tin sau:
- Số lượng dòng cần copy của hóa đơn trong sheet N_BanLe
- Vị trí của dòng sẽ lưu dữ liệu trong sheet LUU_SO
Vấn đề bây giờ có cách nào để đếm được số dòng trống từ dòng bắt đầu lưu đến dòng có dữ liệu cũ kế tiếp. Sau đó mình sẽ insert thêm số lượng dòng trống cần thiết trước khi dán vào thì mình nghĩ sẽ không bị dán đè lên làm mất dữ liệu cũ bạn à.

Cho mình hỏi một chút, sáng giờ mình hì hục viết được 1 đoạn code trong VBA để thực hiện các công việc trên, không hiểu sao sau khi đóng file , rồi mở ra lại thì cái module mình tạo ra không còn nữa, các đoạn code cũng mất sạch. Không hiểu bị sao nữa, các bạn chỉ mình giúp.
Cảm ơn các bạn.
Để tạo một macro từ excel, bạn cần phải Save As file excel thành tập tin với phần mở rộng có định dạng .xlsm,.xlsb... Mới được bạn nhe
 
Upvote 0
Đó cũng là vấn đề mình đang lo lắng. Tuy nhiên hiện tại bây giờ trước khi copy dữ liệu vào mình có thể xác định được các thông tin sau:
- Số lượng dòng cần copy của hóa đơn trong sheet N_BanLe
- Vị trí của dòng sẽ lưu dữ liệu trong sheet LUU_SO
Vấn đề bây giờ (2) có cách nào để đếm được số dòng trống từ dòng bắt đầu lưu đến dòng có dữ liệu cũ kế tiếp.
(1) Sau đó mình sẽ insert thêm số lượng dòng trống cần thiết trước khi dán vào thì mình nghĩ sẽ không bị dán đè lên làm mất dữ liệu cũ bạn à.
(1) Bạn có 3 khoản gồm nhiều dòng trống để điền tiếp dữ liệu; Đó là
Hóa đơn nhập hàng - Hóa đơn bán lẽ - Hóa đơn bán sỉ
Giờ bạn cho mỗi khoản ngàn dòng trống;
Sau khi thêm dữ liệu mỗi lần thì dò (bỡi macro hay bằng tay tùy thích) thì ẩn các dòng trống, chưa có dữ liệu í đi
Chuyện này làm bỡi macro cũng được.

(2) Cách thì có, nhưng chỉ cho bạn là hại bạn thêm mà thôi!

(3) Bảo với sếp của bạn đăng nhập GPE.COM đi; & ngoái lỗ nhĩ ra để nghe Excel nói gì!
 
Upvote 0
Để tạo một macro từ excel, bạn cần phải Save As file excel thành tập tin với phần mở rộng có định dạng .xlsm,.xlsb... Mới được bạn nhe

Cảm ơn bạn, mình thử được rồi. Chúc bạn buổi chiều vui vẻ!
Bài đã được tự động gộp:

(1) Bạn có 3 khoản gồm nhiều dòng trống để điền tiếp dữ liệu; Đó là
Hóa đơn nhập hàng - Hóa đơn bán lẽ - Hóa đơn bán sỉ
Giờ bạn cho mỗi khoản ngàn dòng trống;
Sau khi thêm dữ liệu mỗi lần thì dò (bỡi macro hay bằng tay tùy thích) thì ẩn các dòng trống, chưa có dữ liệu í đi
Chuyện này làm bỡi macro cũng được.

(2) Cách thì có, nhưng chỉ cho bạn là hại bạn thêm mà thôi!

(3) Bảo với sếp của bạn đăng nhập GPE.COM đi; & ngoái lỗ nhĩ ra để nghe Excel nói gì!

Cảm ơn góp ý của bạn. Mình đang cần thêm các dòng trống ở giữa các dòng đã luu thông tin hóa đơn bạn à nên không thể thêm ngàn dòng vào đấy được (chỉ bổ sung thêm 1 vài hóa đơn chừa ra xuất sau thôi) . Nãy mình nghĩ ra ý là tại sao không copy rồi insert copy, như vậy sẽ không phải lo bị đè lên các dòng cũ. Để mình thử xem sao. Dù sao cũng cảm ơn bạn nhé. Chúc bạn buổi chiều vui!
 
Lần chỉnh sửa cuối:
Upvote 0
Tóm lại các vấn đề là vầy:
Bạn cần copy các dòng trong 1 hóa đơn vô vùng đích cần thiết.; Số dòng cần chép đến có thể xác định được
Có vài fương án thực thi chuyện chép của bạn:

1 (Mình gọi là) Chép mói; Có nghĩa vùng để chép đến chưa lần nào bị chép & đây là lần chép đầu tiên.
Chuyện này muốn thực hiện chỉ cần xác định vị trí của cụm từ "Hoa Don Ban Le" (HDBL) là xong ngay.

2 (Gọi tạm là) Chép nối: Có nghĩa là chép tiếp theo dòng dữ liệu đã chép từ trước
Ở đây có vài khuynh hướng sẩy ra:
A./ Chép nối đơn thuần, có nghĩa là vùng fía dưới chưa có dữ liệu đã chép trước
Giải quyết chuyện này cũng dễ: Sau khi ta xác định ô chứa cụm từ HDBL, ta xài fương thức End(xlDown) để xác định dòng cuối chứa dữ liệu đã chép lần trước & cứ thế mà chép vô dòng kế tiếp thôi;
B./ Chép nối khi fía dưới vùng cần chép tới đã có chép dữ liệu
Ở đây ta cần thực hiện thêm vài bước sau khi đã thực hiện các bước ở (A) nêu trên:
(*) Số dòng dữ liệu sẽ chép đến
(*) Số dòng trống còn đủ trống để chép hay không?
Hai thông số này cũng có thể xác định được; Tuy nhiên mình sẽ không cặn kẽ cho bạn vì hành vi này là hại bạn;

3. Chép đứt đoạn (có nghĩa là chừa trước vài dòng trống & chép xong thì giữa vùng vừa chép & vùng dữ liệu đã chép có vài dòng trống)
Như vậy ta cần xác định thêm số dòng trống sẽ chừa là bao nhiêu.

Đọc đến đây bạn hình dung ra í tưởng bậy bạ của bạn & sếp của bạn chưa vậy?
Mình xin nói lần cuối: Mọi chuyện nêu trên đếu có thể làm được; Nhưng ai giúp bạn làm chuyện này là hại bạn mà thôi!
 
Upvote 0
Cảm ơn bạn, mình sẽ suy nghĩ thêm. Tuy nhiên cái mình đang làm là làm tiếp theo cái file cũ của Sếp đã dùng bấy lâu nay, Sếp quen với việc tính toán trên file đó rồi nên không muốn thay đổi. Khổ thế đấy bạn ạ.
....................................
Cảm ơn các bạn.
Góp ý thêm cho bạn thế này:
1/ Do sếp bạn sử dụng Excel có hạn chế, nên chỉ làm đến đó hoặc sếp không biết về lập trình nên không biết Excel có thể làm được nhiều thứ (hơn hẳn cái của sếp gấp vài chục lần).
2/ Với góp ý nêu trên thì sử dụng PivotTable để tổng hợp chỉ trong 1 vài phút, còn sử dụng VBA thì chỉ nhấn nút là xong. Vậy, bạn làm theo cái của sếp hay theo cái của các thành viên để được hưởng lợi.
3/ Bạn nên mạnh dạn cải tiến (như tôi đã góp ý), sau khi thử nghiệm thành công, thấy nó hiệu quả và nhanh gọn, dễ tổng hợp thì cho sếp xem thử để đánh giá. Còn sếp bạn có tính bảo thủ thì không nên, vì có khi sẽ mang họa vào thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các bạn đã có những góp ý rất chân thành. Để mình bàn với S xem sao nhé. Dù sao cũng cảm ơn mọi người rất nhiều. Chúc mọi người một ngày làm việc vui vẻ và hiệu quả.
 
Upvote 0
Cảm ơn các bạn đã có những góp ý rất chân thành. Để mình bàn với S xem sao nhé. Dù sao cũng cảm ơn mọi người rất nhiều. Chúc mọi người một ngày làm việc vui vẻ và hiệu quả.
Ông bà xưa thường nói, trăm nghe không bằng 1 thấy, trăm thấy không bằng 1 làm.
Vì vậy bạn không cần bàn gì cả, mà cứ làm như tôi đã góp ý khi hoàn tất, kiểm tra lại thấy chắc ăn, nhanh gọn, hiệu quả rồi hãy báo cáo.
 
Upvote 0
Web KT

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

Back
Top Bottom