Cách viết code VBA để chèn dòng động theo bảng tính?

Liên hệ QC

tiendungnst

Thành viên chính thức
Tham gia
9/7/07
Bài viết
87
Được thích
5
Chào GPE!
Nhờ các ACE diễn đàn hướng dẫn giúp cách viết VBA để chèn thêm dòng trong bảng tính đính kèm phía dưới của mình.
Theo cách viết của mình thì hiện nay lệnh chèn dòng sẽ là: Copy 03 dòng 12;13 và 14 và chèn vào dòng 40 bằng lệnh INSERT COPY CELL ( để có thể giữ nguyên công thức của dòng)

Có cách nào để thay đổi việc chèn dòng này luôn luôn được chèn vào dòng ngay phía trên của các dòng tổng hợp số liệu (các dòng có nhiều màu đấy ah)?
Nhờ các cao thủ chỉ thêm là có thể viết VBA như thế nào để COPY thêm các dòng mà không phải để 03 dòng trống phía trên cùng không ah?

Xin cảm ơn trước!
 
Lần chỉnh sửa cuối:
Xin lỗi vì file up lên bị lỗi, đã up lại, mong mọi người hướng dẫn giúp tí ah
 
Upvote 0
Chào GPE!
Nhờ các ACE diễn đàn hướng dẫn giúp cách viết VBA để chèn thêm dòng trong bảng tính đính kèm phía dưới của mình.
Theo cách viết của mình thì hiện nay lệnh chèn dòng sẽ là: Copy 03 dòng 12;13 và 14 và chèn vào dòng 40 bằng lệnh INSERT COPY CELL ( để có thể giữ nguyên công thức của dòng)

Có cách nào để thay đổi việc chèn dòng này luôn luôn được chèn vào dòng ngay phía trên của các dòng tổng hợp số liệu (các dòng có nhiều màu đấy ah)?
Nhờ các cao thủ chỉ thêm là có thể viết VBA như thế nào để COPY thêm các dòng mà không phải để 03 dòng trống phía trên cùng không ah?

Xin cảm ơn trước!

Xin lỗi vì file up lên bị lỗi, đã up lại, mong mọi người hướng dẫn giúp tí ah

Mở file bạn lên mình record Macro là có code ngay mà --> bạn test thử xem
[GPECODE=vb]
Sub Macro1()
On Error Resume Next
ActiveSheet.AutoFilterMode = 0
With [A65536].End(3)
.Resize(, 175).Copy .Offset(1).Resize(3, 175)
.Offset(1).Resize(3, 175).SpecialCells(2).Value = ""
End With
End Sub
[/GPECODE]
 
Upvote 0
Cách viết code VBA để chèn dòng theo yêu cầu!

Hiện mình đang có một bảng tính như file đính kèm
và đã ghi được một đoạn code VBA để thực hiện nhu cầu chèn thêm dòng; với đoạn code mà mình hiện có thì nút lệnh chèn dòng của mình sẽ thực hiện chèn thêm 02 dòng vào phía trên của vùng A43:FS43, nhưng chèn dòng kiểu này thì sau khi đã nhập dữ liệu đến vùng màu xanh lá, nhấp nút chèn dòng thì nó lại chèn thêm 02 dòng ở giữa vùng dữ liệu đã nhập. Nhu cầu của mình là luôn luôn thực hiện việc chèn dòng vào ngay phía trên vùng màu xanh lá để 02 dòng mới chèn luôn là dòng liền trên dòng màu xanh lá thì phải làm thế nào ah?

- Nhờ GPE hướng dẫn giúp tí: với bảng tính đính kèm, mình muốn là mờ đi vùng A1:FS11 (không hiện các cell ở vùng này) để thiết kế các nút lệnh cho đẹp thì phải làm thế nào ah?

- Đối với vùng dữ liệu A45:FS87 mình muốn hide và không cho nhập dữ liệu hoặc chỉnh sửa công thức và bảo vệ bằng mật khẩu thì phải làm ntn ah?
 
Upvote 0
Mở file bạn lên mình record Macro là có code ngay mà --> bạn test thử xem
[GPECODE=vb]
Sub Macro1()
On Error Resume Next
ActiveSheet.AutoFilterMode = 0
With [A65536].End(3)
.Resize(, 175).Copy .Offset(1).Resize(3, 175)
.Offset(1).Resize(3, 175).SpecialCells(2).Value = ""
End With
End Sub
[/GPECODE]

Mình viết code theo như của bạn, nhưng sao ko chạy được nhỉ? Bạn xem giúp mình và hướng dẫn cụ thể giúp mình được ko ah: http://www.giaiphapexcel.com/forum/...ode-VBA-để-chèn-dòng-theo-yêu-cầu!&highlight=
 
Upvote 0
Hiện mình đang có một bảng tính như file đính kèm
và đã ghi được một đoạn code VBA để thực hiện nhu cầu chèn thêm dòng; với đoạn code mà mình hiện có thì nút lệnh chèn dòng của mình sẽ thực hiện chèn thêm 02 dòng vào phía trên của vùng A43:FS43, nhưng chèn dòng kiểu này thì sau khi đã nhập dữ liệu đến vùng màu xanh lá, nhấp nút chèn dòng thì nó lại chèn thêm 02 dòng ở giữa vùng dữ liệu đã nhập. Nhu cầu của mình là luôn luôn thực hiện việc chèn dòng vào ngay phía trên vùng màu xanh lá để 02 dòng mới chèn luôn là dòng liền trên dòng màu xanh lá thì phải làm thế nào ah?

- Nhờ GPE hướng dẫn giúp tí: với bảng tính đính kèm, mình muốn là mờ đi vùng A1:FS11 (không hiện các cell ở vùng này) để thiết kế các nút lệnh cho đẹp thì phải làm thế nào ah?

- Đối với vùng dữ liệu A45:FS87 mình muốn hide và không cho nhập dữ liệu hoặc chỉnh sửa công thức và bảo vệ bằng mật khẩu thì phải làm ntn ah?

Post bài linh tink quá -->spam là bị xoá bài đấy
http://www.giaiphapexcel.com/forum/...iết-code-VBA-để-chèn-dòng-động-theo-bảng-tính
Bạn đã enable Macro chưa --> xem file đính kèm :
 
Upvote 0
Nhờ bạn xem lại giúp, vì code của bạn khi chèn dòng thì đúng là luôn luôn ở cuối cùng, nhưng nó lại tự động xóa đi những dòng tổng cộng phía dưới nên bảng tính bị mất dữ liệu.
Nhờ bạn xem lại giúp, thank so much, mình sẽ rút kinh nghiệm khi post bài.
 
Upvote 0
Nhờ bạn xem lại giúp, vì code của bạn khi chèn dòng thì đúng là luôn luôn ở cuối cùng, nhưng nó lại tự động xóa đi những dòng tổng cộng phía dưới nên bảng tính bị mất dữ liệu.
Nhờ bạn xem lại giúp, thank so much, mình sẽ rút kinh nghiệm khi post bài.
Cụ thể hơn đi, mình không hiểu bảng tính của bạn, không hiểu dòng tổng cộng nào-+*/
 
Upvote 0
Cụ thể hơn đi, mình không hiểu bảng tính của bạn, không hiểu dòng tổng cộng nào-+*/
Những dòng mình tổng hợp số liệu ở phía dưới, nó có nhiều màu xanh, đỏ tím vàng ấy.
Cứ nhấp nút lệnh thêm dòng như bạn viết thì nó sẽ thêm vào 03 hàng trống nhưng đồng thời nó cũng xóa đi mất 03 hàng có màu xanh đỏ tím vàng( nhấp nút thêm dòng khoảng 10 lần là all các hàng có màu đó sẽ mất hết luôn)
Những hàng có nhiều màu đó là những hàng mình tổng hợp số liệu cho 05 biểu mẫu báo cáo ở các sheet khác.
 
Upvote 0
Những dòng mình tổng hợp số liệu ở phía dưới, nó có nhiều màu xanh, đỏ tím vàng ấy.
Cứ nhấp nút lệnh thêm dòng như bạn viết thì nó sẽ thêm vào 03 hàng trống nhưng đồng thời nó cũng xóa đi mất 03 hàng có màu xanh đỏ tím vàng( nhấp nút thêm dòng khoảng 10 lần là all các hàng có màu đó sẽ mất hết luôn)
Những hàng có nhiều màu đó là những hàng mình tổng hợp số liệu cho 05 biểu mẫu báo cáo ở các sheet khác.
Thì vẫn là record Macro là có code ngay mà :
[GPECODE=vb]
Sub themdong()
On Error Resume Next
ActiveSheet.AutoFilterMode = 0
With [A65536].End(3)
.Resize(, 175).Copy
.Offset(1).Resize(3, 175).Insert xlDown, 0
.Offset(1).Resize(3, 175).SpecialCells(2).Value = ""
End With
Application.CutCopyMode = 0
End Sub
[/GPECODE]
 
Upvote 0
Thì vẫn là record Macro là có code ngay mà :
[GPECODE=vb]
Sub themdong()
On Error Resume Next
ActiveSheet.AutoFilterMode = 0
With [A65536].End(3)
.Resize(, 175).Copy
.Offset(1).Resize(3, 175).Insert xlDown, 0
.Offset(1).Resize(3, 175).SpecialCells(2).Value = ""
End With
Application.CutCopyMode = 0
End Sub
[/GPECODE]

Thank you so much!
Bạn có thể hướng dẫn giúp mình thêm về phần này không:
- Nhờ GPE hướng dẫn giúp tí: với bảng tính đính kèm, mình muốn là mờ đi vùng A1:FS11 (không hiện các cell ở vùng này) để thiết kế các nút lệnh cho đẹp thì phải làm thế nào ah?

- Đối với vùng dữ liệu A45:FS87 mình muốn hide và không cho nhập dữ liệu hoặc chỉnh sửa công thức và bảo vệ bằng mật khẩu thì phải làm ntn ah?
 
Upvote 0
Thank u so much! nhờ bạn chỉnh sửa thêm Macro tí xíu, con Macro của bạn viết khi thêm dòng thì dòng tổng hợp bằng SUBTOTAL phía dưới của mình nó không tính tổng cho các dòng mới thêm vào, không giống như lúc mình chọn Copy và insert copy sell thì SUBTOTAL tổng hợp luôn cả các dòng mới chèn vào.
 
Upvote 0
Thank u so much! nhờ bạn chỉnh sửa thêm Macro tí xíu, con Macro của bạn viết khi thêm dòng thì dòng tổng hợp bằng SUBTOTAL phía dưới của mình nó không tính tổng cho các dòng mới thêm vào, không giống như lúc mình chọn Copy và insert copy sell thì SUBTOTAL tổng hợp luôn cả các dòng mới chèn vào.

Công thức subtotal của bạn tại cột A là :
PHP:
=SUBTOTAL(3,$B$15:B36)
Bạn bảo là chèn thêm dòng mới vào --> tức là dòng không hề có dữ liệu đúng không ?
Khi chèn thêm dòng vào, cột B đã có dữ liệu đâu --> subtotal sẽ không tính tổng cho dòng mới thêm vào là đúng rồi
 
Upvote 0
Thank u so much! nhờ bạn chỉnh sửa thêm Macro tí xíu, con Macro của bạn viết khi thêm dòng thì dòng tổng hợp bằng SUBTOTAL phía dưới của mình nó không tính tổng cho các dòng mới thêm vào, không giống như lúc mình chọn Copy và insert copy sell thì SUBTOTAL tổng hợp luôn cả các dòng mới chèn vào.
Tất cả đều do công thức của bạn dùng các địa chỉ tuyệt đối, tương đối không hợp lý.
Kiểm tra lại các công thức xem hợp với ý muốn của bạn không. Nếu chắc là đúng kết quả muốn có thì ấn nút "Thêm dòng", muốn chèn thêm mấy dòng thì nhập số dòng muốn chèn thêm vào InputBox.
Có dòng 12 giữ lại công thức mẫu, không được xoá dòng 12.
---------------------
Cả rừng công thức mảng + màu mè quá nhiều, file hổng "Rùa" mới lạ.
 

File đính kèm

  • ChenDong.rar
    81.7 KB · Đọc: 709
Upvote 0
Công thức subtotal của bạn tại cột A là :
PHP:
=SUBTOTAL(3,$B$15:B36)
Bạn bảo là chèn thêm dòng mới vào --> tức là dòng không hề có dữ liệu đúng không ?
Khi chèn thêm dòng vào, cột B đã có dữ liệu đâu --> subtotal sẽ không tính tổng cho dòng mới thêm vào là đúng rồi
Mình nói nhầm ko phải công thức SUBTOTAL, mà là công thức SUMPRODUCT(array1,array2, ....) ở các dòng ngang nhiều màu xanh đỏ phía dưới, khi ấn nút chèn dòng theo con Macro của bạn thì nó chỉ tổng hợp ở phần ...) đối với các dòng cũ, dòng mới được chèn, nó không tự tổng hợp trong hàm SUMPRODUCT
Nhờ bạn xem lại giúp! mình gửi lại file đính kèm bạn xem giúp nhé!
 

File đính kèm

  • BCTK.rar
    176.7 KB · Đọc: 113
Upvote 0
Nhờ bạn xem lại giúp mình với, mình nói nhầm không phải là hàm SUBTOTAL mà là hàm SUMPRODUCT ở các hàng có nhiều màu phía dưới: http://www.giaiphapexcel.com/forum/s...%C3%ADnh/page2
Mình cũng đã tham khảo Macro của @bate cũng rất hay nhưng cũng có một số hạn chế, bạn có thể chỉnh lại Macro để hàm SUMPRODUCT có thể tự động SUM cho những dòng mới chèn được ko? Bạn có thể tích hợp vào Macro này hộp thoại InputBox và nhập vào số dòng cần chèn được ko?
Cảm ơn bạn nhé

thử code dưới đây xem --> ( chèn vào file cũ của bạn gửi lần trước )
[GPECODE=vb]
Sub themdong()
Dim rw As Long
On Error Resume Next
ActiveSheet.AutoFilterMode = 0
With Application
rw = .InputBox("Input the Number of rows to insert ", "record Macro ", , , , , , 1)
.ScreenUpdating = 0
End With
With [A65536].End(3)
.Resize(, 175).Copy
.Resize(rw, 175).Insert xlDown, 0
.Offset(-(rw - 1)).Resize(3, 175).SpecialCells(2).Value = ""
End With
Application.CutCopyMode = 0
Application.ScreenUpdating = 1
End Sub
[/GPECODE]
 
Upvote 0
Chào GPE!
Nhờ các ACE diễn đàn hướng dẫn giúp cách viết VBA để chèn thêm dòng trong bảng tính đính kèm phía dưới của mình.
Theo cách viết của mình thì hiện nay lệnh chèn dòng sẽ là: Copy 03 dòng 12;13 và 14 và chèn vào dòng 40 bằng lệnh INSERT COPY CELL ( để có thể giữ nguyên công thức của dòng)

Có cách nào để thay đổi việc chèn dòng này luôn luôn được chèn vào dòng ngay phía trên của các dòng tổng hợp số liệu (các dòng có nhiều màu đấy ah)?
Nhờ các cao thủ chỉ thêm là có thể viết VBA như thế nào để COPY thêm các dòng mà không phải để 03 dòng trống phía trên cùng không ah?

Xin cảm ơn trước!
Bạn nên dùng tính năng bảng trong excel là đúng và tiện nhất
"khuyên : Nên dùng"
 
Upvote 0
thử code dưới đây xem --> ( chèn vào file cũ của bạn gửi lần trước )
[GPECODE=vb]
Sub themdong()
Dim rw As Long
On Error Resume Next
ActiveSheet.AutoFilterMode = 0
With Application
rw = .InputBox("Input the Number of rows to insert ", "record Macro ", , , , , , 1)
.ScreenUpdating = 0
End With
With [A65536].End(3)
.Resize(, 175).Copy
.Resize(rw, 175).Insert xlDown, 0
.Offset(-(rw - 1)).Resize(3, 175).SpecialCells(2).Value = ""
End With
Application.CutCopyMode = 0
Application.ScreenUpdating = 1
End Sub
[/GPECODE]
Nhờ bạn xem và chỉnh lại giúp đoạn CODE để khắc phục hạn chế này được không ah: Hiện nay đoạn nút lệnh thêm dòng đang chạy rất tốt, nhưng nó vẫn hạn chế cho file của mình là có một số dòng mình đã ẩn đi cho đỡ rối và dài dòng, nhưng khi nhấp nút thêm bao nhiêu dòng thì các dòng đã bị ẩn nó hiện ra bấy nhiêu dòng. Bạn có thể giúp mình lại đoạn CODE để chỉ xuất hiện các dòng cần thêm còn các dòng đã bị ẩn thì vẫn bị ẩn như cũ được ko ah? (bạn có thể xem file đính kèm cho dễ hiểu)
Bạn xem giúp mình để tối ưu hai đoạn CODE của nút lệnh "Xem sổ thụ lý" và "Xem đầy đủ" được không ah. Mình chỉ có thể ghi lại Macro chứ ko bít gì về VBA cả
 

File đính kèm

  • BCTK.rar
    181.3 KB · Đọc: 134
Upvote 0
Bạn thử macro này xem nhé:

Sub chennhieudong()

Dim tongdong, message, title, default


message = "Nhap so dong muon chen them:"
title = "Chen them nhieu dong"
default = "5"
tongdong = InputBox(message, title, default)
If tongdong = "" Then
Exit Sub
End If
For sodong = 1 To tongdong
Selection.EntireRow.Insert
Next sodong
End Sub

vba này giúp bạn chèn dòng xuống phía dưới cell hiện hành.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử macro này xem nhé:

Sub chennhieudong()

Dim tongdong, message, title, default


message = "Nhap so dong muon chen them:"
title = "Chen them nhieu dong"
default = "5"
tongdong = InputBox(message, title, default)
If tongdong = "" Then
Exit Sub
End If
For sodong = 1 To tongdong
Selection.EntireRow.Insert
Next sodong
End Sub

vba này giúp bạn chèn dòng xuống phía dưới cell hiện hành.
Cho mình hỏi có cách nào chèn dòng theo số liệu thống kê có sẵn không??? thay vì mình phải nhập insert bao nhiêu dòng vào input box, thì nó tự động chèn theo số liệu cell tổng của mình.
Ví dụ:
tại ô A1: 16, khi chạy macro thì nó tự chèn 16 dòng cho mình lun
Mong các cao thủ giúp đỡ ah
 
Upvote 0
Web KT
Back
Top Bottom