我正在努力清理Access数据库的时间表,而且我在清理数据方面遇到了问题。
我在第一列中有一个带有名称的时间表,之后的所有列,从C到M(左右)都有几个小时。我想要实现的是,当宏在第一列中找到一个名称时,它会选择该行中的列,找到没有小时数的单元格,并用零填充它们
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
我正在尝试根据输入了命名的单元格循环并用零填充行。我遇到的问题是单元格只填充在电子表格的姓氏/行中。宏似乎正在跳过除最后一行之外的所有内容。
我只是在学习VBA,所以也许我只是在语法中遗漏了一些东西。
感谢您的帮助!
答案 0 :(得分:1)
问题在于,在开始填写0之前,您将继续进行下一个选择,一直到最后一行。尝试对您的代码进行此修改:
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
使用此方法,在进入下一个选择/行之前填写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))
中删除了工作簿和工作表名称以简化帖子?我很惊讶你能够毫无错误地使用它。如果是这样,你显然必须重新使用它们才能使我的代码正常工作。
答案 1 :(得分:0)
可能,
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
答案 2 :(得分:0)
您想要获取所有空白单元格并将其变为零。
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列中的单元格。如果它找到一个值(长度大于零的值),那么它将用该零替换该行上C:M中的所有空白单元格。