sự kiện Worksheet_Change (1 người xem)

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

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

BoKuDo

Thành viên chính thức
Tham gia
17/12/13
Bài viết
92
Được thích
5
Nghề nghiệp
Kế toán
Nhờ các bạn giúp mình code sự kiện sao cho tự tìm vị trí và tạo các công thức giống như vị trí các ô được tô màu đỏ trong file ví dụ mình đính kèm.
Mình cảm ơn nhiều!
 

File đính kèm

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?
 
Upvote 0
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?
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, biết khó nhưng hy vọng vẫn có hướng giải quyết.
Những ô màu đỏ là những vị trí mình muốn đưa vào sự kiện Worksheet_Change
Mình cảm ơn!
 

File đính kèm

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

Rất cảm ơn bạn đã giúp!
Có vấn đề là các công thức ở (Max, Min,..) xuất hiện tại nhiều dòng khác nhau khi mình thử xóa các ngày bên dưới, hoặc kích hoạt 1 cell thì dòng tại vị trí cell đó cũng xuất hiện các công thức (Max, Min,..)
 

File đính kèm

Upvote 0
Đúng rồi anh ah. Anh thêm sự kiện. Nếu mà dòng của cột C trắng thì thực hiện Code là được. Theo em thì anh dùng Sub hay hơn là dùng Worksheet_Change Vì mỗi lần thay đổi thì máy phải tính toán lại. Nếu dữ liệu nhiều nó cứ qoay qoay khố chựu lắm

 
Upvote 0
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ó.
 
Upvote 0
Công việc hiện tại của em cũng vướng vấn đề này
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Hiện tại em cũng đang dùng 1 công tác 3 dòng.Trong đó dòng thứ 2 sử dụng định dạng Conditional Fomartitng để vẽ tiến độ thi công.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Nếu ko bỏ dòng trống thì còn hướng nào khác ko bạn?

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
 

File đính kèm

Upvote 0
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 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.
 
Upvote 0
Với mình thì thầy Ba Tê đang hại bạn đó, về lâu về dài!

Thầy sao hại trò?! chỉ có trò ko biết mình đang hại chính mình "về lâu về dài" thôi. Vì đó là ý của mình và thầy Ba Tê chỉ hỗ trợ theo ý đó thôi.
Bạn HYen17 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!
 
Upvote 0
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.
-----------------------------------------------------------------------------------------------------------------------------------------------
Vậy thì mình dùng hàm IsText để phân biệt số và chữ của cột STT.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
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.

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.
 
Upvote 0
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.
Dạ chắc có sự nhầm chút giữa yêu cầu của e với bạn nào đó.
Dù sao e cũng cảm ơn thầy Ba Tê đã hỗ trợ!
Chúc thầy và các thành viên GPE luôn vui vẻ!
 
Upvote 0
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!

CSDL mà bạn đang xây dựng đó là chưa chuẩn.
Mà đã vậy, thao tác với nó sẽ là vật vã, nhiều hiểm nguy rình rập & bảo trì thì hỡi ơi!

Ví dụ bạn khó mà tự động hóa trong khâu nhập liệu;
Sửa chữa hay xóa bỏ dữ liệu nào đó không fải dễ.
CSDL của bạn như bức tượng ở quảng trường; thích hợp cho khách tham quan mà thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom