Ẩn 1 cột trong Excel theo điều kiện (1 người xem)

Liên hệ QC

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

beststudent

Thành viên mới
Tham gia
19/9/08
Bài viết
5
Được thích
1
Chào các bạn!
Mình là thành viên mới của diễn đàn.
Hiện nay mình gặp 1 khó khăn trong việc xử lý 1 số báo cáo trên Excel. Cụ thể là template báo cáo của mình cần phải tự động hide các cột theo 1 điều kiện định nghĩa sẵn khi người sử dụng truyền tham số 1 tháng bất kỳ.

Ví dụ : Báo cáo doanh thu chỉ cần thể hiện 12 cột doanh thu trong 1 năm theo tham số năm truyền vào.Trong khi file báo cáo gốc của mình gửi cho sếp lúc nào cũng có 24 cột (vừa có các cột năm nay và vừa có 1 số cột năm trước và năm tới).Mình muốn tự động hide các cột năm trước và năm tới thì làm thế nào.

Mình đã tìm hiểu làm macro hay VB nhưng chưa được. Rất mong các bạn giúp đỡ!
Cảm ơn!

Beststudent
 
Chào các bạn!
Mình là thành viên mới của diễn đàn.
Hiện nay mình gặp 1 khó khăn trong việc xử lý 1 số báo cáo trên Excel. Cụ thể là template báo cáo của mình cần phải tự động hide các cột theo 1 điều kiện định nghĩa sẵn khi người sử dụng truyền tham số 1 tháng bất kỳ.

Ví dụ : Báo cáo doanh thu chỉ cần thể hiện 12 cột doanh thu trong 1 năm theo tham số năm truyền vào.Trong khi file báo cáo gốc của mình gửi cho sếp lúc nào cũng có 24 cột (vừa có các cột năm nay và vừa có 1 số cột năm trước và năm tới).Mình muốn tự động hide các cột năm trước và năm tới thì làm thế nào.

Mình đã tìm hiểu làm macro hay VB nhưng chưa được. Rất mong các bạn giúp đỡ!
Cảm ơn!

Beststudent
Về nguyên tắc là không có vấn đề! Nhưng ít ra bạn cũng phải đưa lên cái form của file đó chứ (đở mất công làm xong lại không đúng ý bạn)
 
Upvote 0
Ẩn 1 cột trong Excel theo điều kiện định nghĩa

Xin lỗi nhé.
Mình gửi kèm file báo cáo. Cụ thể như sau :
- Template gốc của báo cáo quản trị lúc nào cũng có đủ 12 cột budget và 12 cột Actual. Budget lấy dữ liệu 12 tháng trở về trước. Actual lấy 12 tháng tới.
- File cấp trên mong muốn là :
Các cột Budget từ đầu năm đến tháng trước so với tham số Period.
Actual lấy từ tháng theo tham số Period đến cuối năm.
Cảm ơn Bạn

Beststudent
 

File đính kèm

Upvote 0
Vậy tóm lại bạn muốn ẩn theo điều kiện thế nào đây? Nói rõ 1 chút!
Còn nếu luôn luôn ẩn 1 cột nào đó thì cứ ẩn bằng tay cho xong!
 
Upvote 0
Năm trước, năm nay, năm tới : luôn cố định hàng và cột ,chỉ có số liệu thay đổi theo hàng năm thì khi làm xong ,có thể báo cáo cho xếp hoặc cấp trên... thì bạn tạo rẻcode macro 1 lần rồi lưu lại ( làm theo kiểu không biết gì về VB..), kỳ sau khi báo cáo bạn chạy lại Mảco này.
 
Upvote 0
Chắc tại mình diễn tả chưa rõ. Không phải luôn luôn ẩn 1 số cột. Với lại báo cáo này không phải mình sử dụng mà là cấp trên sử dụng nên họ yêu cầu không cần phải tìm cột để hide đi. Mình nói rõ lại như sau :
- File temlate gốc này được mở bằng 1 công cụ tích hợp vào database phần mềm để có thể đưa ra excel format sẵn màu sắc quản trị số liệu, drilldown dữ liệu.
Nguyên tắc báo cáo như sau :
- Ví dụ chạy báo cáo trên phần mềm với tham số period = 08/2008
- Do đặc thù công cụ làm báo cáo của phần mềm là sẽ thể hiện đủ 12 cột Budget các tháng về trước và 12 cột Actual các tháng tới trong khi yêu cầu báo cáo trên excel là chỉ thể hiện đúng 12 tháng trong năm đó dù chọn tham số period là kỳ nào đi nữa.
- Do đó, theo ví dụ này chỉ lấy các cột budget từ tháng 01/2008 đến tháng 07/2008 và các cột actual từ tháng 08/2008 đến 12/2008
- Tóm lại, mục đích cuối cùng là nếu cột nào có năm khác so với năm của tham số period thì sẽ bị hide đi
Cảm ơn

Beststudent
 
Upvote 0
Nếu vậy thì e rằng bạn phải chuyển cell B4 sang Ạ, nếu không nó ẩn mất lấy gì mà nhập liệu
Xem file nha!
Bạn sửa cell A5 thành năm 2008 xem thử
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thêm 1 tham khảo dài dòng hơn, xin mời

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
1 If Not Intersect([B4], Target) Is Nothing Then
   Dim Dat As Date, DauNam As Date, CuoiNam As Date
3   Dim Ww As Byte
   Dim hRng As Range, Clls As Range
 
5   HideColumns Target:        Range([c4], [iv4]).Clear
   Dat = Target.Value:        DauNam = DateSerial(Year(Dat), 1, 1)
7   CuoiNam = DateSerial(Year(Dat), 12, 31)
   For Each Clls In Range([b7], [b7].End(xlToRight))
9      If Clls < DauNam Or Clls > CuoiNam Then
         If hRng Is Nothing Then
11            Set hRng = Clls.EntireColumn
         Else
13            Set hRng = Union(hRng, Clls.EntireColumn)
         End If
15      End If
      If Clls = DauNam Then Clls.Offset(-3) = Dat
17   Next Clls
   hRng.Select
19   HideColumns hRng, False
 End If
End Sub

Mã:
[B]Sub HideColumns(Rng As Range, Optional AllCols As Boolean = True)[/B]
 If AllCols Then
    Cells.Select
    Selection.EntireColumn.Hidden = False
 Else
    Rng.EntireColumn.Hidden = True
 End If
[B]End Sub[/B]

Nhấn vô [A4] để hiện lại tất cả
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Not Intersect([A4], Target) Is Nothing Then
   HideColumns Target:                            [B4].Select
 End If
End Sub
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn các bạn nhé! Các câu lệnh đều thực hiện rất tốt.%#^#$
Mình muốn tìm hiểu thêm về VBA sử dụng trong Excel. Bạn nào có tài liệu hay địa chỉ hay có thể Share cho mình được không? Công việc của mình giải quyết được rất nhiều từ diễn đàn này.
Beststudent
 
Upvote 0
Nhìn vào các đoạn mã mà mình hoa cả mắt lên. Bạn HYEN17 bớt chút thời gian giải thích giùm từng dòng lệnh được không.

D1: Ra điều kiện, nếu ai đó đụng vô [B4] của tôi thì mới thực thi các lệnh còn lại dưới đây:
D2: Khai báo 3 biến kiểu DL (dữ liệu) ngày
D3: Khai biến đếm kiểu Byte (để đếm số cột trang tính)
D4: Khai báo 2 biến kiểu Range để dùng sau này
D5: Chạy macro (nhằm cho hiện toàn bộ các cột trong trang tính)
Dòng lệnh sau: xóa DL trong hàng 4 kể từ sau 'B'
D6: Lấy trị trong [B4] gán vô biến một đã khai báo
Biến khai báo thứ 2 được gán trị là ngày đầu tiên của năm cần khảo sát.
D7: Biến kiểu Ngày cuối cùng được gán trị là ngày cuối cùng của năm khảo sát;
D8:D17: Tạo vòng lặp For Each . . Next để duyệt các ô trong hàng (7) kể từ [B7] cho đến cột cuối của hàng có chứa DL;
D9: Ra điều kiện, nếu DL ô cụ thể nào đó trong vùng khảo sát thỏa 2 điều kiện
< DauNam hay Clls > CuoiNam Thì:
D10: Nếu biến hRng đang rỗng, thì
D11: Gán cột chứa ô đang khảo sát vô biến
Else
D13: Ngược lại ĐK D10 thì nối kết cột chứa ô đang khảo sát vô biến (bằng phương thức Union()
D14: Kết thúc ĐK gán vùng cho biến hRng
D15: Kết thúc ĐK khảo sát ngày tháng các ô trong hàng
D16: Nếu DL trong ô là ngày đầu năm, thì gán trị ta đã nhập vô [B4] lên trên ô này 3 dòng. (Lý do của việc này: Vì cột chứa [B4] có thể bị ẩn đi; Bằng dòng lệnh này, người dùng luôn biết báo cáo đang trình bày thuộc thời kỳ nào!)
D17: Kết thúc ĐK khảo sát các ô trong hàng
D18: Chọn toàn bộ các cột trong biến hRng
D19 Gọi thực hiện macro ẩn các cột (Chú ý tùy chọn thứ hai = False)
D20: Kết thúc If trên cùng
End Sub

Macro cuối dùng để hiện đủ số cột toàn bộ, một khi ta đụng vô [A4]
 
Upvote 0
Cảm ơn các bạn nhé! Các câu lệnh đều thực hiện rất tốt.%#^#$
Mình muốn tìm hiểu thêm về VBA sử dụng trong Excel. Bạn nào có tài liệu hay địa chỉ hay có thể Share cho mình được không? Công việc của mình giải quyết được rất nhiều từ diễn đàn này.
Beststudent

http://www.giaiphapexcel.com/forum/showthread.php?t=6377
Cuốn của Wiley là rất hay và dễ hiểu
 
Upvote 0
Cảm ơn các bạn nhé! Các câu lệnh đều thực hiện rất tốt.%#^#$
Mình muốn tìm hiểu thêm về VBA sử dụng trong Excel. Bạn nào có tài liệu hay địa chỉ hay có thể Share cho mình được không? Công việc của mình giải quyết được rất nhiều từ diễn đàn này.
Beststudent

http://www.giaiphapexcel.com/forum/showthread.php?t=6377
Cuốn của Wiley là rất hay và dễ hiểu
 
Upvote 0
Chào các anh chị, mình đã xem một số topic về cách ẩn cột. Mình muốn hỏi thêm:
Mình có một bảng tồn kho, trong đó các hàng là danh sách hàng hoá, các cột là danh sách các kho. Trong các tháng, có một số kho có thể hết hàng, mình muốn tự động giấu các cột (tên kho) nếu kho trống (tức không có bất cứ một loại hàng nào) hoặc hàng (tên hàng) nếu loại hàng đó không còn ở tất cả các kho.
Mình không rành VBA lắm nên nhờ các anh chị giúp.
Xin cám ơn rất nhiều.
File đính kèm (xin lỗi mình không thể đính kèm vì ko có nút đó, chỉ có nút đính kèm hình và URL thôi).
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
ẩn cột trong excel có điều kiện

huucuong
Tôi muốn viết code để khi giá trị 1 ô nào đó trên dòng E7:IV7 bằng giá trị ô A1 thì cột chứa ô đó ẩn đi và khi tôi thay đổi giá trị ô A1 thì những ô đó hiện lên. Ví dụ: Từ ô E7:IV7 tôi có dữ liệu lần luợt là "a","b","a","d","e","f","g"....
Tại ô A1 tôi tạo 1 list Validation xổ xuống. Khi tôi chọn ô A1 là "a" thì cột E,G sẽ ẩn, còn các cột khác hiện. Khi tôi chọn ô A1 là "b" thì cột F sẽ ẩn các cột khác hiện. Mong AE trên GPE gúp đỡ
 
Upvote 0
Chào bạn HYen17 tôi thấy file ẩn cột theo điều kiện do bạn viết code rất hay, tôi đang cần file như vậy nhưng thay vì dữ liệuở tiêu đề là ngay thang nam... bây giờ bạn thay bằng kí tự số và chữ (8z, 22a1, bạc nén) bất kì. Rất mong bạn giúp
xin cảm ơn
 
Upvote 0
Cần giúp đỡ

tôi thấy file ẩn cột theo điều kiện do các bạn viết code rất hay, tôi đang cần file như vậy nhưng thay vì dữ liệu ở tiêu đề là ngay thang nam... bây giờ các bạn thay bằng kí tự số và chữ (VD 8z, 22a1, bạc nén) bất kì. Rất mong bạn giúp
xin cảm ơn
mô tả
 
Upvote 0
Các anh ơi, giúp COLACLAC với..............
Cảm ơn các anh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
Upvote 0
Bạn CoLacLac ơi, bạn dùng code nay nhé

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Clls As Range
If Target.Address = "$B$4" Then
For Each Clls In [C7:Y7]
Clls.EntireColumn.Hidden = (Clls) <> (Target)
Next Clls
End If
End Sub
 
Upvote 0
Mọi người giúp mình với ạ. Khi mình lọc theo tổ " Tổ 1", mình muốn ẩn các cột có tổng cộng bằng 0. Có hàm nào tự động ẩn các cột theo điều kiện không ạ?
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom