特定单元格为空时如何删除特定范围?

时间:2018-09-18 01:21:42

标签: excel vba excel-vba

我有以下问题。
在Excel电子表格中,我正在填充日历计划。 根据下拉列表,您可以更改月份和年份,因此日期会自动调整为工作日。

Fixed week days = `E6:R6`   
Calendar dates  = `E7:R7`    
Work Shifts     = `E8:R15`  

enter image description here

现在,当新的日程安排填充并且像在这种情况下一样,在10月1日之前没有“星期日”,那么我需要删除范围E8:E15中的所有名称。

enter image description here

我已经在子级中尝试了IF THEN ELSEIF,并且该方法有效,但仅适用于第一个范围-E8:E15。如果我将月份切换为9月,而我们从星期六开始,则所有单元格都保持其值,但E8:E15。就像我只能执行“ 1” IF循环然后停止一样。

enter image description here

我正在寻找遍历整个星期的代码,以检查单元格是否显示日期或为空。没有日期的唯一可能的星期是第1周,第5周和第6周。如上图所示,取决于月份的长短,会显示或多或少的日期。

enter image description here


更新: 嗨,它现在可以工作了,我可以通过以下方式解决它。

我的原始代码是:

If Sheets("schedule").Range("E5") = "" Then
Sheets("Schedule").Range("E8:E15").ClearContents
  Elseif Sheets("schedule").Range("G5") = "" Then
  Sheets("Schedule").Range("G8:G15").ClearContents

..依此类推,适用于我日历的所有其他范围。 如果

结束

新代码为: 接下来,我只是尝试将它们分开放置。

If Sheets("schedule").Range("E5") = "" Then
Sheets("Schedule").Range("E8:E15").ClearContents
End if

If Sheets("schedule").Range("G5") = "" Then
Sheets("Schedule").Range("G8:G15").ClearContents
End if

....依此类推。

现在它运行正常。 由于某种原因,它在if结束之前无法运行多个IF循环。 感谢大家的所有快速帮助! 当我对Excel和VBA有另一个疑问时,我一定会回来的:)

1 个答案:

答案 0 :(得分:0)

我将首先假设range(“ E8:E15”)。clearcontents虽然是一列,而其他所有都是2列,但这并不是一个错字。

代码¹:

sub buildSched()

    dim c as long

    with worksheets("schedule")
        for c = 5 to 17 step 2
            if .cells(5, c).value2 = vbnullstring
                .cells(8, c).resize(8, 1 + abs(cbool(c > 5))).clearcontents
            end if
        next c
    end with

end sub

如果range(“ E8:E15”)。clearcontents 是一个错字,则每次迭代都应清除两列,然后使用,

.cells(8, c).resize(8, 2).clearcontents

¹注释代码,可以从页面直接复制并粘贴到VBE中的模块代码表中。 不是一张需要重新键入代码以测试/调试的图像。