是否有VBA字符串来选择曾经有空白公式的复制单元格?

时间:2018-12-20 10:19:59

标签: excel vba

我有一个excel文件,其中的所有内容都通过宏进行控制。有时我会将文件从一张纸移到另一张纸,并将这些数据存储为待办事项。

然后我尝试选择空白单元格,如果为true,则删除该行。但是单元格显示为空白,但不是。

因此,我将其从工作表A移到工作表B。工作表A中的数据正在移动并粘贴为工作表B中的值。要移动的数据有两列:列A保留项ID,列B保留日期当项目停止存在时(停止日期)。

在工作表A中,通过一个简单的公式(= + IF(O5 <>“”; O5; N5))填充停产日期,如果没有新的停产日期输入,请从积压中获取。

现在,如果既没有新的“停止日期”输入,也没有任何积压,则该单元格为空白。

当宏将工作表A中的数据复制并粘贴(作为值)到工作表B中时,列B填充有空白单元格(按预期),但由于缺少更好的用词,因此存在一些看不见的内容。几乎就像将要格式化一样,或者遇到非ANSI看不见的隐藏字符时。

如果我选择任何一个空单元格并按Delete键,然后运行“转到特殊...”并空白,则该单元格将被该函数选中。

我正在使用此行删除空格:

Columns("B").SpecialCells(xlBlanks).EntireRow.Delete

这是我的代码段,用于复制/粘贴和处理“停止日期”部分:

Sheets("Dashboard").Select
    Range("B3:Q400").Select
    Selection.Copy
    Sheets("CeaseDate").Select
    Range("F1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("G:T").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("F1:G1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("A" & Rows.Count).End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Columns("F:G").Select
    Selection.Delete Shift:=xlToLeft

    Columns("B").SpecialCells(xlBlanks).EntireRow.Delete 'Remove rows that does not contain a Cease Date <--- This does not work since it wont treat the blank cells as blank

'Range converting to date format

    Columns("B:B").Select
    Selection.NumberFormat = "m/d/yyyy"

    Columns("A:B").Select
    ActiveSheet.Range("A:B").RemoveDuplicates Columns:=Array(1, 2), _
        Header:=xlYes
    Selection.End(xlUp).Select

3 个答案:

答案 0 :(得分:1)

您还可以尝试删除格式。我已经遇到过几次了,它对我的​​代码很有效。此行将删除空白单元格中的所有格式。

 Columns("B").SpecialCells(xlBlanks).EntireRow.ClearFormats

您还可以尝试在每个删除部分添加.clearformats函数。 因此,如果您有

sheet1.column("B").clearcontent

您可以添加

     sheet1.column("B").clearcontent
     sheet1.column("B").clearformats

答案 1 :(得分:1)

如果您有一个包含公式的单元格,但是该公式的值等于="",则它将显示为空白,并且在Excel中将显示COUNTBLANK函数(或{{1 }}函数在VBA中的名称为“空白”,但WorksheetFunction.CountBlank不会不是-因为SpecialCells(xlBlanks)属性不是空白。

这是一个用于检索空白值在范围内的单元格的函数:

Range.Formula

像这样使用它:Private Function GetNullValues(ByVal Target As Range) As Range Dim TestingArea As Range, TestingCell As Range For Each TestingArea In Target.Areas 'Loop through Areas in Target For Each TestingCell In TestingArea.Cells 'Loop through Cells in Area If TestingCell.Value = "" Then 'If Cell looks Blank If GetNullValues Is Nothing Then 'If first blank found Set GetNullValues = TestingCell 'Start list Else 'If not first blank Set GetNullValues = Union(GetNullValues, TestingCell) 'Add to list End If End If Next TestingCell, TestingArea 'This is the same as doing 2 Next lines End Function

答案 2 :(得分:1)

因此我找到了解决方案,我无法解释为什么会出现问题,但显然至少从2003版开始,它就已经在Excel中发生了。

问题:当我复制单元格并使用paste-special-value时,显示为空白的单元格将无法通过=ISBLANK()的测试并返回一个FALSE值。但是,没有要复制的内容或要标记的内容。如果我选择了看似空白的单元格并按Delete或Backspace,则=ISBLANK()现在将返回一个TRUE值。

解决方案

  1. 我选择带有明显空白单元格的区域
  2. 打开“查找/替换”功能,并保留“ 查找内容:”为空白(无空格或其他任何内容) 然后在替换为:中键入您要输入的字符串或单词 “知道”不会出现在电子表格的其他任何地方。
  3. 点击全部替换
  4. 所有显然空白的单元格都将替换为单词
  5. 现在拿这个词,什么都不要查找/替换它
  6. 替换后的单元格现在将真正空白,并通过=ISBLANK()测试

我最初发现了这个(相当模糊的)解决方案here