Cập nhật dữ liệu từ sheet phụ sang sheet tổng (2 người xem)

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

Gà Công Nghệ

Thành viên mới
Tham gia
11/8/15
Bài viết
824
Được thích
455
Nhờ Anh chị hỗ trợ giùm em cập nhật từ sheet phụ sang sheet tổng (Sheet phụ của 1 ngày nào đó mà có thêm hay chỉnh sửa gì thì sheet tổng sẽ cập nhật theo). Em xin cám ơn nhiều!
 

File đính kèm

Nhờ Anh chị hỗ trợ giùm em cập nhật từ sheet phụ sang sheet tổng (Sheet phụ của 1 ngày nào đó mà có thêm hay chỉnh sửa gì thì sheet tổng sẽ cập nhật theo). Em xin cám ơn nhi
Bạn kiểm tra xem!
Mã:
Option Explicit

Public Sub Tonghop()
Application.ScreenUpdating = False
Const MaxR As Long = 1000
Dim Dic As Object, Ws As Worksheet, tArr(), dArr(1 To MaxR, 1 To 6)
Dim I As Long, K As Long, R As Long, Rws As Long, Tmp As String, MyName As String, TT As String, TA As String
    Set Dic = CreateObject("Scripting.Dictionary")
    MyName = "TONG"
    TT = "TRANG_CHU"
    TA = "Sheet1"
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> MyName And Ws.Name <> TT And Ws.Name <> TA Then
        tArr = Ws.Range("B3", Ws.Range("B3").End(xlDown)).Resize(, 5).Value2
        R = UBound(tArr)
        For I = 1 To R
            Tmp = tArr(I, 1) & "#" & tArr(I, 2)
            If Not Dic.Exists(Tmp) Then
                K = K + 1
                Dic.Item(Tmp) = K
                dArr(K, 1) = K
                dArr(K, 2) = tArr(I, 1)
                dArr(K, 3) = tArr(I, 2)
                dArr(K, 4) = tArr(I, 3)
                dArr(K, 5) = tArr(I, 4)
                dArr(K, 6) = tArr(I, 5)
            Else
                Rws = Dic.Item(Tmp)
                dArr(Rws, 4) = dArr(Rws, 4) + tArr(I, 3)
            End If
        Next I
    End If
Next Ws
With Sheets(MyName)
    .Range("A3").Resize(MaxR, 6).ClearContents
    .Range("A3").Resize(K, 6) = dArr
    .Range("A3").Resize(K, 6).Borders.LineStyle = 1
End With
Set Dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Mã:
=DROP(REDUCE("";SEQUENCE(31);LAMBDA(a;b;IF(ISNA(SHEET(b));a;VSTACK(a;LET(x;TRIMRANGE(INDIRECT(b&"!B3:F1000"));FILTER(x;CHOOSECOLS(x;1)>0))))));1)
nếu có office 365 thì dùng công thức đơn giản
 

File đính kèm

Nếu Office 2024 hoặc 365 thì gõ công thức ô B3 trong sheet TONG :
=FILTER(VSTACK('5:31'!B3:F300),VSTACK('5:31'!B3:B300)<>"")
 
Nhờ Anh chị hỗ trợ giùm em cập nhật từ sheet phụ sang sheet tổng (Sheet phụ của 1 ngày nào đó mà có thêm hay chỉnh sửa gì thì sheet tổng sẽ cập nhật theo). Em xin cám ơn nhiều!
Bạn thử cách làm này : Nhập dữ liệu vào Form ===> lưu sang Data_LT. Khi muốn lấy xem lại hoặc in dữ liệu của ngày nào thì gọi về báo cáo để xem lại hoặc in
 

File đính kèm

Bạn thử cách làm này : Nhập dữ liệu vào Form ===> lưu sang Data_LT. Khi muốn lấy xem lại hoặc in dữ liệu của ngày nào thì gọi về báo cáo để xem lại hoặc in
Vâng, cám ơn bạn rất nhiều.
Bài đã được tự động gộp:

Bạn kiểm tra xem!
Mã:
Option Explicit

Public Sub Tonghop()
Application.ScreenUpdating = False
Const MaxR As Long = 1000
Dim Dic As Object, Ws As Worksheet, tArr(), dArr(1 To MaxR, 1 To 6)
Dim I As Long, K As Long, R As Long, Rws As Long, Tmp As String, MyName As String, TT As String, TA As String
    Set Dic = CreateObject("Scripting.Dictionary")
    MyName = "TONG"
    TT = "TRANG_CHU"
    TA = "Sheet1"
For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> MyName And Ws.Name <> TT And Ws.Name <> TA Then
        tArr = Ws.Range("B3", Ws.Range("B3").End(xlDown)).Resize(, 5).Value2
        R = UBound(tArr)
        For I = 1 To R
            Tmp = tArr(I, 1) & "#" & tArr(I, 2)
            If Not Dic.Exists(Tmp) Then
                K = K + 1
                Dic.Item(Tmp) = K
                dArr(K, 1) = K
                dArr(K, 2) = tArr(I, 1)
                dArr(K, 3) = tArr(I, 2)
                dArr(K, 4) = tArr(I, 3)
                dArr(K, 5) = tArr(I, 4)
                dArr(K, 6) = tArr(I, 5)
            Else
                Rws = Dic.Item(Tmp)
                dArr(Rws, 4) = dArr(Rws, 4) + tArr(I, 3)
            End If
        Next I
    End If
Next Ws
With Sheets(MyName)
    .Range("A3").Resize(MaxR, 6).ClearContents
    .Range("A3").Resize(K, 6) = dArr
    .Range("A3").Resize(K, 6).Borders.LineStyle = 1
End With
Set Dic = Nothing
End Sub
code này mình dán vô đâu để tự cập nhật bạn.
Bài đã được tự động gộp:

Mã:
=DROP(REDUCE("";SEQUENCE(31);LAMBDA(a;b;IF(ISNA(SHEET(b));a;VSTACK(a;LET(x;TRIMRANGE(INDIRECT(b&"!B3:F1000"));FILTER(x;CHOOSECOLS(x;1)>0))))));1)
nếu có office 365 thì dùng công thức đơn giản
file này mình mở lên thì báo lỗi #Name của cột ngày ở sheet TONG
 
Bạn thử cách làm này : Nhập dữ liệu vào Form ===> lưu sang Data_LT. Khi muốn lấy xem lại hoặc in dữ liệu của ngày nào thì gọi về báo cáo để xem lại hoặc in
Bạn cho mình hỏi thêm là ở sheet Data_LT mà lỡ bấm nút Xóa_Data thì có cách nào sao khi bấm nút xóa thì dữ liệu sẽ lưu vô 1 sheet khác không à.
 
Bạn cho mình hỏi thêm là ở sheet Data_LT mà lỡ bấm nút Xóa_Data thì có cách nào sao khi bấm nút xóa thì dữ liệu sẽ lưu vô 1 sheet khác không à.
Mình chưa thử - Có lẽ được; Nhưng minh làm nút Xoa_Data là nhằm để bạn xoá sạch để làm mẫu cho CSDL mới mà thôi
 
Bạn thêm đoạn này sau dòng: .Range("A3").Resize(K, 6).Borders.LineStyle = 1
Mã:
.Range("B3").Resize(K, 1).NumberFormat = "dd/mm/yyyy"
 

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

  • Dán lên cao
  • Question Question
Trả lời
6
Đọc
32K
Back
Top Bottom