VBA检查列中的空单元格和打印值
亲爱的超级明星!
在J列中,有空行和行,其值例如被选中。
我试图写一个VBA代码打印“未选中”的地方有一个空单元格,这个工程,但是当它击中一个值(单选)的单元格停止。 并不会下到下一个单元格,可能是因为我有单元格中的公式,如果不是fullfilled,但是它仍然包含该公式。 在我的情况下,我有空细胞,直到J7,然后再从J15开始。 但是这可能会随时关于源数据的变化。
我想这样做的原因是因为我有J列中的公式,已经打印了一些值,然后一些VBA代码,检查其他值在不同的列中,并打印到列J列J是filter主列有点。 所以这是我必须这样做的方式,我猜。
我的代码现在是,
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")
我猜这些单元格看起来是空的,但是他们没有。
包含空string""
单元格不再为空,但看起来像。 你可以像这样testing它:
- 在新的工作表中写入A1:
=""
(中间没有空格!) - 在A1中复制A1和特殊粘贴值。 A1现在看起来是空的。
- 在VBA中运行
Debug.Print IsEmpty(Range("A1").Value)
,并得到一个FALSE
。
单元格A1不再是空的,因为它包含一个空string。
你能做什么?
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
这将标记伪空单元格为“未选中”。 但请注意,它也会杀死导致空string""
公式。
你可以利用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