Help! Tự fill cell có điều kiện (1 người xem)

Liên hệ QC

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

nhungdoahoaphudung

Thành viên chính thức
Tham gia
22/6/09
Bài viết
75
Được thích
7
Chào cả nhà! Em đang làm 1 file theo dõi công việc nhờ các bác giúp mã.Em có sheet1, dòng từ A4 đến A10 đặt sẵn hàm và các dòng có tự tô màu, format theo điều kiện nếu cột A1<>"" thì sẽ tô màu. Vấn đề đặt ra là file mẫu này có thể cầm đến vài nghìn dòng được lập như công thức trong dòng A4 đến A10, như vậy nếu ta dùng chuột kéo fill để tự lấy công thức và format (conditional formating) thì chưa nhập dữ liệu gì vào file đã nặng vài MB rồi.
Đề bài: cột A là STT, cột B là nội dung. A4 đến A10 được lập sẵn công thức nếu có nội dung thì sẽ tự động có STT, nếu có STT thì sẽ đặt format (conditional formating). Bây giờ làm thế nào để: khi nhập đến B8 (tức là A8 sẽ được điền STT) thì sẽ tự động fill - kéo chuột (copy công thức và format) thêm 1 dòng nữa kéo từ dòng 10 xuống được hàng thứ 11 có hàm và format như dòng 10. Và nếu nhập tiếp B9 (tức A9 có giá trị) thì lại tiếp tục fill thêm 1 dòng nữa từ dòng 11 được hàng 12 (có hàm và format như dòng 11), tương tự nếu điền B10 (A10 có giá trị) thị sẽ fill thêm 1 dòng (có hàm và format như dòng 12),... tương tự, nếu ta nhập thì sẽ tự động fill.
Cảm ơn!
 

File đính kèm

Không có ai giúp nhỉ. Các bác xem giúp em với, ko biết cú pháp Selection.AutoFill Destination:=Range(Cells(a + 3, 1), Cells(a + 4, 3)), Type:=xlFillDefault bị sai ở chỗ nào mà nó không chạy được (báo lỗi)
hoặc dùng Selection.AutoFill Destination:=Range("a" & a + 3 & ":" & "c" & a + 3), Type:=xlFillDefault cũng bị báo lỗi. Các bác sửa giúp em cấu trúc trên với (có lẽ lỗi ở chỗ range. Cảm ơn


____________________
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a As Integer
a = Range("A21").Value
If (a >= 2) Then
Range(Cells(a + 3, 1), Cells(a + 3, 3)).Select
Selection.AutoFill Destination:=Range(Cells(a + 3, 1), Cells(a + 4, 3)), Type:=xlFillDefault
Range("A" & a).Select
End If
End Sub
 
Upvote 0
____________________
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a As Integer
a = Range("A21").Value
If (a >= 2) Then
Range(Cells(a + 3, 1), Cells(a + 3, 3)).Select
Selection.AutoFill Destination:=Range(Cells(a + 3, 1), Cells(a + 4, 3)), Type:=xlFillDefault
Range("A" & a).Select
End If
End Sub

Thử code thế này
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B4:B1000]) Is Nothing Then
   If Target.Count = 1 Then
      If Target <> "" Then
         Target.Offset(, -1) = Application.Max([A:A]) + 1
      Else
         Target.Offset(, -1) = Empty
      End If
   End If
End If
End Sub
 
Upvote 0
Cảm ơn bác. Bác cho em hỏi với, em có sheet1. em chọn điều khiển sheet la selection_change. Em đã làm được fill (dùng thuộc tính filldown) nhưng còn 1 lỗi là: sau khi fill thì nó lại chọn vào cái vùng nó vừa fill. Bác giúp em cái code làm sao sau khi có selection_change thì nó chỉ tự thực hiện lệnh fill (trước lệnh fill thì có lệnh chọn vùng để fill), còn vùng chuột đã chọn vẫn giữ nguyên như tại vùng người dùng bảng tính (ví dụ em gõ vào cột B4: Hà Nội, sau khi enter thì nó xuống B5 (hoặc chọn 1 vùng A1:B4), lệnh VBA tự fill từ A7-C7, xuống A9-C9, nhưng chuột vẫn để ở ô B5 (hoặc vẫn để chuột chọn A1:B4) (người sử dụng ko biết đã có mã VBA fill- thực hiện ngầm)
 
Upvote 0
Các bác cho hỏi thêm em viết code thế này bị lỗi chỗ nào mà ko chạy được
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Long
a = Range("A5509").Value
If a > 2 Then
    If Range("A" & (a + 12)).HasFormula = False Then
    Worksheets("VB den").Unprotect
    Range("A" & (a + 12) & ":" & "P" & (a + 12)).Select
    Selection.FillDown
    Range("E" & (a + 9)).Select
    'Worksheets("VB den").Protect
    
    
    Worksheets("CB").Activate
    Worksheets("CB").Unprotect
    Range("A" & (a + 14) & ":" & "P" & (a + 14)).Select 'Báo lỗi ở đây
    Selection.FillDown
    Range("C" & (a + 11)).Select
    Worksheets("CB").Protect
        
    Worksheets("VB den").Activate
    End If
End If


End Sub

Thanks
 
Upvote 0
Upvote 0
Cảm ơn bác đã trả lời. Em gửi kèm file lên để bác giúp. Em làm mãi mà không được.
Sheet VB den là để nhập dữ liệu, để file nhẹ em chỉ làm mẫu đến 6 nội dung (STT đến 6), giờ em muốn khi nhập dữ liệu đến ô thứ 3, nhập xong thì nó fill tiếp thêm 2 dòng nữa, nếu nhập vào đến STT 4 thì vẫn không thay đổi gì, nhập đến 6 thì nó lại fill tiếp 2 dòng nữa,... liên tục như vậy (khi fill ở sheet VB den thì ở sheet CB nó cũng fill tương ứng thêm 2 dòng để liên kết)
Nhờ bác nghiên cứu giúp em với, cảm ơn!
 

File đính kèm

Upvote 0
Cảm ơn bác đã trả lời. Em gửi kèm file lên để bác giúp. Em làm mãi mà không được.
Sheet VB den là để nhập dữ liệu, để file nhẹ em chỉ làm mẫu đến 6 nội dung (STT đến 6), giờ em muốn khi nhập dữ liệu đến ô thứ 3, nhập xong thì nó fill tiếp thêm 2 dòng nữa, nếu nhập vào đến STT 4 thì vẫn không thay đổi gì, nhập đến 6 thì nó lại fill tiếp 2 dòng nữa,... liên tục như vậy (khi fill ở sheet VB den thì ở sheet CB nó cũng fill tương ứng thêm 2 dòng để liên kết)
Nhờ bác nghiên cứu giúp em với, cảm ơn!
Đoán đoán viết đại, cốc có hiểu
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Not Intersect(Target, [E9:E10000]) Is Nothing Then
        If Target.Offset(1, -4).HasFormula = False Then
            Target.Offset(, -4).Resize(3).FillDown
        End If
        With Sheets("CB")
            .[A65536].End(3).Resize(2, 12).FillDown
        End With
    End If
Application.EnableEvents = True
End Sub
 
Upvote 0
Cảm ơn, bác giải thích giúp mã code với, em đang tìm hiểu VBA nên ko hiểu lắm.
Khi dùng đoạn code, khi chọn 1 ô thì nó cứ khung 2 ô là sao nhỉ, bác dán vào nhập vào vài hàng nội dung ở ô "nơi gửi đến" sẽ thấy.
- Bác cho hỏi với, nếu muốn gán giá trị biến dùng hàm của excel thì cấu trúc thế nào, ví dụ r=max(A1:A20) thì viết thế nào.
 
Upvote 0
Cảm ơn, bác giải thích giúp mã code với, em đang tìm hiểu VBA nên ko hiểu lắm.
Khi dùng đoạn code, khi chọn 1 ô thì nó cứ khung 2 ô là sao nhỉ, bác dán vào nhập vào vài hàng nội dung ở ô "nơi gửi đến" sẽ thấy.
- Bác cho hỏi với, nếu muốn gán giá trị biến dùng hàm của excel thì cấu trúc thế nào, ví dụ r=max(A1:A20) thì viết thế nào.
Thử vầy xem r= Application.Max([A1:A20])
 
Upvote 0
Bác giải thích giúp em mấy lệnh sau với:
1) If Not Intersect(Target, [B4:B1000]) Is Nothing Then

2) If Not Intersect(Target, [E9:E10000]) Is Nothing Then
If Target.Offset(1, -4).HasFormula = False Then

3) Application.EnableEvents = True 'or false
thanks
 
Upvote 0
Bác giải thích giúp em mấy lệnh sau với:
1) If Not Intersect(Target, [B4:B1000]) Is Nothing Then

2) If Not Intersect(Target, [E9:E10000]) Is Nothing Then
If Target.Offset(1, -4).HasFormula = False Then

3) Application.EnableEvents = True 'or false
thanks

1. Nếu có sự thay đổi trong phạm vi B4:B1000 thì ....
2. Nếu tại ô có sự thay đổi xuống dưới 1 ô và ngược về bên trái 4 ô có công thức thì....
3. Cặp lệnh này thường được dùng trong các sự kiện Change để tránh lỗi vòng lặp vô tận. Tuy nhiên có lúc cần nhưng có lúc không cần.

Tóm lại là vọc riết thì biết. Muốn nhanh thì tìm 1 người nào biết VBA, học trực tiếp 1 tháng sẽ tương đương học mò 1 năm hoặc nhiều hơn nữa.
 
Upvote 0
1. Nếu có sự thay đổi trong phạm vi B4:B1000 thì ....
2. Nếu tại ô có sự thay đổi xuống dưới 1 ô và ngược về bên trái 4 ô có công thức thì....
3. Cặp lệnh này thường được dùng trong các sự kiện Change để tránh lỗi vòng lặp vô tận. Tuy nhiên có lúc cần nhưng có lúc không cần.

Tóm lại là vọc riết thì biết. Muốn nhanh thì tìm 1 người nào biết VBA, học trực tiếp 1 tháng sẽ tương đương học mò 1 năm hoặc nhiều hơn nữa.
Đoán đoán viết đại, cốc có hiểu
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Not Intersect(Target, [E9:E10000]) Is Nothing Then
        If Target.Offset(1, -4).HasFormula = False Then
            Target.Offset(, -4).Resize(3).FillDown
        End If
        With Sheets("CB")
            .[A65536].End(3).Resize(2, 12).FillDown
        End With
    End If
Application.EnableEvents = True
End Sub
Cám ơn bác. Em bác cho em hỏi thêm với, đoạn code của bác bị lỗi khi nhập nội dung vào cột E thì sau khi enter nó bao khung 2 ô, nhập dữ liệu thì nó bì nhảy xuống ô tiếp theo, nếu đã nhâp xong rồi xóa để nhập lại thì khung chọn lung tung mấy ô liền rất khó nhập dữ liệu, bác xem sửa giúp code khắc phục với. Thankshoidien dan.JPG
 

File đính kèm

Upvote 0
Cám ơn bác. Em bác cho em hỏi thêm với, đoạn code của bác bị lỗi khi nhập nội dung vào cột E thì sau khi enter nó bao khung 2 ô, nhập dữ liệu thì nó bì nhảy xuống ô tiếp theo, nếu đã nhâp xong rồi xóa để nhập lại thì khung chọn lung tung mấy ô liền rất khó nhập dữ liệu, bác xem sửa giúp code khắc phục với. ThanksView attachment 131755
Thử sửa lại vầy coi sao nha. Cũng không biết nó bị gì nữa
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Not Intersect(Target, [E9:E10000]) Is Nothing Then
        If Target.Offset(1, -4).HasFormula = False Then
            Target.Offset(, -4).Copy Target.Offset(1, -4)
        End If
        With Sheets("CB")
            .[A65536].End(3).Resize(, 12).FillDown
        End With
    End If
Application.EnableEvents = True
End Sub
 
Upvote 0
Vẫn không ổn lắm, vẫn bị khung ô như ở hình em đã gửi, bác xem lại gúp
 
Upvote 0
Thêm cặp code này vào đầu và cuối code
Application.ScreenUpdating=False
....
Application.ScreenUpdating=True[/QUOta]
Cám ơn bác, tiện thể báo hướng dẫn giúp cách sử dụng AutoFill, em dùng ko hiểu sao toàn bị lỗi
Set myrange = Range(Cells(a + 1, 1), Cells(a + 1, b))
Selection.AutoFill Destination:=myrange, Type:=xlFillDefault
hoặc


Selection.AutoFill Destination:=Range(Cells(a + 1, 1), Cells(a + 1, b)), Type:=xlFillDefault


Cấu trúc này có điều kiện gì không hay cái DESTINATION không được dùng biến, bác hướng dẫn giúp dùng Autofill có biến thì viết lênh thế nào
 
Upvote 0
Thêm cặp code này vào đầu và cuối code
Application.ScreenUpdating=False
....
Application.ScreenUpdating=True[/QUOta]
Cám ơn bác, tiện thể báo hướng dẫn giúp cách sử dụng AutoFill, em dùng ko hiểu sao toàn bị lỗi
Set myrange = Range(Cells(a + 1, 1), Cells(a + 1, b))
Selection.AutoFill Destination:=myrange, Type:=xlFillDefault
hoặc


Selection.AutoFill Destination:=Range(Cells(a + 1, 1), Cells(a + 1, b)), Type:=xlFillDefault


Cấu trúc này có điều kiện gì không hay cái DESTINATION không được dùng biến, bác hướng dẫn giúp dùng Autofill có biến thì viết lênh thế nào
Chịu khó đọc Help của VBA đi thì sẽ biết cú pháp thế nào.
Nếu vùng Destination mà không chứa luôn cái ô Selection của bạn thì sai cú pháp sẽ gây ra lỗi.
 
Upvote 0
Web KT

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

Back
Top Bottom