繁体   English   中英

VBA检查列中的空单元格和打印值

[英]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") 我猜这些单元格看起来只是空的,但不是。

包含空字符串""的单元格不再为空,但看起来像它。 您可以像这样测试它:

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM