Cần Giúp đỡ Tính Tổng Của 2 Worksheet

Liên hệ QC

ptaquan

Thành viên mới
Tham gia
25/6/07
Bài viết
4
Được thích
0
Em có 2 file excel em muốn làm 1 file excel thứ 3 với cột số lượng sẽ là tổng của mã hàng trong file 1 và 2 (file 1 va 2 có mã trùng) nếu mã không trùng thì thể hiện bình thuong
Chỉ nhập vaò file 1 va 2 file thứ 3 sẽ tự động cập nhật
*** file đính kèm chỉ mang tính test
 

File đính kèm

  • TEST1.xls
    13.5 KB · Đọc: 42
  • TEST2.xls
    13.5 KB · Đọc: 26
Bạn có thể xem file dinh kèm có thể không được hoàn hảo lắm rất mong được sự góp ý
 

File đính kèm

  • Test.rar
    14.1 KB · Đọc: 78
Xin tham gia chút:
- Cách của Dang Vinh phải mở cả 3 file - test, test1, test2 thì macro mới chạy, nếu không sẽ báo lỗi.
- Xây dựng macro tại file test: File này gồm 2 sheet s01, s02
+ Mở từng file bằng lệnh
Mã:
Workbooks.Open filename
Xác định vùng dữ liệu (Thông qua dòng cuối và cột cuối của A1) và copy lần lượt vào s02
Mã:
Range(..).copy destination range(..)
Đóng file
Mã:
Workbooks(..).Close
Sắp xếp theo cột mã
Mã:
Range(..).sort key1:=Columns(..)
Xác định vùng dữ liệu cần tổng hợp của s02 và đặt tên
Mã:
Sheets("S02").Range(..).Name="Dulieu"
Lấy mã sang s01 và tính tổng (Giả sử mã tại s02 là cột A)
Mã:
dim dong1,dong2,congthuc
dong1=2
dong2=2
Sheets("s01").Range("A1").Value=Sheets("s02").Range("A1").Value
Do While len(sheets("s02").cells(dong1,1).value)>0
  If Sheets("s02").Cells(dong1,1).value<>Sheets("s02").Cells(dong1-1,1).value then
  Sheets("s01").Cells(dong2,1).value=Sheets("s01").Cells(dong1,1).value
  congthuc="=SUMIF(dulieu,A" & dong2 & ")"
  Sheets("s01").Cells(dong2,1)
  Sheets("s01").Cells(dong2,2).Formula=congthuc
  dong2=dong2+1
  End If
dong1=dong1+1
Loop
(Có thể thêm phần đặt bẫy khi file đã được mở)
 
Lần chỉnh sửa cuối:
Tôi đã thử làm theo cách của Chibi nhưng macro báo lỗi. Chibi có thể post file giúp không.
Cảm ơn
 
Thử vận dụng cách của Chibi vào BT Test trên, có áp dụng thêm AF. Bạn chép code sao vào, tôi làm theo macro, nên vụng về.
Sub CopyData()
Dim hangcuoi As Integer

With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayAlerts = False

End With

Sheets("Sheet2").Select
Range("a1:B1000").ClearContents
'mo test1
'neu co the them kiem tra file co ton tai
Workbooks.Open Filename:="E:\TEST1.xls"
Windows("TEST1.xls").Activate
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.copy
'mo test total va dan
Windows("Test total.xls").Activate
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'dong test1
Windows("TEST1.xls").Activate
ActiveWindow.Close
'mo test2
Workbooks.Open Filename:="E:\TEST2.xls"
Windows("TEST2.xls").Activate
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.copy
Windows("Test total.xls").Activate
Sheets("Sheet2").Select
Range("A1").Select
'chon dong cuoi de dan
hangcuoi = Range(Selection, Selection.End(xlDown)).Rows.Count
Range("a" & hangcuoi + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'dong test2
Windows("TEST2.xls").Activate
ActiveWindow.Close
Sheets("Sheet2").Select
Range("A1").Select
hangcuoi = Range(Selection, Selection.End(xlDown)).Rows.Count
Sheets("Sheet2").Range("A1" & " :A" & hangcuoi).Name = "MAHANG"
Sheets("Sheet2").Range("B1" & " :B" & hangcuoi).Name = "SOLUONG"
'tao danh muc

Sheets("Sheet1").Select
'Cells(1, 1).Delete
Range("MAHANG").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"a1"), Unique:=True

'Lay soluong
Dim dongcuoi As Integer
Sheets("Sheet1").Select
Cells(1, 1).Select
dongcuoi = Range(Selection, Selection.End(xlDown)).Rows.Count
For i = 2 To dongcuoi
Cells(i, 2).Value = "=SUMIF(MAHANG,RC1,SOLUONG)"
Next i
'copy va dan gia tri
Range("A2:B" & dongcuoi).Select
Selection.copy
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

Sheets("Sheet2").Select
Range("a1:B1000").ClearContents
Sheets("Sheet1").Select
Range("B1").Value = "SOLUONG"
Range("B1").Select
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.DisplayAlerts = True
.Names("Extract").Delete
End With
End Sub
 
A, mình cũng có một vấn đề muốn hỏi...Cũng giống như bạn gì đó, ptaquan. Mình có 01 file nhưng trong đó có 03 sheets, sheet1 chứa dữ liệu Nhập, Sheet02 chứa dữ liệu Xuất. Mình muốn làm 01 sheet tổng chi tiết của 02 sheet trên, nghĩa là khi mình nhập vào sheet 01 và sheet 02 thì tự động sheet03 sẽ cập nhật vào...Và...tự động sắp xếp theo thứ tự ngày tháng...
 

File đính kèm

  • TONG HOP NXT.xls
    20 KB · Đọc: 31
Phatruhi đã viết:
A, mình cũng có một vấn đề muốn hỏi...Cũng giống như bạn gì đó, ptaquan. Mình có 01 file nhưng trong đó có 03 sheets, sheet1 chứa dữ liệu Nhập, Sheet02 chứa dữ liệu Xuất. Mình muốn làm 01 sheet tổng chi tiết của 02 sheet trên, nghĩa là khi mình nhập vào sheet 01 và sheet 02 thì tự động sheet03 sẽ cập nhật vào...Và...tự động sắp xếp theo thứ tự ngày tháng...

Bạn xem các file XNT theo hướng dẫn tại đây.
 
Thunghi Tôi dùng code của bạn để chạy chương trình thấy rất tốt. Tôi học được nhiều từ bài của bạn. Tôi thích nhất đoạn code sau:
With application
.calculate = xlcalculationManual
.screanUpdating = false
.DisplayAlert = false
End With
Nó làm người sử dụng không bị mỏi mắt khi nhìn file chạy. Cảm ơn bạn
 
ThuNghi đã viết:
Thử vận dụng cách của Chibi vào BT Test trên, có áp dụng thêm AF. Bạn chép code sao vào, tôi làm theo macro, nên vụng về.

Sao Bác ThuNghi cho sử dụng nhiều Select thế. Có giảm đi được không vậy??
VD như :
Mã:
Option Explicit
Sub CopyData()
Dim hangcuoi As Integer

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

    Sheets("Sheet2").Select
    Range("A1:B1000").ClearContents
    'mo test1
    'neu co the them kiem tra file co ton tai
    Workbooks.Open Filename:="E:\TEST1.xls"
    Windows("TEST1.xls").Activate
    Range(Cells(1, 1), Cells(Range("A65000").End(xlUp).Row, Range("IV1").End(xlToLeft).Column)).Copy
    'mo test total va dan
    Windows("Test total.xls").Activate
    Sheets("Sheet2").Select
    Range("A1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    'dong test1
    Windows("TEST1.xls").Activate
    ActiveWindow.Close
    'mo test2
    Workbooks.Open Filename:="E:\TEST2.xls"
    Windows("TEST2.xls").Activate
    Range(Cells(2, 1), Cells(Range("A65000").End(xlUp).Row, Range("IV2").End(xlToLeft).Column)).Select
    Windows("Test total.xls").Activate
    Sheets("Sheet2").Select
    Range("A" & Range("A65000").End(xlUp).Row + 1).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    'dong test2
    Windows("TEST2.xls").Activate
    ActiveWindow.Close
    Sheets("Sheet2").Select
    hangcuoi = Range("A65000").End(xlUp).Row
    Sheets("Sheet2").Range("A1:A" & hangcuoi).Name = "MAHANG"
    Sheets("Sheet2").Range("B1:B" & hangcuoi).Name = "SOLUONG"
    'tao danh muc
    Sheets("Sheet1").Select
    Range("MAHANG").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("a1"), Unique:=True
    'Lay soluong
    hangcuoi = Range("A65000").End(xlUp).Row
    For i = 2 To dongcuoi
        Cells(i, 2).Value = WorksheetFunction.SumIf(Range("MAHANG"), Cells(i, 2).Offset(0, 1).Value, Range("SOLUONG"))
    Next i
    
    Sheets("Sheet2").Range("a1:B1000").ClearContents
    Sheets("Sheet1").Range("B1").Value = "SOLUONG"
    Range("B1").Select
With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .DisplayAlerts = True
        .Names("Extract").Delete
End With
End Sub

Cảm ơn bác nhiều!
 
ThuNghi đã viết:
Thử vận dụng cách của Chibi vào BT Test trên, có áp dụng thêm AF. Bạn chép code sao vào, tôi làm theo macro, nên vụng về.
Cám ơn bạn nhiều lắm mình đã làm theo cách của bạn và chương trình chạy rất tốt . Mình còn vài điều muốn các bạn giúp đỡ nữa . Mình muốn khi ta mở file thì macro tự động chạy (mình phài vào tool--> macro ---> run thì mới chạy) ,nếu ta có thêm 1 cột TENHANG nữa thì ta phải chỉnh sửa như thế nào và danh sách mặt hàng có thể lên vài ngàn theo chương trình có sử dụng được không (hình như chỉ được 1000 mặt hàng)
+++ Mình mới bắt đầu với excel thôi nên có những câu hỏi hơi ngớ ngẩn có gì mong các bạn bỏ qua và giúp đỡ mình . THX nhiều}}}}} ;;;;;;;;;;;
--=--
 
Lần chỉnh sửa cuối:
Alt F11, vào VBA, Double click vào ThisWorkbook (cửa sổ bên trái, nếu chưa có thì Ctr R), vào cửa sổ bên phải chọn workbook (dước chữ general), bên phải hiện open, chép code sau vào, nghĩa là khi mở thì chạy code
Private Sub Workbook_Open()
Call copydata
End Sub
Còn thêm tên thì có nhiều cách, bạn nghiên cứu thử, if not, sẽ hướng dẫn
Gần cuối code có dòng (dòng 11 từ dưới lên)
Sheets("Sheet2").Select
Range("a1:B1000").ClearContents
tạm dùng Vlookup. Xong mới xóa dữ liệu sheet2
 
Bác tạo một Command Button, sau đó Click right mouse -> Code
Tại đó bác nhập : Call CopyData
Như vậy sau này mỗi lần muốn chạy chương trình, bác chỉ cần nhấn vào Button này.

bác không nên để nó tự động chạy, để tự động chạy , mình không kiểm soát được thì e rằng . . . không an tâm lắm.
 
Cám ơn các bạn rất nhiều.............................
--=--
 
Lần chỉnh sửa cuối:
Với bạn Phatruhi: Tôi làm file này bằng những công thức đơn giản (IF, INDEX, MATCH và CF...), bạn xem vừa ý ko nha! Cứ thử thêm vào vài dòng ở 2 sheet đầu đễ thấy kết quả trong sheet THXN... Tôi ko biết nếu dùng VBA thì sẽ như thế nào, nhưng nếu làm bằng công thức thì có mấy điểm bạn cần lưu ý:
1/- Dòng tổng cộng nên đưa lên trên cùng
2/- Tốt nhất bạn nên cho 2 sheet NK và XK vào chung thì sẽ dễ dàng cho việc tổng hợp hơn (tất nhiên vẫn có cách nhưng là tự mình làm khó mình)
3/- Bạn cũng có thể thêm mắm muối vào cho file thêm hấp dẩn, chẳng hạn thêm vào 1 ComboBox đễ chọn Tháng, Năm hoặc đễ chọn riêng Phiếu Nhập và Phiếu xuất... vân... vân... tùy theo sự sáng tạo và nhu cầu riêng
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
File này anhtuan1066 làm rất hay, nên sửa lại đôi chút thì sẽ OK
 
Ùh... tôi vừa xem diển đàn vừa vội làm nên còn nhiều thiếu sót lắm! Phải sửa lại nhiều thì mới hoàn hảo dc. Có điều bạn ThuNghi thử góp ý xem phải làm sao đễ giãm dung lượng file? Define Name mới tính tới 1000 cell mà dung lượng file đã lên tới hơn 3M (Khiếp). Tôi đã trộn 2 sheet lại với nhau đễ giảm số Name nhưng vẫn ko cải thiện dc tình hình
ANH TUẤN
 
anhtuan1066 đã viết:
Ùh... tôi vừa xem diển đàn vừa vội làm nên còn nhiều thiếu sót lắm! Phải sửa lại nhiều thì mới hoàn hảo dc. Có điều bạn ThuNghi thử góp ý xem phải làm sao đễ giãm dung lượng file? Define Name mới tính tới 1000 cell mà dung lượng file đã lên tới hơn 3M (Khiếp). Tôi đã trộn 2 sheet lại với nhau đễ giảm số Name nhưng vẫn ko cải thiện dc tình hình
ANH TUẤN

Giảm tải dung lượng File và tăng tốc độ tính toán bằng các cách:
1. Tối ưu hóa CSDL (như File trên là không hợp lý - chính bạn cũng công nhận vậy)
2. Tối ưu hóa công thức.
3. Tránh dùng công thức trực tiếp, nếu có tính toán thì tính toán xong sẽ copy dán giá trị lên ngay. (File bên bài "làm sao tăng tốc độ tính toán" của bạn là VD)
4. Nếu có thể thì nên dùng VBA (tùy khả năng từng người)

(làm excel chuyên nghiệp không nên để công thức "sống" bạn ạ"

Bạn tham khảo nhé.

Thân!
 
Tôi cũng biết vậy nhưng chưa nghĩ ra cách cho trường hợp cụ thể này... Vậy xin bạn tối ưu hóa dùm tôi file này nha! Tôi đã chỉnh sửa đôi chút nhưng vẫn chưa giãm dc dung lượng!
Cám ơn trước
ANH TUẤN
 
Lần chỉnh sửa cuối:
To: anhtuan1066
Mình đã làm lại file trên, name vẫn 1000 dòng, nhưng chỉ có 4 name thôi và dùng vlookup cho đơn giản. Do bạn đặt nhiều name quá mà không giới hạn bớt số dòng.
Công thức trong THNX mình chỉ làm 100 dòng, thích thì copy thêm.
Cột Số TT trong THNX không nên là công thức, vì cần sort theo ngày, số phiếu thì o OK.
Làm thêm cho bạn phatru... một sheet XNK, nếu bạn NK thì phần NK hiện và ngược lại (dùng VBA).
 

File đính kèm

  • TONG HOP NXT-3.rar
    47.9 KB · Đọc: 52
Workbooks.Open Filename:="E:\TEST1.xls"
Mình con mot van de muon hoi. co cach nao chi can copy 3 file vao chung 1 thu muc ko can phai chi dinh duong dan (theo cach nay thi copy vao cho khac ct ko chay)
 
Web KT
Back
Top Bottom