2014-11-21 83 views
1

我有一个生产工作簿,其中包含一年中每个月份的选项卡和YTD摘要选项卡。每个月度工作表都有显示组成工作日的不同事件或操作的行,并且列中的日期是标题行。我们在周六或周日不工作,但那些日子出现在每个电子表格中。我想知道如何创建宏或VBA代码,以便能够自动隐藏列,如果该列中的单元格包含星期六或太阳。由于一个月内有多个星期六和星期日,它会在每个电子表格上隐藏多列。第34行是每个电子表格上的一天,每周使用三位数日期 - 周一,周二,周三等,所以我需要说明如果该单元格是星期六或太阳 - 隐藏该列和列从B到AG。我们为每个超过50名员工准备了这些电子表格中的一张,这样我就可以进入并手动隐藏它们,但这需要很长时间,我知道有更高效的解决方案。如果列中的单元格隐藏列,则为星期六或太阳

谢谢

+0

列范围内变化好像它可能是值得考虑不必使用开始与那些列。 – pnuts 2014-11-21 21:58:30

+0

如果匹配,使用条件格式将列宽设置为“1”。无需代码。 – 2014-11-21 22:54:56

回答

0

我假设你知道如何设置和运行VBA代码作为宏?如果没有,请参阅:http://office.microsoft.com/en-us/excel-help/create-or-delete-a-macro-HP010342374.aspx#BMcreatemacrovba

试试这个代码。

Sub HideWeekends() 
Dim i as integer 
Dim sht as Worksheet 

For each sht in ActiveWorkbook 
    For i = 1 to 31 
     If sht.Cells(34,i) = "Sat" Or "Sun" then 
      sht.Cells(34,1).EntireColumn.Hidden = True 
     End if 
    Next 
Next 
End Sub 

您必须对此进行修改以符合您的电子表格。如果该月的第一天,实际上是在C列,而不是列A,然后更改

sht.Cells(34,i) 

sht.Cells(34,i+2) 

等。

我也在没有excel的计算机上这样做,所以让我知道如何工作,我可以和你一起工作!

0

已经基于以上描述经过测试。应该按预期工作。

Sub Hide_Columns_Based_On_Criteria() 
Dim iCntr As Long, WS_Count As Integer, I As Integer 

WS_Count = ActiveWorkbook.Worksheets.Count 

For I = 1 To WS_Count 

    ActiveWorkbook.Worksheets(I).Select 
    For iCntr = 2 To 33 Step 1 

     If Cells(34, iCntr) = "Sat" Then 
      Columns(iCntr).EntireColumn.Hidden = True 
     End If 

     If Cells(34, iCntr) = "Sun" Then 
      Columns(iCntr).EntireColumn.Hidden = True 
     End If 
    Next iCntr 
Next I 

End Sub 

您可以调整iCntr如果从B到AG

For iCntr = 2 To 33 Step 1

相关问题