Excel 2013 – 基于行/单元格值填充零

我正在清理Access数据库的时间表,而且我在清理数据时遇到了问题。

我有一个名单在第一列的时间表,然后所有的列后,从C到M(左右)有几个小时。 我试图完成的是,当macros在第一列中find一个名称时,它select该行中的列,find没有小时的单元格,并填充零

Dim r As Integer Dim c As Range For r = 2 To 15 Step 1 If Cells(r, 1).Value <> "" Then Range(Cells(r, 3), Cells(r, 10)).Select End If Next For Each c In Selection If IsEmpty(c) Then c.Value = 0 End If Next 

我试图循环和填充零行基于单元格中input一个命名。 我遇到的问题是单元格只填写在电子表格的姓氏/行中。 这个macros似乎在跳过最后一行。

我刚刚学习VBA,所以也许我只是在语法上缺less一些东西。

谢谢您的帮助!

问题在于,在开始填充0之前,您正在进行下一个select,直到最后一行。 尝试对您的代码进行修改:

 Dim r As Integer Dim c As Range For r = 2 To 15 Step 1 If Cells(r, 1).Value <> "" Then Range(Cells(r, 3), Cells(r, 10)).Select End If For Each c In Selection If IsEmpty(c) Then c.Value = 0 End If Next c Next r 

使用这种方法,在移动到下一个select/行之前填写0。

注:我避免使用.select / Selection,因为它可能导致的问题,所以我不知道如果您将收到一条错误消息,如果一行不包含名称。 如果你想避免这个潜在的错误,请尝试下面的内容:

 Dim r As Integer Dim c As Range Dim c2 As Range For r = 2 To 15 Step 1 If Cells(r, 1).Value <> "" Then Set c2 = Range(Cells(r, 3), Cells(r, 10)) End If For Each c In c2 If IsEmpty(c) Then c.Value = 0 End If Next c Next r 

顺便说一下,你是否从Range(Cells(r, 3), Cells(r, 10))删除了工作簿和工作表名称以简化您的文章? 我很惊讶你能够使用,没有错误。 如果是这样,你显然必须把它们放回来,以便我的代码工作。

可能的话,

 Sub Button1_Click() Dim Rws As Long, Rng As Range Rws = Cells(Rows.Count, "A").End(xlUp).Row Set Rng = Range(Cells(2, 1), Cells(Rws, 1)).SpecialCells(xlCellTypeConstants) Rng = 0 End Sub 

你想要把所有的空白单元格变成零。

 Sub zeroed_hours() Dim rw As Long With Sheets("Sheet1") '<-set this worksheet reference properly! For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If CBool(Len(.Cells(rw, 1))) Then 'found a name! 'C:M on this row .Cells(rw, 3).Resize(1, 11).Replace what:="", replacement:=0, lookat:=xlWhole End If Next rw End With End Sub 

这将循环遍历A列中的单元格。如果它find一个值(长度大于零的值),那么它会用零replace该行C:M中的所有空白单元格。