Hỏi về cách sử dụng dic tính tổng có điều kiện (1 người xem)

Liên hệ QC

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

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
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 :)!
 

File đính kèm

Lần chỉnh sửa cuối:
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.
 
Upvote 0
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 :)
 
Upvote 0
Vậy bạn tham khảo thử cái này:
PHP:
http://www.giaiphapexcel.com/forum/showthread.php?122868-L%E1%BB%8Dc-kh%C3%B4ng-tr%C3%B9ng-b%E1%BA%B1ng-DIC
 
Upvote 0
Vậy bạn tham khảo thử cái này:
PHP:
http://www.giaiphapexcel.com/forum/showthread.php?122868-L%E1%BB%8Dc-kh%C3%B4ng-tr%C3%B9ng-b%E1%BA%B1ng-DIC

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!
 
Upvote 0
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á)
 
Lần chỉnh sửa cuối:
Upvote 0
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á)

Nhờ bạn mà mình thấy vấn đề dễ chịu hơn chút. Như vậy chắc là ở cột ngày mình phải sửa như vậy mới dùng được đúng không?

Untitled.jpg

Có vẻ không hẳn cần phải như vậy nhưng sẽ làm cách nào đó phức tạp hơn một chút.
 
Upvote 0
Nhờ bạn mà mình thấy vấn đề dễ chịu hơn chút. Như vậy chắc là ở cột ngày mình phải sửa như vậy mới dùng được đúng không?

View attachment 172529

Có vẻ không hẳn cần phải như vậy nhưng sẽ làm cách nào đó phức tạp hơn một chút.
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)
PHP:
=SUM(OFFSET(Data!$H$6,,(COLUMN(A1)-1)*5+1,,3))
từ đó tìm ra quy luật để áp vào VBA
 
Upvote 0
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)
PHP:
=SUM(OFFSET(Data!$H$6,,(COLUMN(A1)-1)*5+1,,3))
từ đó tìm ra quy luật để áp vào VBA

Ừm, có lẽ mình đang ngộ Dic rồi //////
 
Upvote 0
Hình như có gì đó sai sai @@

PHP:
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
 
Lần chỉnh sửa cuối:
Upvote 0
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!
......................
Sub cho bài #1, Không cần Dic.
PHP:
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
 
Upvote 0
Sub cho bài #1, Không cần Dic.
PHP:
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

Cảm ơn anh Ba Tê. Anh toàn cho em những bài học đắt giá -\\/.
 
Upvote 0
Web KT

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

Back
Top Bottom