Chèn thêm cột tự động tương tự cột đã có sẵn (2 người xem)

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

satthuvae

Thành viên thường trực
Tham gia
12/3/09
Bài viết
381
Được thích
52
Em chào cả nhà ah, Hiện tại em tìm trên diễn đàn không có bài hỏi đáp của các thành viên về việc thêm cột tự động theo cột ban đầu đã cho trước.
Em có một cột D và cột tổng là cột G. Hiện tại do nhu cầu nhiều lúc em thêm 1, hoặc 2 cột, em chèn thêm, nhưng việc chèn thêm sẽ mất thời gian sửa công thức hoặc trường hợp xóa cũng vậy. Mọi người xem giúp em có cách nào tạo marco tự động mà không làm ảnh hưởng các công thức.
Em gửi File đính kèm ạ. Rất mong các anh chị chỉ giáo giúp em. Em cám ơn ạ.
 

File đính kèm

Anh/Chị ơi có gì mọi người xem giùm em cách xử lý vấn đề này với ạ.
 
Upvote 0
Dạ vâng.
Bình thường em có cột D là trường hợp 1 và cột E là cột tổng.
Trong trường hợp em có 2, hoặc 3 trường hợp, em phải chèn thêm cột đó là cột E và cột F, khi đó cột tổng là cột G. Nhưng đó là cách thủ công ah. Em không biết có cách nào tạo bằng marco khi nào chọn số lượng cột ví dụ chọn 2, hoặc 3 cột tương tự như cột D cho sẵn, và khi đó cột G sẽ là cột tổng. Và khi chọn lại số lượng 1 thì sẽ chỉ còn cột D và cột E là cột tổng như cũ.
Cám ơn anh.
 
Upvote 0
Em gửi dữ liệu và kết quả đính kèm, Các anh xem giúp em có cách nào.
 

File đính kèm

Upvote 0
Cả nhà ơi, mọi người xem có cách nào giúp em với. Hay cái này marco nó không hiểu được à, mọi người có thông tin chia sẽ cho em. Em xin cám ơn.
 
Upvote 0
Cả nhà ơi, mọi người xem có cách nào giúp em với. Hay cái này marco nó không hiểu được à, mọi người có thông tin chia sẽ cho em. Em xin cám ơn.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n
    n = Range("B1").End(xlToRight).Value
    If Not IsNumeric(n) Then Exit Sub
    If Target.Address = Range("B1").End(xlToRight).Address Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        If Target.Column > 5 Then Range(Columns(5), Columns(Target.Column - 1)).Delete
        If n > 1 Then
            Range("E1").Resize(1, n - 1).EntireColumn.Insert
            Range("D8:D28").Copy Range("E8").Resize(21, n - 1)
            Range("E8").Resize(21, n - 1).SpecialCells(xlCellTypeConstants).ClearContents
            Range("D5").AutoFill Range("D5").Resize(1, n)
        End If
        Cells(8, n + 4).Formula = "=SUM(" & Range(Cells(8, 4), Cells(8, n + 3)).Address(0, 0) & ")"
        Cells(8, n + 4).Resize(21, 1).FillDown
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub
 
Upvote 0
Tôi đọc bài của bạn thấy nó ẩn chứa điều mâu thuẫn thì phải: Mục đích thì yêu cầu ẩn hiện trong khi giải pháp lại yêu cầu chèn xóa. Vậy khi đang có 10 trường hợp nhập số 1 thì 9 trường hợp khác sẽ ẩn đi hay xóa bỏ.
Nếu chỉ ẩn hiện thì theo tôi nên dự trù tối đa bao nhiêu trường hợp để có bấy nhiêu cột trường hợp. Các trường hợp nào ngoài yêu cầu thì ẩn đi sẽ hay và an toàn hơn nhiều.
 
Upvote 0
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n
    n = Range("B1").End(xlToRight).Value
    If Not IsNumeric(n) Then Exit Sub
    If Target.Address = Range("B1").End(xlToRight).Address Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        If Target.Column > 5 Then Range(Columns(5), Columns(Target.Column - 1)).Delete
        If n > 1 Then
            Range("E1").Resize(1, n - 1).EntireColumn.Insert
            Range("D8:D28").Copy Range("E8").Resize(21, n - 1)
            Range("E8").Resize(21, n - 1).SpecialCells(xlCellTypeConstants).ClearContents
            Range("D5").AutoFill Range("D5").Resize(1, n)
        End If
        Cells(8, n + 4).Formula = "=SUM(" & Range(Cells(8, 4), Cells(8, n + 3)).Address(0, 0) & ")"
        Cells(8, n + 4).Resize(21, 1).FillDown
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub

Em cám ơn anh à, em thấy khá ổn và đúng ý của em à.
 
Upvote 0
Tôi đọc bài của bạn thấy nó ẩn chứa điều mâu thuẫn thì phải: Mục đích thì yêu cầu ẩn hiện trong khi giải pháp lại yêu cầu chèn xóa. Vậy khi đang có 10 trường hợp nhập số 1 thì 9 trường hợp khác sẽ ẩn đi hay xóa bỏ.
Nếu chỉ ẩn hiện thì theo tôi nên dự trù tối đa bao nhiêu trường hợp để có bấy nhiêu cột trường hợp. Các trường hợp nào ngoài yêu cầu thì ẩn đi sẽ hay và an toàn hơn nhiều.

Em cám ơn anh à. Đúng là khi vận hành bài viết của anh Hau151978 em thấy đôi lúc em cũng thấy mất an toàn. Em sẽ xem lại bài toán. Cám ơn sự góp ý của anh.
 
Upvote 0
Em cám ơn anh à, em thấy khá ổn và đúng ý của em à.

Anh Hau151978 ơi, Anh có thể giúp em sửa một chút nữa được không. Vì là khi mà em thay đổi số cột đang là 3 em đã nhập số liệu rùi à. Nhưng vì lý do khách quan em chỉ nhập là 1 cột thôi, anh có thể giúp em ẩn cột 2 và cột 3 được không à. Tổng khi đó sẽ vẫn là cột 1+2+3. Nhưng chỉ có cột 1 và cột tổng hiện lên thôi à.
Em cám ơn anh.
 
Upvote 0
Em cám ơn anh à. Đúng là khi vận hành bài viết của anh Hau151978 em thấy đôi lúc em cũng thấy mất an toàn. Em sẽ xem lại bài toán. Cám ơn sự góp ý của anh.
Chỉnh sửa lại lệnh Delete, Insert thành:
- Hiện tất cả các cột
- Nếu đang có <n-1 cột thì chèn thêm .
- Nếu đang có >n-1 cột thì ẩn bớt đi.
- Thay công thức ở cột tổng từ SUM thành SUBTOTAL.
 
Upvote 0
Anh ơi, xem sửa rùi nhưng nó nhảy loạn hết lên. Anh sửa lại code giúp em với.
 
Upvote 0
Mình tham gia dạng ẩn cột xem sao, cứ tạm coi tối đa bạn có 10 trường hợp
Code chỉ có thế này thôi

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, So
If Target.Address = "$D$1" Then
'Neu nhap so khong hop le hay ky tu thi coi nhu xem ca
So = IIf(Target > 0 And Target < 11, Target, 10)
For i = 1 To 10
Columns(i + 3).Hidden = i > So
Next
End If
End Sub
 

File đính kèm

Upvote 0

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

Back
Top Bottom