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

时间:2017-03-02 07:36:39

标签: excel vba excel-vba

亲爱的SO!

在第J列中,有空行和行,其值为checked。

我试图写一个打印"未经检查"的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语句?

2 个答案:

答案 0 :(得分:2)

除了@MaximePorté之外,它应该是.Range("J1:j25")我想这些单元格看起来只是空洞,但它们不是。

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

  1. 在新工作表中写入A1:=""(中间没有空格!)
  2. 在A1中复制A1和特殊粘贴值。 A1现在看起来是空的。
  3. 在VBA中运行Debug.Print IsEmpty(Range("A1").Value),您将获得FALSE
  4. 单元格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
    

    这会将伪空单元格标记为“未选中”。但请注意,它还会杀死导致空字符串""的公式。

答案 1 :(得分:1)

您可以利用Specialcells()对象

Range方法
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