Giúp mình chuyển nhập dữ liệu bằng macro!! (1 người xem)

Liên hệ QC

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

nhathanpy08_05

Thành viên mới
Tham gia
29/12/08
Bài viết
9
Được thích
1
Mình có 1 file excel Tổng_tiền.xls có 4 sheets (Tong_hop, P_Tổ chức, P_Tài chính, P_Kinh doanh).
- Trong sheets Tong_hop (các trường: MSNV, Họ tên, Mã PB, Tên phòng ban, Thu cước viễn thông, môi giới viễn thông, sản xuất khác, xây dựng cơ bản).
- Các sheet còn lại đều có chung 3 trường (MSNV, Họ Tên, mã phòng ban)
Ví dụ: Sheets P_Tochuc có các trường ( MSNV, Họ Tên, mã phòng ban, thu cước viễn thông, sản xuất khác) em muốn chuyển tiền thu cước viễn thông, sản xuất khác vào sheets tong_hop căn cứ theo MSNV.
- Các sheets còn lại cũng như vậy ...
File đính kèm
 

File đính kèm

Mình có 1 file excel Tổng_tiền.xls có 4 sheets (Tong_hop, P_Tổ chức, P_Tài chính, P_Kinh doanh).
- Trong sheets Tong_hop (các trường: MSNV, Họ tên, Mã PB, Tên phòng ban, Thu cước viễn thông, môi giới viễn thông, sản xuất khác, xây dựng cơ bản).
- Các sheet còn lại đều có chung 3 trường (MSNV, Họ Tên, mã phòng ban)
Ví dụ: Sheets P_Tochuc có các trường ( MSNV, Họ Tên, mã phòng ban, thu cước viễn thông, sản xuất khác) em muốn chuyển tiền thu cước viễn thông, sản xuất khác vào sheets tong_hop căn cứ theo MSNV.
- Các sheets còn lại cũng như vậy ...
File đính kèm
Nếu các sheet của bạn có cùng 1 cấu trúc thì việc tổng hợp rất dể. Bạn có đồng ý là thay đổi cấu trúc sao cho nó giống nhau hết không ? Nếu được thì ta tiếp tục nhé.
 
Upvote 0
Cùng cấu trúc là sao hả bạn? Nếu nó cùng cấu trúc thì làm cách nào để tổng hợp các dữ liệu từ các sheets đó qua sheets tong_hop! Bạn làm giúp mình với! Cảm ơn nhiều
 
Upvote 0
Cùng cấu trúc là sao hả bạn? Nếu nó cùng cấu trúc thì làm cách nào để tổng hợp các dữ liệu từ các sheets đó qua sheets tong_hop! Bạn làm giúp mình với! Cảm ơn nhiều
Trời ơi! +-+-+-+ +-+-+-+ +-+-+-+
Từ câu hỏi này khiến tôi hình dung ra tình hình dạy tin học ở nước ta...
Không biết nên khóc hay cười?
(Sorry! Tôi không có ý nói tác giả nhathanpy08_05 vì có lẽ bạn cũng chưa từng nghe thầy cô nào dạy)
--------------------
Cùng cấu trúc đại khái là các tiêu đề cột tại các sheet giống nhau hoàn toàn... Việc bố trí dử liệu tại các sheet cũng giống nhau (như file của bạn là không cùng cấu trúc)
Nếu được vậy ta có thể dùng PivotTable để tổng hợp ---> Đây là công cụ rất mạnh chuyên dùng vào việc này!

 
Upvote 0
Macro

Đồng ý như ý kiến của các bác
Nếu để nguyên như vậy thì đây là giải pháp của bạn
Thân
 

File đính kèm

Upvote 0
File dùng khi cấu trúc các bảng tính là như nhau

Bạn xem file đính kèm đã sửa cấu trúc file
thân
 

File đính kèm

Upvote 0
cảm ơn anh đã nhiệt tình gúp đỡ! Mình đưa các sheets vào một file tổng_tiền.xls cho dễ hỏi mà thôi. Thực ra công việc của mình cũng tương tự như vậy và danh sách nhân viên cũng của mình 500 người, và gồm nhiều phòng ban.
Mục đích: Mình chỉ có 1 file tổng_tiền.xls và có 1 sheet tong_hop ah, các sheet còn lại là các phòng ban đưa lên để nhập vào sheet tong_hop. Sheets tong_hop bao gồm các trường chứa các sheets khác như mẫu đính kèm.
Vidụ: Phòng tổ chức, hay phòng kinh doanh đưa lên một danh sách file tổ_chức.xls chứa sheets p_tochức (MSNV, họ tên,Mã phòng ban, thu cước viễn thông,sản xuất khác) Mình muốn đưa toàn bộ dữ liệu vào sheets tong_hop một lần mà không đọc từng người một căn cứ theo MSNV
như vậy có dùng module của anh viết được ko ?
Anh cho em thanh cho em nick chat đi! cảm ơn anh!
 
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn anh đã nhiệt tình gúp đỡ! Mình đưa các sheets vào một file tổng_tiền.xls cho dễ hỏi mà thôi. Thực ra công việc của mình cũng tương tự như vậy và danh sách nhân viên cũng của mình 500 người, và gồm nhiều phòng ban.
Mục đích: Mình chỉ có 1 file tổng_tiền.xls và có 1 sheet tong_hop ah, các sheet còn lại là các phòng ban đưa lên để nhập vào sheet tong_hop. Sheets tong_hop bao gồm các trường chứa các sheets khác như mẫu đính kèm.
Vidụ: Phòng tổ chức, hay phòng kinh doanh đưa lên một danh sách file tổ_chức.xls chứa sheets p_tochức (MSNV, họ tên,Mã phòng ban, thu cước viễn thông,sản xuất khác) Mình muốn đưa toàn bộ dữ liệu vào sheets tong_hop một lần mà không đọc từng người một căn cứ theo MSNV
Vậy như vậy có dùng module được ko anh!
Anh cho em thanh cho em nick chat đi! cảm ơn anh

Làm được nhưng hơi ....cực
Nick yahoo: bachdanggiang_2006@yahoo.com
Thân
 
Upvote 0
Sub TongHop()
On Error Resume Next
Dim Ws, WsT As Worksheet
Dim m, n, i, j As Integer
Set WsT = Worksheets("Tong_hop")
m = WsT.Range("B65000").End(xlUp).Row
For i = 2 To m
Ma = WsT.Range("C" & i)
If Ma = 1101 Then Set Ws = Worksheets("P_Tochuc")
If Ma = 1201 Then Set Ws = Worksheets("P_Taichinh")
If Ma = 1301 Then Set Ws = Worksheets("P_kinhdoanh")
n = Ws.Range("B65000").End(xlUp).Row
For j = 2 To n
If Ws.Range("A" & j) = WsT.Range("A" & i) Then
WsT.Range("E" & i) = Ws.Range("D" & j)
WsT.Range("F" & i) = Ws.Range("E" & j)
WsT.Range("G" & i) = Ws.Range("F" & j)
WsT.Range("H" & i) = Ws.Range("G" & j)
End If
Next
Next
End Sub
Mình bỏ
For i = 2 To m
Ma = WsT.Range("C" & i)
If Ma = 1101 Then Set Ws = Worksheets("P_Tochuc")
If Ma = 1201 Then Set Ws = Worksheets("P_Taichinh")
If Ma = 1301 Then Set Ws = Worksheets("P_kinhdoanh")
mà mình căn cứ theo MSNV được ko anh?
Giải thích ý nghĩa 3 đoạn code đây đi anh!
n = Ws.Range("B65000").End(xlUp).Row ?
For j = 2 To n ?
If Ws.Range("A" & j) = WsT.Range("A" & i) Then
WsT.Range("E" & i) = Ws.Range("D" & j) ?
 
Upvote 0
Nếu đơn thuần là gộp tất cả các sheet vào 1 sheet tổng hợp thì bạn tham khảo ở file đính kèm nhé.
Cái này nó sẽ copy bấc kỳ sheet nào ở file nào mà bạn muốn.
File này mình tổng hợp và "biến chế" từ các thành viên ở GPE và các trang Web khác.
 

File đính kèm

Upvote 0
Macro sau làm việc với bất kỳ 1 trật tư trường nào trong các trang tính

PHP:
Option Explicit
Sub THop()
 Dim Sh As Worksheet, Sht As Worksheet
 Dim Rng As Range, Clls As Range, sRng As Range
 Dim Cll0 As Range, TDe As Range, sTDE As Range
 Dim sName As String
 
 Sheets("Tong_hop").Select:                       Application.ScreenUpdating = False
 Set TDe = Range([e1], [iv1].End(xlToLeft))
 For Each Clls In Range([A2], [A2].End(xlDown))
   With Clls.Offset(, 2)
      sName = "P_" & Switch(.Value = 1101, "ToChuc", .Value = 1201, _
              "TaiChinh", .Value = 1301, "KinhDoanh")
   End With
   Set Sh = Sheets(sName)
   Set Rng = Sh.Range(Sh.[A1], Sh.[A1].End(xlDown))
   Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      For Each Cll0 In Sh.Range(Sh.[d1], Sh.[iv1].End(xlToLeft))
         Set sTDE = TDe.Find(Cll0.Value)
         If Not sTDE Is Nothing Then
            Cells(Clls.Row, sTDE.Column).Value = Sh.Cells(sRng.Row, Cll0.Column).Value
         End If
      Next Cll0
   End If
 Next Clls
End Sub

Chú í khi sử dụng: Các tên trường của trang tính khác phải trùng khờp với tên trường tại trang 'Tong_Hop'

Chúc vui!
 
Upvote 0
Anh SA_DQ ơi! anh làm ơn giải thích dùm mấy đoạn code đó từng tự đi! em mới đọc VBA nên thấy khó quá
Option Explicit
Sub THop
()
Dim Sh As Worksheet, Sht As
Worksheet
Dim Rng
As Range, Clls As Range, sRng As
Range
Dim Cll0
As Range, TDe As Range, sTDE As
Range
Dim sName
As
String

Sheets
("Tong_hop").Select: Application.ScreenUpdating =
False
Set TDe
= Range([e1], [iv1].End(xlToLeft
))
For
Each Clls In Range([A2], [A2].End(xlDown
))
With Clls.Offset(, 2
)
sName = "P_" & Switch(.Value = 1101, "ToChuc", .Value = 1201,
_
"TaiChinh", .Value = 1301, "KinhDoanh"
)
End With
Set Sh
= Sheets(sName
)
Set Rng = Sh.Range(Sh.[A1], Sh.[A1].End(xlDown
))
Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole
)
If
Not sRng Is Nothing Then
For Each Cll0 In Sh.Range(Sh.[d1], Sh.[iv1].End(xlToLeft
))
Set sTDE = TDe.Find(Cll0.Value
)
If
Not sTDE Is Nothing Then
Cells
(Clls.Row, sTDE.Column).Value = Sh.Cells(sRng.Row, Cll0.Column).
Value
End
If
Next Cll0
End
If
Next Clls
End Sub
 
Upvote 0
Anh ơi! làm ơn giải thích dùm mấy đoạn code đó đi! em mới đọc VBA nên thấy khó quá
PHP:
Option Explicit 
Sub THop() 
1 Dim Sh As Worksheet, Sht As Worksheet 
 Dim Rng As Range, Clls As Range, sRng As Range 
 Dim Cll0 As Range, TDe As Range, sTDE As Range 
 Dim sName As String 
  
2 Sheets("Tong_hop").Select:                       Application.ScreenUpdating = False 
 Set TDe = Range([e1], [iv1].End(xlToLeft)) 
4 For Each Clls In Range([A2], [A2].End(xlDown)) 
   With Clls.Offset(, 2) 
6      sName = "P_" & Switch(.Value = 1101, "ToChuc", .Value = 1201, _ 
              "TaiChinh", .Value = 1301, "KinhDoanh") 
   End With 
8   Set Sh = Sheets(sName) 
   Set Rng = Sh.Range(Sh.[A1], Sh.[A1].End(xlDown)) 
10   Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole) 
   If Not sRng Is Nothing Then 
12      For Each Cll0 In Sh.Range(Sh.[d1], Sh.[iv1].End(xlToLeft)) 
         Set sTDE = TDe.Find(Cll0.Value) 
14         If Not sTDE Is Nothing Then 
            Cells(Clls.Row, sTDE.Column).Value = Sh.Cells(sRng.Row, Cll0.Column).Value 
16         End If 
      Next Cll0 
18   End If 
 Next Clls 
End Sub
Từ dòng 1 cho đến trước dòng 2: Khai báo các biến cần dùng; (Trong đó khai dư biến Sht)

D2: Chọn trang tính TongHop làm chổ đứng; Phần sau: "Đừng có lay lắc cái màn hình"

D3: Gán vùng tiêu đề của trang TongHop vô 1 biến đã khai báo; (Chỉ những tiêu đề cần chép dữ liệu đến mà thôi.)

D4: Tạo vòng lặp For .. Next (cho đến dòng 19) để duyệt hết các records trong trang tính đã chọn;

D5 & D7: Dùng cú pháp With để nhẹ nợ khi nhập dòng lệnh;

D6: Dùng hàm Switch() có trong VBA để tương ứng gán tên các trang tính cần khảo sát vô biến sName đã khai báo một khi tại cột cách cột mã đang duyệt là 2 về phía phải

D8: Gán trang tính vô biến đối tượng Sh đã khai báo;

D9: Lấy vùng Mã nhân viên của từng trang tính gán vô biến Rng đã khai báo;

D10: Tìm trong vùng này mã nhân viên đang hiện hành trong 'TongHop'

D11 Nếu Tìm thấy (từ dòng 10 - & tất nhiên tìm thấy thì thực hiện các lệnh cho đến trước dòng 18;

D12 cho đến D17: Tạo vòng lặp duyệt toàn bộ các tiêu đề để xác định tọa độ tiêu đề chứa dữ liệu của trang tính đang khảo sát & tọa độ tương ứng của tiêu đề trong 'TongHop'; Cụ thể:

D13: Tìm tên tiêu đề của trang tính có dữ liệu trong vùng đã gán vô biến TDe

D14: Nếu tìm thấy; (Khi đó ta biết vị trí cột của trang tính chứa dữ liệu & vi trí cột của 'TongHop' mà dữ liệu của trang tính này cần chép đến)

D15 (Quả tim của chương trình): Chép dữ liệu theo các tọa độ đã mướt mồ hôi tìm kiếm;

Các dòng sau đó: Miễn bàn!

Chúc sớm thành công
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Hỏi về cách in 1 bài.

Xin phép chị HYen17 cho tôi được hỏi và nhờ chị hướng dẫn giúp: cách in cho 1 bài riêng biệt, ví dụ như bài chị vừa nêu ( #14) thì in như thế nào ?
Xin cám ơn.
 
Upvote 0
Xin phép cho tôi được hỏi và nhờ chị hướng dẫn giúp: cách in cho 1 bài riêng biệt, ví dụ như bài chị vừa nêu ( #14) thì in như thế nào ?
Xin cám ơn.

Bạn chờ & nhờ người khác đi vậy; Xung quanh mình chả có máy in nào để dẫn hướng cho bạn được cả;

Đừng gọi mình bằng chị, tệ quá!
 
Upvote 0
Web KT

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

Back
Top Bottom