Liệt kê công việc trong ngày

  • Thread starter Thread starter tcs_qn
  • Ngày gửi Ngày gửi
Liên hệ QC

tcs_qn

Thành viên mới
Tham gia
5/10/22
Bài viết
24
Được thích
4
Các bác cho em hỏi có hàm excel nào mà liệt kê viết ra được tên các công việc trong 1 ngày đang thực hiện không. Em toàn phải nhìn bằng mắt liệt kê bằng tay hoa hết cả mắt. Em cảm ơn các bác nhiều!
 

File đính kèm

  • Tien do.png
    Tien do.png
    324.1 KB · Đọc: 69
Lần sau bạn nhớ đính kèm file nhé
Vì không biết địa chỉ cột và dòng nên mình làm mẫu, căn cứ vào file thực tế mà điều chỉnh theo nhé.
Dùng cột U (hoặc bất kỳ cột nào khác đang trống) làm cột phụ để liệt kê hạng mục theo từng hàng.
Điều kiện về hạng mục tại ô B14 cần ghi chính xác theo tên hạng mục để dễ tham chiếu.
 

File đính kèm

@bebo021999 : Chắc không phải như ý bạn @tcs_qn muốn.
Cùng 1 ngày sẽ có các công việc trong ngày đó. Như Nhật ký thi công.
Ví dụ: nhập ngày 15/9/2022 tại C14 / Enter thì không ra kết quả gì.
Bạn tcs_qn muốn dùng công thức hay code để ra kết quả?
 
@bebo021999 : Chắc không phải như ý bạn @tcs_qn muốn.
Cùng 1 ngày sẽ có các công việc trong ngày đó. Như Nhật ký thi công.
Ví dụ: nhập ngày 15/9/2022 tại C14 / Enter thì không ra kết quả gì.
Bạn tcs_qn muốn dùng công thức hay code để ra kết quả?
Bạn lưu ý là có điều kiện HẠNG MỤC nhé.
Ngày 15/9 HẠNG MỤC A không có gì, nhưng HẠNG MỤC B thì có nhé
 
Bạn lưu ý là có điều kiện HẠNG MỤC nhé.
Ngày 15/9 HẠNG MỤC A không có gì, nhưng HẠNG MỤC B thì có nhé
Thế thì cần kết hợp công việc của hạng mục. Để không bị trùng công việc. Em có file dùng code để lọc, tổng hợp ra những công việc trong cùng 1 ngày của tất cả hạng mục.
Nhưng không biết chủ topic muốn dùng code hay công thức.
 
Bạn lưu ý là có điều kiện HẠNG MỤC nhé.
Ngày 15/9 HẠNG MỤC A không có gì, nhưng HẠNG MỤC B thì có nhé
Em cảm ơn các bác trên diễn đàn đã quan tâm đến câu hỏi của em. Em xin lỗi bác lần sau em sẽ đính kèm file. Em đưa ví dụ trên chỉ là một phần thôi em làm trên công trường có nhiều hạng mục cùng thi công trong ngày. Em cần nhìn trong 1 ngày có các công tác nào làm và liệt kê tất cả. Cách của bác em copy thêm hạng mục A với công thức tương tự thì cũng ra kết quả là đúng ý của em rồi. Em cảm ơn bác nhiều!
Bài đã được tự động gộp:

Thế thì cần kết hợp công việc của hạng mục. Để không bị trùng công việc. Em có file dùng code để lọc, tổng hợp ra những công việc trong cùng 1 ngày của tất cả hạng mục.
Nhưng không biết chủ topic muốn dùng code hay công thức.
Em không biết viết code chỉ biết lấy của các bác về sử dụng thôi. Em tham lam một tí các bác cho em cả hai phương pháp để em tham khảo học hỏi thì tốt. Em cảm ơn bác nhiều!
 
Em không biết viết code chỉ biết lấy của các bác về sử dụng thôi. Em tham lam một tí các bác cho em cả hai phương pháp để em tham khảo học hỏi thì tốt. Em cảm ơn bác nhiều!
Chỉ biết sử dụng code tốt là tốt rồi. Tôi có biết tí gì về viết code đâu.
Chia sẻ với mọi người file dưới. Kiến thức cho đi sẽ là kiến thức giá trị và được phát triển.
Bạn tham khảo code trong Module và file dưới.
Public Sub hello2HamDuyet()
Dim r As Long, k As Long, dArr(1 To 65000, 1 To 4), arr
Dim startDate As Date, endDate As Date, ub As Long, h As Boolean
arr = Sheet1.Range("A19:K" & Sheet1.[A65000].End(xlUp).Row).Value
ub = UBound(arr)
startDate = Sheet5.[F5].Value
endDate = Sheet5.[F6].Value
With Sheet4
.Range("A16:D" & .UsedRange.SpecialCells(xlCellTypeLastCell).Row).ClearContents
k = 1
Do While WorksheetFunction.RoundDown(startDate, 0) <= _
WorksheetFunction.RoundDown(endDate, 0)
r = 1: h = False
dArr(k, 1) = k
dArr(k, 2) = startDate
dArr(k, 4) = " " 'Da xoa chu : Mua cong truong nghi
Do While arr(r, 1) <> arr(ub, 1)
If arr(r, 11) = startDate Then
dArr(k, 1) = k
dArr(k, 2) = startDate
dArr(k, 3) = arr(r, 2)
dArr(k, 4) = "Nghiêm thu công viêc " & arr(r, 3) ' Them chu : cong viec
k = k + 1: h = True
End If
If arr(r, 6) <= startDate And arr(r, 7) >= startDate Then
dArr(k, 1) = k


dArr(k, 2) = startDate


dArr(k, 3) = arr(r, 2)
dArr(k, 4) = "" & arr(r, 3) 'Bo chu : Thi cong
k = k + 1: h = True
End If
r = r + 1
Loop
startDate = startDate + 1
If Not h Then k = k + 1
Loop

Dim l, Tren, Duoi As Long
l = 1
For i = 1 To k - 1
Tren = dArr(i, 2)
Duoi = dArr(i + 1, 2)
If Tren <> "" Then Tam = Tren
If Tam = Duoi Then
dArr(i + 1, 2) = ""
End If
If dArr(i, 2) <> "" Then
dArr(i, 1) = l
l = l + 1
Else
dArr(i, 1) = ""
End If
Next i


.Range("A16:D16").Resize(k).Value = dArr
End With
End Sub

Hướng dẫn sử dụng:
+) Nhập đầy đủ dữ liệu ở sheet "01-Danh muc" (cột B, C, F, G, K). Không xóa sheet "05-TTDV".
+) Sang sheet "04-Nhat ky" kích vào Ông sao vàng năm cánh. Code sẽ tự xóa dữ liệu cũ (nếu có) từ dòng 16 và tổng hợp dữ liệu mới vào các cột B, C, D từ dòng 16. Cùng 1 ngày sẽ có đầy đủ tất cả các công việc của những hạng mục thi công.
+) Tùy biến điều chỉnh bằng code ở trên. Sau khi sửa code thì ghi đè hoặc chèn code mới rồi gán vào hình Ông sao vàng năm cánh.
 

File đính kèm

Lần chỉnh sửa cuối:
Code trên có 2 chỗ là
Mã:
:D16
thế là web tự chuyển thành mặt cười.
Quên mất không chèn Toggle BB Code.
;)
Tôi nhờ các thành viên cách bật tắt chế độ tự động chuyển thành các biểu tượng khi gõ chữ, ký tự trên web GPE.
 
Lần chỉnh sửa cuối:
Code trên có 2 chỗ là ' :D ' thế là web tự chuyển thành mặt cười.
Quên mất không chèn Toggle BB Code.
;)
Tôi nhờ các thành viên cách bật tắt chế độ tự động chuyển thành các biểu tượng khi gõ chữ, ký tự trên web GPE.
Code bác đưa vào trong mục mã code như hình phía dưới
1665196900766.png
cho nó gọn.
 
Code bác đưa vào trong mục mã code như hình phía dưới
View attachment 281854
cho nó gọn.

Chính xác. Code mà không đặt vào thẻ CODE thì không bị kiểm duyệt xóa bài là may rồi, lại còn tìm cách luồn lách.

Cái vụ này mình nói khá nhiều lần rồi. Ở các diễn đàn công nghệ, không đặt code vào thẻ CODE là mặc định bài bốc hơi.
 
Chính xác. Code mà không đặt vào thẻ CODE thì không bị kiểm duyệt xóa bài là may rồi, lại còn tìm cách luồn lách.

Cái vụ này mình nói khá nhiều lần rồi. Ở các diễn đàn công nghệ, không đặt code vào thẻ CODE là mặc định bài bốc hơi.
Tôi là thủ phạm lười đặt code trong thẻ nè. 10 bài tôi viết đại có đến 9 :p
 
Tôi là thủ phạm lười đặt code trong thẻ nè. 10 bài tôi viết đại có đến 9 :p

Các bài code đó của anh là dạng gõ nhanh, chủ yếu ở dạng gợi ý/ hướng dẫn. Chứ không phải chép code hoàn chỉnh. Hai cái đó khác nhau.

Nhưng bài code nào ở dạng đầy đủ mà anh để ở ngoài thẻ CODE em vẫn ủng hộ kiểm duyệt xóa. Hê hê.
 
Chỉ biết sử dụng code tốt là tốt rồi. Tôi có biết tí gì về viết code đâu.
Chia sẻ với mọi người file dưới. Kiến thức cho đi sẽ là kiến thức giá trị và được phát triển.
...
Được phát triển: hơi chủ quan nếu bạn chỉ quanh quẩn ở 1 diễn đàn. Kiến thức về lập trình có nhiều chiều hướng. Chỉ nhằm phát triển trong một nơi duy nhất thì nó bị thiếu tư duy đổi mới. Gọi là hiện tượng trùng máu.
Điển hình là bạn theo lối mòn đặt tên biến đếm dòng cho mảng đầu ra là k. Ở đây nhìn code quen, ai cũng nhận ra. Nhưng đem qua nơi khác, chưa chắc những người không quen biết với GPE đã nhận ra. Những nới không phải GPE ngwoif ta có lẽ dùng tên dễ đọc hơn như numRows, soDong,...

Code của bạn cũng đồng thời học một thói quen xấu là dùng ":" để nối nhiều dòng thành một dòng.
Ngày xưa, bộ nhớ kém. Máy Midi thời thượng cổ chỉ có khoảng 16K Words (32K Bytes) để chương trình chạy. Mỗi dòng của BASIC mất khoảng 12 Bytes gối đầu (đánh dấu dòng). BASIC ra cái ":" này để người ta gom dòng và tiết kiệm bộ nhớ.
Ngày nay, sử dụng nó chỉ làm code khó đọc hơn. Điển hình là BASIC theo luật "gán trị vào biến bên trái dấu =" cho nên khi xem code, muốn biết mọt biến được gán trị những điểm nào, người ta đọc lướt qua bên trái các dòng (cộng các chỗ Let/Set, IF-THEN). Gặp code có sử dụng ":" thì té ngữa.

Chú thêm:
Bạn cần tìm hiểu thêm về cá tính của các loại vòng lặp. Điển hình khi nào thì dùng For-Next và khi nào thì Do-Loop
 
.
Điển hình là bạn theo lối mòn đặt tên biến đếm dòng cho mảng đầu ra là k. Ở đây nhìn code quen, ai cũng nhận ra. Nhưng đem qua nơi khác, chưa chắc những người không quen biết với GPE đã nhận ra. Những nới không phải GPE ngwoif ta có lẽ dùng tên dễ đọc hơn như numRows, soDong,...

Code của bạn cũng đồng thời học một thói quen xấu là dùng ":" để nối nhiều dòng thành một dòng.
Ngày xưa, bộ nhớ kém. Máy Midi thời thượng cổ chỉ có khoảng 16K Words (32K Bytes) để chương trình chạy. Mỗi dòng của BASIC mất khoảng 12 Bytes gối đầu (đánh dấu dòng). BASIC ra cái ":" này để người ta gom dòng và tiết kiệm bộ nhớ.
Ngày nay, sử dụng nó chỉ làm code khó đọc hơn. Điển hình là BASIC theo luật "gán trị vào biến bên trái dấu =" cho nên khi xem code, muốn biết mọt biến được gán trị những điểm nào, người ta đọc lướt qua bên trái các dòng (cộng các chỗ Let/Set, IF-THEN). Gặp code có sử dụng ":" thì té ngữa.

Chú thêm:
Bạn cần tìm hiểu thêm về cá tính của các loại vòng lặp. Điển hình khi nào thì dùng For-Next và khi nào thì Do-Loop
Cám ơn bạn. Tôi đã nói "Tôi có biết tí gì về viết code đâu". Nên không hiểu về các câu lệnh hay gì trong code.
Chỉ sử dụng được, xuất ra được kết quả như yêu cầu của tôi là ok. Chưa đúng yêu cầu hay cần chỉnh sửa, phát triển để code thích ứng với tình hình mới thì tôi nhờ diễn đàn GPE sửa code. Đơn giản vậy thôi.
 
Em cảm ơn các bác nhiều nhờ các bác mà em cũng đã giải quyết được thắc mắc của mình rồi. Chén rượu quý một mình uống nó cũng phí hòa vào dòng sông kiến thức thì ai cũng được uống thì hết ý. Em chúc các bác có nhiều sức khỏe và chúc diễn đàn ngày càng phát triển.
 
Web KT

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

Back
Top Bottom