tổng hợp dữ liệu từ nhiều sheet vào một sheet (2 người xem)

Liên hệ QC

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

vudoanttg

Thành viên mới
Tham gia
30/10/09
Bài viết
13
Được thích
1
Nghề nghiệp
văn phòng
Tôi muốn tạo một sheet tổng hợp từ nhiều sheet khác nhau để so sánh. làm thế nào để lấy được số tiền từ các tài khoản giống nhau từ tháng8 và tháng9 vào sheet tổng hợp (she et tổng hợp sẽ có tất cả các loại tài khoản có phát sinh số tiền của các sheet tháng)trong khi có những tài khoản phát sinh ở tháng8 nhưng không phát sinh ở tháng9 và ngược lại (ví dụ đính kèm). nhờ các bạn giưp đỡ
 

File đính kèm

Sheet tổng hợp của bạn thiếu TK so với sheet ở tháng 8,mình làm như vậy không biết có đúng ý bạn không.?
 

File đính kèm

Tôi muốn tạo một sheet tổng hợp từ nhiều sheet khác nhau để so sánh. làm thế nào để lấy được số tiền từ các tài khoản giống nhau từ tháng8 và tháng9 vào sheet tổng hợp (she et tổng hợp sẽ có tất cả các loại tài khoản có phát sinh số tiền của các sheet tháng)trong khi có những tài khoản phát sinh ở tháng8 nhưng không phát sinh ở tháng9 và ngược lại (ví dụ đính kèm). nhờ các bạn giưp đỡ
Mình không phải kế toán suy đoán làm đại thử
 

File đính kèm

Tôi muốn tạo một sheet tổng hợp từ nhiều sheet khác nhau để so sánh. làm thế nào để lấy được số tiền từ các tài khoản giống nhau từ tháng8 và tháng9 vào sheet tổng hợp (she et tổng hợp sẽ có tất cả các loại tài khoản có phát sinh số tiền của các sheet tháng)trong khi có những tài khoản phát sinh ở tháng8 nhưng không phát sinh ở tháng9 và ngược lại (ví dụ đính kèm). nhờ các bạn giưp đỡ
dùng sumif kết hợp indirect là ok
PHP:
=SUMIF(INDIRECT(--RIGHT(B$2,2)&"!$A1:$A500"),$A3,INDIRECT(--RIGHT(B$2,2)&"!$b1:$b500"))
xem thêm file
 

File đính kèm

cám ơn bạn ý của mình đúng là như vậy. Nhưng bạn có thể giúp mình hoàn thiện hơn chút nữa nhé. Cụ thể là: nếu tháng 10 mà số hiệu tài khoản lại nhiều hơn tháng 8 thì mình lại phải thay đổi shet tổng hợp sang tháng 10 sao? có cách nào để số liệu update tự động được không(khả năng từ nay đến cuối năm sẽ phát sinh thêm nhiều số hiệu tài khoản mới) bạn ạ?
 
Sheet tổng hợp của bạn thiếu TK so với sheet ở tháng 8,mình làm như vậy không biết có đúng ý bạn không.?
cám ơn bạn ý của mình đúng là như vậy. Nhưng bạn có thể giúp mình hoàn thiện hơn chút nữa nhé. Cụ thể là: nếu tháng 10 mà số hiệu tài khoản lại nhiều hơn tháng 8 thì mình lại phải thay đổi shet tổng hợp sang tháng 10 sao? có cách nào để số liệu update tự động được không(khả năng từ nay đến cuối năm sẽ phát sinh thêm nhiều số hiệu tài khoản mới) bạn ạ?
 
cám ơn bạn ý của mình đúng là như vậy. Nhưng bạn có thể giúp mình hoàn thiện hơn chút nữa nhé. Cụ thể là: nếu tháng 10 mà số hiệu tài khoản lại nhiều hơn tháng 8 thì mình lại phải thay đổi shet tổng hợp sang tháng 10 sao? có cách nào để số liệu update tự động được không(khả năng từ nay đến cuối năm sẽ phát sinh thêm nhiều số hiệu tài khoản mới) bạn ạ?
bạn thử dùng code của gpe tôi chế thêm xem sao
PHP:
Sub add_acount()
  Dim Dic, ws As Worksheet, iRow As Long, i As Long, Arr(), TmpArr, Tmp
  On Error Resume Next
  Application.ScreenUpdating = False
  Sheet1.Range("a3:f5000").ClearContents
  Set Dic = CreateObject("Scripting.Dictionary")
  For Each ws In Worksheets
    If ws.Name <> Sheet1 Then
      TmpArr = ws.Range(ws.[a2], ws.[a5000].End(xlUp)).Value
      For iRow = 1 To UBound(TmpArr, 1)
        Tmp = TmpArr(iRow, 1)
        If Not IsEmpty(Tmp) Then
          If Not Dic.Exists(Tmp) Then
          Dic.Add Tmp, ""
          i = i + 1
          ReDim Preserve Arr(1 To 1, 1 To i)
          Arr(1, i) = TmpArr(iRow, 1)
       '.................................
          End If
        End If
      Next
    End If
  Next
  With Sheet1
  .Range("a3").Resize(i, 1) = WorksheetFunction.Transpose(Arr)
  .Range("B3").FormulaR1C1 = _
        "=SUMIF(INDIRECT(--RIGHT(R2C,2)&""!$A1:$A5000""),RC1,INDIRECT(--RIGHT(R2C,2)&""!$b1:$b5000""))"
    .Range("B3").AutoFill Destination:=Range("B3:F3"), Type:=xlFillDefault
    .Range("B3:F3").AutoFill Destination:=Range("B3:f" & [a5000].End(xlUp).Row)
    .Range("B3:f" & [a5000].End(xlUp).Row).Value = Range("B3:f" & [a5000].End(xlUp).Row).Value
     
      End With
    Application.ScreenUpdating = True
 End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bài này dùng VBA thôi
Tham gia với Duy Thương cho dzui
Mã:
Private Sub Worksheet_Activate()
    Dim d, Ws, I, K, kK, kKk, Thang, Mg(), Vung
    Set Thang = [A2:F2]
    ReDim Mg(1 To 1000, 1 To Sheets.Count)
    Set d = CreateObject("scripting.dictionary")
        For Each Ws In Worksheets
            If Ws.Name <> "TongHop" Then
                Vung = Ws.Range(Ws.[a2], Ws.[a10000].End(xlUp)).Resize(, 2).Value
                K = Application.WorksheetFunction.Match(Ws.Name, Thang, 0)
                    For I = 1 To UBound(Vung)
                        If Not d.exists(Vung(I, 1)) Then
                            kK = kK + 1
                            d.Add Vung(I, 1), kK
                            Mg(kK, 1) = Vung(I, 1)
                            Mg(kK, K) = Vung(I, 2)
                        Else
                            kKk = d.Item(Vung(I, 1))
                            Mg(kKk, K) = Vung(I, 2)
                        End If
                    Next I
            End If
        Next
    [A3:F10000].ClearContents
    [A3].Resize(kK, Sheets.Count) = Mg
End Sub
Bạn cứ thên dữ liệu ở các tháng, cho shett TongHop xem kết quả
Thân
 

File đính kèm

Tại sao các bạn không sử dụng phương thức Find nhỉ ? thuật giải nằm ngay trong câu hỏi:
Dùng vòng lặp for each để quét Sheet, lập tiếp vòng lặp for each để tìm tên TK trong các sheet. Nếu tìm thấy thì lập tiếp vòng lặp for each để tìm tên cột tháng.... Nếu cột tháng... giống tên Sheet thì lấy dữ liệu của sheet đó về sheet Tong Hop... về tốc độ thì tôi chưa thử nhưng code ngắn gọn, dễ hiểu vì viết theo kiểu mực hệt (mô tả hành động).
 
Lần chỉnh sửa cuối:
Tại sao các bạn không sử dụng phương thức Find nhỉ ? thuật giải nằm ngay trong câu hỏi:
Dùng vòng lặp for each để quét Sheet, lập tiếp vòng lặp for each để tìm tên TK trong các sheet. Nếu tìm thấy thì lập tiếp vòng lặp for each để tìm tên cột tháng.... Nếu cột tháng... giống tên Sheet thì lấy dữ liệu của sheet đó về sheet Tong Hop... về tốc độ thì tôi chưa thử nhưng code ngắn gọn, dễ hiểu vì viết theo kiểu mực hệt (mô tả hành động).
phương thức find em chưa nghiên cứu . bác có thể đưa code bác viết lên em nghiên cứu được không ?
về tốc độ thì dữ liệu nhiều cỡ 65000 rows mỗi sheet thì em nghĩ dictionary sẽ nhanh hơn
 
phương thức find em chưa nghiên cứu . bác có thể đưa code bác viết lên em nghiên cứu được không ?
Về Find method, có thể tham khảo tại đây:
http://www.giaiphapexcel.com/forum/...p-về-phương-thức-tìm-kiếm-FIND-(-Find-Method)

về tốc độ thì dữ liệu nhiều cỡ 65000 rows mỗi sheet thì em nghĩ dictionary sẽ nhanh hơn
Điều này là đương nhiên! Mọi code thực hiện tính toán trên Array đều cho tốc độ nhanh hơn trên Range (Find hoạt động trên Range)
 
Cám ơn các anh, chị đã nhiệt tình giúp đỡ. Tôi mới bắt đầu tìm hiểu về code nên chưa biết gì đang ngồi dịch ù hết cả tai mà chưa được.
 
phương thức find em chưa nghiên cứu . bác có thể đưa code bác viết lên em nghiên cứu được không ?
về tốc độ thì dữ liệu nhiều cỡ 65000 rows mỗi sheet thì em nghĩ dictionary sẽ nhanh hơn

Mã:
Sub TongHop()
    Application.ScreenUpdating = False
    On Error Resume Next
    Sheets("Tong Hop").Range("c5:z" & [b65536].End(3).Row).ClearContents
    For Each sh In Worksheets
        If sh.Name <> "Tong Hop" Then
            For Each Tk In Sheets("Tong Hop").Range("b4:b" & [b65536].End(3).Row)
                TkTim = Sheets(sh.Name).Cells.Find(Tk, LookAt:=xlWhole, MatchCase:=True).Address
                If TkTim > 0 Then
                    For Each Thang In Sheets("Tong Hop").Range("c3:" & [iv3].End(1).Address)
                        If Thang = sh.Name Then
                            Tk(1, Thang.Column - 1) = Sheets(sh.Name).Range(TkTim)(1, 2)
                        End If
                    Next
                End If
                TkTim = 0
            Next
        End If
    Next
End Sub

Bạn muốn thêm tháng nào thì chèn thêm cột (khỏi phải định dạng bảng), Nhập tháng giống với tên Sheet và mở lại Sheet Tong Hop
 

File đính kèm

Nếu mình muốn làm 12 tháng cho năm 2012 thì mình phải làm thế nào đây/ dốt quá mong cac A/C hướng dẫn cụ thể và từ từ, đừng chửi là dốt nhé. Cám ơn nhiều ạ.
 
Mọi người cho em hỏi đối với file tổng hợp này của em thì code sẽ như thế nào. Code của anh Lê Duy Thương em chưa áp dụng được triệt để, mới chỉ dừng ở mức lấy ID từ các sheet sao cho sheet tổng hợp ID đó là duy nhất, còn lại để áp giờ công của từng ngày vào sheet tổng hợp thì em chưa làm được.
 

File đính kèm

Mọi người cho em hỏi đối với file tổng hợp này của em thì code sẽ như thế nào. Code của anh Lê Duy Thương em chưa áp dụng được triệt để, mới chỉ dừng ở mức lấy ID từ các sheet sao cho sheet tổng hợp ID đó là duy nhất, còn lại để áp giờ công của từng ngày vào sheet tổng hợp thì em chưa làm được.
thì thử dùng cái này xem sao
lâu lắm mới vào GPE
code cho sheet tông hop
PHP:
Private Sub Worksheet_Activate()
Dim Arr(), Ws As Worksheet, i As Long
  For Each Ws In Worksheets
    If Ws.Name <> "Tong hop" Then
      i = i + 1
      ReDim Preserve Arr(1 To i)
      Arr(i) = "'" & Ws.Name & "'!" & Range("A2:C200").Address(, , 2)
    End If
  Next
     Sheets("Tong hop").Cells.Clear
     Sheets("Tong hop").Range("A3").Consolidate Arr, xlSum, True, True, False
     Sheets("Tong hop").Range("A3") = "ID"
     Sheets("Tong hop").Range("A3").CurrentRegion.Borders.LineStyle = 1
End Sub
 

File đính kèm

Mình cũng đang gặp phải trường hợp gần giống như này, nhưng có 1 chút khác biệt nhỏ.
Mình đã chú thích cụ thể trong file đính kèm, rất mong các bạn giúp đỡ.
 

File đính kèm

Các dữ liệu này được nhập vào theo ngày hoặc tuần, số lượng ko cố định.
-Có thể phát sinh dữ liệu Name mới so với dữ liệu Name ở sheet TongHop.
-Sau khi ấn UPDATE, các dữ liệu này sẽ được điền tự động sang sheet TongHop.
-Mỗi lần update, các dữ liệu được điền nối tiếp vào các ô còn trống từ trái sang phải.
-Nếu phát sinh dữ liệu Name mới, sẽ tự động thêm dòng dữ liệu mới cho Name này.

Không thể hiểu bạn muốn gì & như thế nào luôn!
!$@!! !$@!! !$@!!
 
Không thể hiểu bạn muốn gì & như thế nào luôn!
!$@!! !$@!! !$@!!
ý mình là mỗi khi ấn nút update, dữ liệu Rev-Date bên sheet "rev" sẽ được điền vào các cột Rev-Date bên sheet TongHop với Name tương ứng.
nếu bên sheet "rev" có Name mới mà bên sheet TongHop chưa có, ch.trình sẽ tự động thêm 1 dòng mới xuống dưới cùng và điền dữ liệu cho Name mới này cùng format với các dòng trên.
 
Mỗi khi ấn nút update, dữ liệu Rev-Date bên sheet "rev" sẽ được điền vào các cột Rev-Date bên sheet TongHop với Name tương ứng.
nếu bên sheet "rev" có Name mới mà bên sheet TongHop chưa có, ch.trình sẽ tự động thêm 1 dòng mới xuống dưới cùng và điền dữ liệu cho Name mới này cùng format với các dòng trên.

Ý này bạn đã mô tả rồi;
Không hiểu là ở chỗ, ví dụ mã A001-B1, sao lại sang bên trang 'TH' lại có dòng dữ liệu 3; nhất là các ô từ [e3:j3]

& mã A002-G3 ở trang này bổng dưng xuất hiện số liệu là từ đâu?

Nên viết cho người khác hiểu, chứ không fải viết những gì mình hiểu.
 
Web KT

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

Back
Top Bottom