Bạn xem có đúng không
Thực ra mình cũng rất muốn bỏ trộn ô để đơn giản hơn. Tuy nhiên mình vẫn chưa biết cách nào để bỏ trộn ô mà vẫn thể hiện được hết nội dung trong bảng tiến độ này.CSDL của bạn đẹp thiệt đấy; Nhưng chỉ để ngắm thôi!
Chứ VBA hay công thức cũng thua luôn!
Nếu bạn chịu bỏ trộn ô thì sẽ có người ra tay hỗ trợ bạn ngay.
Bạn nghĩ sao?
Ồ. Em chưa đọc kỹ đề. Thành thật xin lỗi bác. Em gửi lại bác xem lại xem. Khi nào file tiến độ xong bác chia sẻ cho em tham khảo với nha.
Thực ra mình cũng rất muốn bỏ trộn ô để đơn giản hơn. Tuy nhiên mình vẫn chưa biết cách nào để bỏ trộn ô mà vẫn thể hiện được hết nội dung trong bảng tiến độ này.
Đây là bản gốc,
. . . . Những ô màu đỏ là những vị trí mình muốn đưa vào sự kiện Worksheet_Change
Với file như vậy ta hoàn toàn có thể bỏ trộn & bỏ các dòng trống đi là được 1 CSDL hoàn chỉnh.
Vẫn tinh tươm & tiện trong di tu, bảo dưỡng nó.
Nếu ko bỏ dòng trống thì còn hướng nào khác ko bạn?
Public Sub GPE()
Dim I As Long, Rws As Long, nMax As Long, nMin As Long
Rws = Range("I65536").End(xlUp).Row
nMin = 10 ^ 5: nMax = 0
For I = Rws To 11 Step -1
If Range("C" & I) <> Empty Then
If Range("H" & I).Value < nMin Then nMin = Range("H" & I).Value
If Range("I" & I).Value > nMax Then nMax = Range("I" & I).Value
Else
If Range("D" & I) <> Empty Then
Range("H" & I).Value = nMin
Range("I" & I).Value = nMax
Range("G" & I).Value = Range("I" & I).Value - Range("H" & I).Value + 1
nMax = 0: nMin = 10 ^ 5
End If
End If
Next I
End Sub
Tôi chỉ viết 1 Sub, khi cần thì bấm nút. Kết quả gán thẳng vào vị trí, không qua công thức được không?
Bạn muốn đưa vào sự kiện nào thì tuỳ, tôi thấy rất bất tiện khi mỗi lần động chạm vào sheet nó bị "cà giựt".
PHP:Public Sub GPE() Dim I As Long, Rws As Long, nMax As Long, nMin As Long Rws = Range("I65536").End(xlUp).Row nMin = 10 ^ 5: nMax = 0 For I = Rws To 11 Step -1 If Range("C" & I) <> Empty Then If Range("H" & I).Value < nMin Then nMin = Range("H" & I).Value If Range("I" & I).Value > nMax Then nMax = Range("I" & I).Value Else If Range("D" & I) <> Empty Then Range("H" & I).Value = nMin Range("I" & I).Value = nMax Range("G" & I).Value = Range("I" & I).Value - Range("H" & I).Value + 1 nMax = 0: nMin = 10 ^ 5 End If End If Next I End Sub
Rất cảm ơn a (thầy Ba Tê) với đoạn code trên!
Với mình thì thầy Ba Tê đang hại bạn đó, về lâu về dài!
Rất cảm ơn a với đoạn code trên!
a có thể giúp e thêm 1 vấn đề nữa là ở cột C nhiều lúc mã hiệu ko ghi (Empty), thì vị trí các công thức xuất hiện sẽ gặp lỗi.
Do vậy để tránh việc này e muốn dựa vào cột B, từ B11 trở xuống sẽ có các ký tự A,1,2,...,B,1,2,3,...,C,... và những ký tự này là luôn có, do vậy nếu dựa vào các ký tự A, B, C, ... để đặt vị trí Max, Min,... thì thuận lợi hơn.
Em có tìm hiểu thấy có đoạn code dùng If Asc(cells(...))>=65 then gì gì đó mà ko biết làm thế nào để áp dụng vào đoạn code trên của a, nếu được nhờ a giúp cho.
Dạ chắc có sự nhầm chút giữa yêu cầu của e với bạn nào đó.Tôi không biết ý gì của bạn , tôi chỉ làm theo yêu cầu.
Tôi "đã đọc thấy" những ý như thế này (có lẽ bạn thay đổi rồi): Các mục chính gồm A,B, C..., Mục kế tiếp là 1,2,3..., mục kế tiếp là 1.1; 1.2; 1,3 .... cuối cùng là những ô trống trong các mục 1.1; 1.2; 1.3....
Như vậy trường hợp các mục bạn nói là ô trống là chi tiết của 1.1, 1.2... trùng với các ô trống mà bạn Merge thì sao.
Đúng như "lão đại" nói. Tôi hại bạn rồi. Xin rút thôi.
Bạn có thể nói cho mình biết những điểm bất cập của ý tưởng này để mình rút kinh nghiệm được ko?
Mình rất cảm ơn!