![](/img/trans.png)
[英]EXCEL VBA - Loop through cells in a column, if not empty, print cell value into another column
[英]VBA check for empty cells in column and print value
在J列中,有空行和带有选中值的行。
我试图编写VBA代码,该代码在有一个空单元格的地方打印“未经检查”,并且可以正常工作,但是当它击中具有值(选中)的单元格时,它将停止。 而且它不会转到下一个单元格,可能是因为我在单元格中有公式,如果未满,则不会打印任何内容,但是它仍然包含该公式。 在我的情况下,我有空单元格,直到J7,然后再次从J15开始。 但是,关于源数据,这可能会不时改变。
之所以要这样做,是因为我在J列中有一个公式,该公式已经打印了一些值,然后有一些VBA代码检查了另一列中的其他值并打印到J列。J列是过滤器的主记录列排序。 我想这就是我必须这样做的方式。
我现在的代码是
Sub DoIfNotEmpty()
Dim ra As Range, re As Range
With ThisWorkbook.Worksheets("Sheet1")
Set ra = .Range("J:j25")
For Each re In ra
If IsEmpty(re.Value) Then
re.Value = "unchecked"
End If
Next re
End With
End Sub
如果单元格包含一个公式(在这种情况下具有未填充的if
语句),我可以打印到空单元格吗?
除了@MaximePorté的指出,它应该是.Range("J1:j25")
。 我猜这些单元格看起来只是空的,但不是。
包含空字符串""
的单元格不再为空,但看起来像它。 您可以像这样测试它:
=""
(两者之间没有空格!) Debug.Print IsEmpty(Range("A1").Value)
,您将获得FALSE
。 单元格A1不再为空,因为它包含一个空字符串。
你能做什么?
Sub DoIfNotEmpty()
Dim ra As Range, re As Range
With ThisWorkbook.Worksheets("Sheet1")
Set ra = .Range("J1:J25")
For Each re In ra
If IsEmpty(re.Value) or re.Value = vbNullString Then
re.Value = "unchecked"
End If
Next re
End With
End Sub
这也会将伪空单元格标记为“未选中”。 但是请注意,它还会杀死导致空字符串""
公式。
您可以利用Range
对象的Specialcells()
方法:
Sub DoIfNotEmpty()
ThisWorkbook.Worksheets("Sheet1").Range("J1:J25").SpecialCells(xlCellTypeBlanks).Value = "unchecked"
End Sub
或者,如果您有返回空白的公式,则AutoFilter()
“空白”单元格写入其中
Sub DoIfNotEmpty()
With ThisWorkbook.Worksheets("Sheeet1").Range("J1:J25") '<--| reference your range (first row must be a "header")
.AutoFilter Field:=1, Criteria1:="" '<--| filter its empty cells
If Application.WorksheetFunction.Subtotal(103, .cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Value = "unchecked" '<--| if any cell filtered other than headers then write "unchecked" in them
.Parent.AutoFilterMode = False
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.