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它:

  1. 在新的工作表中写入A1: ="" (中间没有空格!)
  2. 在A1中复制A1和特殊粘贴值。 A1现在看起来是空的。
  3. 在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