Chào mọi người, cho em hỏi làm thế nào để sử dụng đích tính tổng giờ làm thêm của các ngày ở sheet Data sau đó add dữ liệu vào ngày tương ứng vào sheet Report. Em cảm ơn!
P/s: Lần này chắc sử dụng Dic là hợp lý nhỉ hpkhuong!
Không hẵn xài tới Dic, ta có thể nạp vô Array để mần; Tuy không 'Hàn lâm' & tốc độ cho lắm;
Nhưng cũng giống như đa số dân VN đi làm bằng hôn đa, chứ chưa chịu đi các loại fương tiên khác huy hoàng hơn.
Không hẵn xài tới Dic, ta có thể nạp vô Array để mần; Tuy không 'Hàn lâm' & tốc độ cho lắm;
Nhưng cũng giống như đa số dân VN đi làm bằng hôn đa, chứ chưa chịu đi các loại fương tiên khác huy hoàng hơn.
Em muốn dùng Dic ngoài việc nó nhanh hơn còn bởi vì em muốn qua các ví dụ để hiểu hơn cách dùng Dic phục vụ cho cá nhân em cũng như nhiều bạn như em chưa hiểu. Anh code giúp em
Nhưng bài toán của mình khác vậy nhiều quá mà mình chưa biết cách dùng key, item như nào cho đúng, đã vậy cái key (hoặc item ngày) mình chưa phân biệt được nó loằng ngoằng phức tạp hơn). Mong bạn chỉ giúp!
Mình đã xem code ấy và còn xem cả ví dụ tham khảo đầu tiên ở bài
Nhưng bài toán của mình khác vậy nhiều quá mà mình chưa biết cách dùng key, item như nào cho đúng, đã vậy cái key (hoặc item ngày) mình chưa phân biệt được nó loằng ngoằng phức tạp hơn). Mong bạn chỉ giúp!
Dic người ta viết tắt cho từ Dictionary (từ điển), bạn cứ nghĩ đơn giản như sử dụng từ điển đó, trong đó
+ Key là từ (từ để tra)
+ Item là nội dung của từ đó (ứng với key của nó)
Tất nhiên Dictionary có nhiều Keys và các Items tương ứng (Keys không trùng nhau, như cuốn từ điển các từ không lặp lại)
Muốn tìm hiểu kỹ thì đọc riêng về nó, làm các ví dụ đơn giản trước ..., dần dần sẽ hiểu ngay (không nghĩ gì to tác quá)
Dic người ta viết tắt cho từ Dictionary (từ điển), bạn cứ nghĩ đơn giản như sử dụng từ điển đó, trong đó
+ Key là từ (từ để tra)
+ Item là nội dung của từ đó (ứng với key của nó)
Tất nhiên Dictionary có nhiều Keys và các Items tương ứng (Keys không trùng nhau, như cuốn từ điển các từ không lặp lại)
Muốn tìm hiểu kỹ thì đọc riêng về nó, làm các ví dụ đơn giản trước ..., dần dần sẽ hiểu ngay (không nghĩ gì to tác quá)
Hình bé quá, cố nhìn mới được
Bạn không nhất thiết phải làm thế
vì, trong lập trình (hay sử dụng thuật toán trong máy tính nói chung), khi xử lý 1 vấn đề (bài toán) người ta thường xét dữ liệu:
- có tính thống nhất không, đồng nhất không
- có tính lặp không, quy luật
- có các khả năng nào xảy ra không
trở lại bài của bạn về nhập "ngày" như cũ cũng có quy luật rồi cách 5 ô theo phương ngang , nên không cần thay đổi
bài của bạn cũng không cần dùng object dictionary làm chi cho mệt, vì Dictionary chỉ thích hợp nhất với các bài: có yếu tố trùng, duy nhất (hay tổng hợp theo 2 yếu tố này), cần lặp tìm kiếm kiểu tra cứu trong mạng.
bài hiện tại không cần phải xét các yếu tố đó, vì có tính đồng nhất quy luật, không có yếu tố trùng ...vv
để hiểu thêm về quy luật dữ liệu để áp dụng vào VBA, bạn xem công thức này cho D4 (sheet Report)
Hình bé quá, cố nhìn mới được
Bạn không nhất thiết phải làm thế
vì, trong lập trình (hay sử dụng thuật toán trong máy tính nói chung), khi xử lý 1 vấn đề (bài toán) người ta thường xét dữ liệu:
- có tính thống nhất không, đồng nhất không
- có tính lặp không, quy luật
- có các khả năng nào xảy ra không
trở lại bài của bạn về nhập "ngày" như cũ cũng có quy luật rồi cách 5 ô theo phương ngang , nên không cần thay đổi
bài của bạn cũng không cần dùng object dictionary làm chi cho mệt, vì Dictionary chỉ thích hợp nhất với các bài: có yếu tố trùng, duy nhất (hay tổng hợp theo 2 yếu tố này), cần lặp tìm kiếm kiểu tra cứu trong mạng.
bài hiện tại không cần phải xét các yếu tố đó, vì có tính đồng nhất quy luật, không có yếu tố trùng ...vv
để hiểu thêm về quy luật dữ liệu để áp dụng vào VBA, bạn xem công thức này cho D4 (sheet Report)
Option Explicit
Public Sub OVT()
Dim Arr() As Variant
Dim Rws As Long, J As Integer, x As Integer, i As Integer, Tmr As Double
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With Sheets("BCC")
Rws = .Range("B65536").End(xlUp).Row - 5
Arr() = .[B6].Resize(Rws, 162).Value
ReDim dArr(1 To Rws, 1 To 4)
ReDim sArr(1 To Rws, 1 To 100)
For J = 1 To UBound(Arr())
For i = 0 To 100 Step 5
For x = 2 To 20
dArr(J, 1) = Arr(J, 2)
dArr(J, 2) = "VN"
dArr(J, 3) = Arr(J, 1)
dArr(J, 4) = Arr(J, 4)
sArr(J, x) = Arr(J, 8 + i) + Arr(J, 9 + i) + Arr(J, 10 + i)
sArr(J, 1) = Arr(J, 1)
Next x
Next i
Next J
Sheets("OT & others").Range("B17").Resize(Rws, 4) = dArr
Sheets("TotalOVT").Range("a4").Resize(Rws, 20) = sArr
End With
End Sub
Chào mọi người, cho em hỏi làm thế nào để sử dụng đích tính tổng giờ làm thêm của các ngày ở sheet Data sau đó add dữ liệu vào ngày tương ứng vào sheet Report. Em cảm ơn!
......................
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, C As Long
With Sheets("Data")
sArr = .Range("B6", .Range("B6").End(xlDown)).Resize(, 161).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 34)
End With
For I = 1 To R
C = 3
dArr(I, 1) = sArr(I, 1): dArr(I, 2) = sArr(I, 2): dArr(I, 3) = sArr(I, 4)
For J = 8 To UBound(sArr, 2) Step 5
C = C + 1
dArr(I, C) = sArr(I, J) + sArr(I, J + 1) + sArr(I, J + 2)
Next J
Next I
Sheets("Report").Range("A4").Resize(R, C) = dArr
End Sub
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, C As Long
With Sheets("Data")
sArr = .Range("B6", .Range("B6").End(xlDown)).Resize(, 161).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 34)
End With
For I = 1 To R
C = 3
dArr(I, 1) = sArr(I, 1): dArr(I, 2) = sArr(I, 2): dArr(I, 3) = sArr(I, 4)
For J = 8 To UBound(sArr, 2) Step 5
C = C + 1
dArr(I, C) = sArr(I, J) + sArr(I, J + 1) + sArr(I, J + 2)
Next J
Next I
Sheets("Report").Range("A4").Resize(R, C) = dArr
End Sub