Tự động định dạng theo dòng trên (như table) trong excel (2 người xem)

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

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

Tôi tuân thủ nội quy khi đăng bài

HUYBOY

Thành viên chính thức
Tham gia
5/4/20
Bài viết
77
Được thích
3
Kính nhờ Anh/Chị diễn đàn
Em có file excel như đình kèm nhưng bị ẩn cột B, và cột C; Em xin nhờ Anh/Chị giúp em đoạn mã có thể Tự động định dạng theo dòng trên khi gõ dữ liệu ở dòng cuối +1 (như kiểu mở rộng bảng table) trong excel với ạ. Em không dùng chức năng Table vì muốn để đồng nhất với các file data khác ạ. Em cảm ơn Anh/Chị ạ
 

File đính kèm

Kính nhờ Anh/Chị diễn đàn
Em có file excel như đình kèm nhưng bị ẩn cột B, và cột C; Em xin nhờ Anh/Chị giúp em đoạn mã có thể Tự động định dạng theo dòng trên khi gõ dữ liệu ở dòng cuối +1 (như kiểu mở rộng bảng table) trong excel với ạ. Em không dùng chức năng Table vì muốn để đồng nhất với các file data khác ạ. Em cảm ơn Anh/Chị ạ
Bạn tham khảo nha, không biết đúng ý bạn chưa?
 

File đính kèm

Upvote 0
Bạn tham khảo nha, không biết đúng ý bạn chưa?
Em có nhập dữ liệu nhưng nó không tự động định dạng và công thức xuống ạ :(
1728442789868.png
Bài đã được tự động gộp:

Thử áp dụng đoạn code sau:
Mã:
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
em có dùng nhưng nó không tự động và không cop công thức ô phía trên xuống ạ :(
1728443022751.png
 
Upvote 0
Kính nhờ Anh/Chị diễn đàn
Em có file excel như đình kèm nhưng bị ẩn cột B, và cột C; Em xin nhờ Anh/Chị giúp em đoạn mã có thể Tự động định dạng theo dòng trên khi gõ dữ liệu ở dòng cuối +1 (như kiểu mở rộng bảng table) trong excel với ạ. Em không dùng chức năng Table vì muốn để đồng nhất với các file data khác ạ. Em cảm ơn Anh/Chị ạ
Tham khảo macro sau
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lr1&, Lr2&
    If Not Intersect(Target, Range("A2:D1000")) Is Nothing Then
Lr2 = Target.Row
Lr1 = Lr2 - 1
      Application.EnableEvents = False
    Range("A" & Lr1 & ":H" & Lr1).Copy
    Range("A" & Lr2).Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Range("E" & Lr2).FormulaR1C1 = "=RC[-2]*RC[-1]"
      Application.EnableEvents = True
End If
If Not Intersect(Target, Range("F2:G1000")) Is Nothing Then
Lr2 = Target.Row
Lr1 = Lr2 - 1
      Application.EnableEvents = False
    Range("F" & Lr1 & ":H" & Lr1).Copy
    Range("F" & Lr2).Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Range("H" & Lr2).FormulaR1C1 = "=RC[-2]+RC[-1]"
      Application.EnableEvents = True
End If
End Sub
 
Upvote 0
Tham khảo macro sau
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lr1&, Lr2&
    If Not Intersect(Target, Range("A2:D1000")) Is Nothing Then
Lr2 = Target.Row
Lr1 = Lr2 - 1
      Application.EnableEvents = False
    Range("A" & Lr1 & ":H" & Lr1).Copy
    Range("A" & Lr2).Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Range("E" & Lr2).FormulaR1C1 = "=RC[-2]*RC[-1]"
      Application.EnableEvents = True
End If
If Not Intersect(Target, Range("F2:G1000")) Is Nothing Then
Lr2 = Target.Row
Lr1 = Lr2 - 1
      Application.EnableEvents = False
    Range("F" & Lr1 & ":H" & Lr1).Copy
    Range("F" & Lr2).Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Range("H" & Lr2).FormulaR1C1 = "=RC[-2]+RC[-1]"
      Application.EnableEvents = True
End If
End Sub
Anh cho em hỏi với ạ, công thức ở hàng trên của em có thể bị thay đổi (không giống nhau giữa các dòng)và dòng em không muốn giới hạn đến dòng 1000, cứ thêm mới dòng là áp dụng thì sửa đoạn code trên như nào được ạ?
 
Upvote 0
Anh cho em hỏi với ạ, công thức ở hàng trên của em có thể bị thay đổi (không giống nhau giữa các dòng)và dòng em không muốn giới hạn đến dòng 1000, cứ thêm mới dòng là áp dụng thì sửa đoạn code trên như nào được ạ?
Bạn thay cái số 1000 ấy thành số bạn muốn.
nếu không thì bỏ 1000 ấy ví dụ : range("A2:D" thì có thể là cả cột.
Nếu chỉ bắt sự kiện ở dòng cuối +1 thì bạn tìm hiểu về code tìm dòng cuối (LastRow=Lr=Range("G" & Rows.count).End(xlup).Row (ví dụ cột G là cột được nhập cuối cùng- cột không liên quan gì đến bắt sự kiện)
và đưa cái Lr ấy vào đầu và bắt sự kiện theo dạng
If Not Intersect(Target, Range("A" &lr+1 &":D"& Lr+1)) Is Nothing Then
(tức là chỉ bắt sự kiện dòng dòng cuối +1)
Nếu không muốn công thức của hàng trên được gán xuống dòng dưới thì vô hiệu dòng code ấy bằng cách thêm dấu nháy đơn trước dòng code ấy.
ví dụ 'Range("H" & Lr2).FormulaR1C1 = "=RC[-2]+RC[-1]"

Trên máy tôi đã xóa file của bạn, nên lười tải lại và thử.
Cứ thử thực hành theo tôi hướng dẫn (có thế mới nhớ lâu được), vướng mắc, đăng đàn hỏi tiếp.
Chúc bạn thành công.
 
Upvote 0
Web KT

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

Back
Top Bottom