[Nhờ mọi người giúp đỡ]Sử dụng VBA Tự động hiển thị mốc thời gian theo các dữ liệu nhập vào!

TomShaki

Yêu THVBA
Bạn cần đăng nhập để thấy hình ảnh

Em có một file như sau: Dữ liệu nhập vào là công thức nấu các món ăn, được chia làm nhiều công đoạn có thời gian bắt đầu và thời gian kết thúc.
Ví dụ: Food 1,công đoạn 1 thực hiện từ 16:00-16:15, công đoạn 2 từ 16:16-16:20,...
Em muốn làm chương trình : hiển thị thời gian làm của từng công đoạn ( công đoạn 1 là 15 phút,công đoạn 2 là 4 phút,..) vào cột E, đồng thời tô màu số ô tương ứng với quãng thời gian đó( 15 phút thì 15 ô được tô màu...) và hiển thị thời gian bắt đầu vào đầu mỗi dải ô.Em muốn nhờ mọi người xem và chỉ giúp 2 vấn đề:
1.Hiện tại e đã viết xong chương trình và hnay đã chạy được ở máy cty nhưng không hiểu sao h về nhà viết chạy không báo lỗi nhưng không ra kết quả.
2.Em muốn thời gian ở hàng thứ 4 được tự động hiển thị khi thay đổi thời gian nhập vào trong 2 cột C và D
Ví dụ : hiện tại cột C và D có 2 mốc thời gian là 16h và 17h thì ở hàng thứ 4 cũng có 2 mốc tgian 16h và 17h
Nếu thay đổi,thêm/bớt ở cột C,D là 12h,15h,24h,v..vv thì hàng thứ 4 cũng tự động cập nhật và hiển thị!

Mong mọi người giúp đỡ ạ!
(Em không biết đăng file đúng tiêu chuẩn chưa mong add duyệt bài giúp ạ!)
 

TomShaki

Yêu THVBA
Mã:
ublic Enum RP
    startCol = 3
    finishCol = 4
    timecol = 5
    hhRow = 4
    hhmmRow = 6
End Enum

Sub RecipeBook()

Application.ScreenUpdating = False

    Dim i As Long
    Dim j As Long
    Dim endRow As Long
    Dim endCol As Long
    Dim timestart As Date
    timestart = "16:00"
    
    With Sheet1
    
        .Range("G6") = timestart
        
        With .Cells(RP.hhRow, .Columns.Count).End(xlToLeft)
            endCol = .Column + .MergeArea.Columns.Count - 1
        End With
        
        With .Cells(Rows.Count, "A").End(xlUp)
            endRow = .Row + .MergeArea.Rows.Count - 1
        End With
        
        For j = 8 To endCol
        
            For i = 9 To endRow
            
                .Cells(RP.hhmmRow, j) = DateAdd("n", 1, .Cells(RP.hhmmRow, j - 1))
                
                Select Case ""
                    
                    Case .Cells(i, RP.startCol), .Cells(i, RP.finishCol)
                        
                        If .Cells(RP.hhmmRow, j - 1) >= .Cells(i, RP.startCol) And .Cells(RP.hhmmRow, j - 1) <= .Cells(i, RP.finishCol) Then
                        .Cells(i, RP.timecol) = DateDiff("n", .Cells(i, RP.startCol), .Cells(i, RP.finishCol))
                        .Cells(i, j - 1).Interior.ColorIndex = 37
                            If .Cells(RP.hhmmRow, j - 1) = .Cells(i, RP.startCol) Then
                            .Cells(i, j - 1) = .Cells(i, RP.startCol)
                            
                            End If
                        
                        End If
                        
                    Case .Cells(i, RP.startCol), .Cells(i, RP.finishCol)
                        
                        .Cells(i, RP.timecol) = ""
                
                End Select
                
            
             Next i
        
        Next j
    
    End With

Application.ScreenUpdating = True

End Sub
 

John Carter

Yêu THVBA
Mình k dùng VBA thì s nhỉ?
Mình sử dụng kiến thức ở đây:
- Conditional formatting để tô màu ô
- để tàng hình nội dung trong ô


Bạn cần đăng nhập để thấy hình ảnh


Về phần thời hiện mốc thời gian khi thay đổi tgian ở cột C, D thì bạn nên nêu rõ ra. Ví dụ chỉ thay đổi mốc tgian của 1 dòng nào đó hay là toàn bộ, rồi lỡ tồn tại 2 mốc tgian khác nhau ở cột C, D thì làm thế nào?
 
Sửa lần cuối:

TomShaki

Yêu THVBA
Mình k dùng VBA thì s nhỉ?
Mình sử dụng kiến thức ở đây:
- Conditional formatting để tô màu ô
- để tàng hình nội dung trong ô


Bạn cần đăng nhập để thấy hình ảnh


Về phần thời hiện mốc thời gian khi thay đổi tgian ở cột C, D thì bạn nên nêu rõ ra. Ví dụ chỉ thay đổi mốc tgian của 1 dòng nào đó hay là toàn bộ, rồi lỡ tồn tại 2 mốc tgian khác nhau ở cột C, D thì làm thế nào?
Cảm ơn bạn! Về dùng hàm và conditional format thì mình đã làm được rồi. Bây giờ yêu cầu là dùng VBA.
Về thời gian thì ý mình đúng là th khi có các mốc tgian khác nhau trong toàn bộ cột ấy ạ. Giả sử có 3 mốc 15,16,17 thì ở hàng thứ 4 cũng hiện ra theo thứ tự tăng dần 15,16,17,v.., có 5 mốc 12,13,14,15,16 thì hàng 4 sẽ hiện ra 12,13,14,15,16,v..v
Ngoài ra thì vì mỗi khung giờ có 59' nên ví dụ khung 16h sẽ gộp 59 ô với nhau,tuơng tự 17h...cũng vậy.
Mong mọi người chỉ dẫn!
 
Sửa lần cuối:
Top