Gà Công Nghệ
Thành viên mới
- Tham gia
- 11/8/15
- Bài viết
- 824
- Được thích
- 455
Bạn kiểm tra xem!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
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





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 inNhờ 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!
Vâng, cám ơn bạn rất 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
code này mình dán vô đâu để tự cập nhật bạn.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
file này mình mở lên thì báo lỗi #Name của cột ngày ở sheet TONGnếu có office 365 thì dùng công thức đơn giảnMã:=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)


file này mình mở lên thì báo lỗi #Name của cột ngày ở sheet TONG
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 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
Dán cái này vào trong ThisWorkbook:code này mình dán vô đâu để tự cập nhật bạn.
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "TONG"
Call Tonghop
End Select
End Sub
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ôiBạ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 à.
Vâng, khi nào bạn rảnh bạn thử làm giùm mình với.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
Dán cái này vào trong ThisWorkbook:
Mã:Option Explicit Private Sub Workbook_SheetActivate(ByVal Sh As Object) Select Case Sh.Name Case "TONG" Call Tonghop End Select End Sub
Vâng, bạn cho hỏi thêm sheet TONG từ ngày 5 đến ngày 12 thì định dạng là tháng ngày năm, từ ngày 13 trở đi là ngày tháng năm. Mình định dạng ngày tháng năm hết lại không được.Mình đã làm luôn cho bạn trong file nhé!
Vâng à, cám ơn bạn rất nhiều.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"