Tự động điền số liệu vào excel theo database

Em xin chào mọi người, em mới chuyển qua vba được hơn tuần mà được giao cái task liên quan đến vba, excel. Đang không biết làm thế nào mong mọi người giúp em với ạ.
Đại loại task thì như thế này ạ:
Em có một file excel có form như sau:

Em muốn làm thêm cái nút cập nhật dữ liệu, khi ấn vào nút này thì sẽ cập nhật dữ liệu từ trong database và tự động điền số lượng hàng vào trong file excel trên.
Em đã lấy được dữ liệu từ database nhưng bây giờ không biết so sánh vs những Mã Hàng và Thời Gian Giao Hàng đang được ghi trong file excel kiểu gì để có thể tự động điền số lượng hàng vào.

Mọi người có thể gợi ý hay có cách nào chỉ giúp em với được không ạ?
Em xin cảm ơn nhiều ạ!!

  • Nếu để giải quyết công việc thì dùng luôn các hàm của excel như vlookup.
  • Nếu để học thì bạn kiếm giáo trình học từ bước cơ bản nhất đi, lúc đó bạn sẽ biết cách để hỏi.

Hiện tại mình thấy câu hỏi của bạn không đủ thông tin để người khác hiểu được bạn cần làm gì. Hãy đặt mình vào vị trí của người được hỏi.
Mình có thể gợi ý như sau:

  • Tại sao lại điền số lượng hàng là số 3 như bạn khoanh ở hình?
  • Thời gian giao hàng như trên hình có số từ 2 tới 14 là thế nào?
  • Mã hàng có ý nghĩa gì?

Lập trình đơn giản là “hướng dẫn” cho máy tính hiểu nó cần làm gì. Bạn không xác định rõ input/output thì không lập trình được đâu.

6 Likes

Gợi ý cho e 2 keyword sau:

  1. Hàm Find :
    Hàm này có Input : Range (khu vực cần find), và từ khóa
    Output: Trả về Range mà nó tìm dc từ khóa trong đó, hoặc Nothing.
    →Tìm dc range thì sẽ xác định dc Row ( range.Row)

Dùng hàm này để tìm dc Range chứa mã Hàng, xác định dc Row
Và tìm Ngày → Xác định dc Column.

  1. Thủ thuật khoanh vùng Range để tìm: Dùng hàm Range.End(xlDown) hoặc xlUp / xlRight / xlLeft
    Hàm này là dùng để trỏ đến Cell cuối cùng có chứa dữ liệu trong dãy cell liên tiếp.
    Nó sẽ trỏ theo hướng từ trên xuống, từ duoiws lên, trái sang phải, hay phải sang trái tùy theo đối số.

-> Đã biết Address cell đầu, và dùng hàm này để location dc Address cell cuối.
→ Xác định dc vùng Range. Lấy vùng này đưa vào làm Input cho hàm Find ở trên
※:Hàm Find ở trên cần đầu vào là Range (khu vực tìm), để tìm cho nhanh và chính xác,
Nếu không thì nó sẽ tìm toàn bộ cả Sheet, rất lâu.

Cụ thể cách dùng và cú pháp, cũng như example ra sao thì e có thể search trên Microsoft.
P/s: Ngoài ra, lập trình trên VBA dễ hơn trên ngôn ngữ khác, nhờ có chức năng Record macro.
1 thao tác, tác vụ Excel nào mà mình ko biết mã code là gì, thì có thể record lại tác vụ đó, rồi vào xem mã code là biết.

5 Likes

Em xin lỗi nếu câu hỏi của em thông tin chưa rõ ràng cụ thể. Tại em cũng hơi mông lung.
Em xin được trình bày lại một chút. Cty em có một hệ thống nhận đặt hàng từ khách hàng. Các thông tin về đơn hàng của khách hàng như tên mã hàng, số lượng, thời gian giao hàng… sẽ được lưu vào trong database của công ty.
Công việc của em là làm 1 file excel để đổ dữ liệu trong database ra excel để cho một số bộ phận khác dễ theo dõi quản lý. Em muốn cái số lượng hàng sẽ được cập nhật và tự động điền theo dữ liệu trong database. Ví dụ như khách hàng thay đổi số lượng hàng thì dữ liệu sẽ được cập nhật vào database; sau đó khi em cập nhật trên file excel thì số lượng hàng này cũng sẽ được tự động điền lại vào trong bảng.
Số 3 là số lượng hàng phải giao trong thời gian tương ứng. Thời gian giao hàng 2 đến 14 là e lấy ví dụ ạ. Vì thực tế thì cái thời gian đấy có thể dài đến 2-3 tháng. Mã hàng là mã của hàng hóa khách hàng đặt hàng bên cty em.
Trong hình em mình họa thì ví dụ là mã hàng 20Y7001501(B07) vào ngày 2 có 2 hàng cần được giao;
Mã hàng 20Y7001072 thì ngày 3 sẽ có 5 hàng cần được giao…

Cảm ơn bạn đã kiên nhẫn trả lời các câu hỏi trên của mình.

Bạn cần trình bày cho mọi người biết database của bạn có định dạng gì? Có cấu trúc như thế nào? (Dạng text, csv, json hay kiểu nào đó khác?)

Bạn có thể trình bày bằng cách mô tả lại nếu bạn làm “thủ công” quá trình điền số liệu thì bạn làm như thế nào? Khi đó bạn mới có thể làm “tự động” được.

4 Likes

dạ em cảm ơn a đã trả lời em. Em xin được trình bày tiếp ạ.
Database của cty em là PostgreSql. Bình thường làm thủ công thì sẽ sử dụng một cái tool khác, cũng viết bằng vba trên excel để tìm thông tin đơn hàng từ database. Tool đấy có dạng như thế này:


Nhân viên nếu muốn xem thông tin của mã hàng nào thì nhập mã hàng và thời gian giao hàng vào thì sẽ lấy được các thông tin trên database về excel. Và nhập bằng tay vào bảng phía trên kia.
Cái tool này thì chỉ liệt kê theo list tất cả các mã hàng có liên quan theo điều kiện tìm kiếm ra.

Còn việc em muốn bây h là tự động điền số lượng theo mã hàng và ngày tháng giao kia.

Vậy mình thấy đơn giản mà nhỉ? Theo mình bạn có thể chưa cần tự động phần nhập ngày tháng. Chỉ cần làm phần tự động điền.
Bạn cần tìm cách thực hiện các bước sau với VBA:

  • Mở file excel khác và chọn active sheet. Từ khóa: VBA read other excel file
  • Viết vòng lặp qua các dòng để lấy dữ liệu. Từ khóa: VBA excel Loop until last row
  • Phân tách giá trị ở cột NGÀY ĐẶT ra thành kiểu cột của bạn ví dụ lúc đầu. Từ khóa: VBA extract string date to number hoặc VBA extract string to number
  • Đặt giá trị date với SỐ LƯỢNG vào ô tương ứng trên excel của bạn. Từ khóa: VBA how to write value to cell

Chúc bạn tự học thành công.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?