【问题标题】:Excel telling me my blank cells aren't blankExcel告诉我我的空白单元格不是空白的
【发布时间】:2013-04-05 18:16:06
【问题描述】:

因此,在 excel 中,我试图通过使用 F5 查找空白单元格,然后使用 Ctrl + - 删除它们并将单元格向上移动,从而消除单元格之间的空白单元格,这些单元格中有信息。但是当我尝试这样做时,它告诉我“没有找到单元格”。

我注意到,如果我选择“空白”单元格,Excel 仍然会计算它们:,这很奇怪。但是,如果我在这些选定的单元格上按 Delete,计数就会消失,然后我可以按 F5、空格、Ctrl + - 和向上移动单元格,它就可以工作了...

所以我的问题是我怎样才能做到这一点,但是 Excel 认为这些空白单元格不是空白的?我试图通过并在空白单元格上按删除,但我有很多数据并且意识到这会花费我太长时间。 我需要找到一种方法来选择数据中的这些“空白”单元格。

提前感谢您的帮助! :)

【问题讨论】:

  • 您可以使用宏循环遍历您的单元格以检查len(trim(rng.value))=0 以检查这些空白单元格吗?注意:如果单元格有像 vbnewline 这样的特殊字符,那么上述方法将不起作用。这类场景需要单独处理。
  • 这也是一次性的吗?屏幕截图中显示的数据会始终包含“/”吗?如果是,那么我们可以缩小代码范围以搜索没有“/”的单元格
  • 我看到这个问题即将被关闭为Off Topic 您需要在此之前确认您是否愿意使用宏;)
  • 我不知道这个问题是关于什么的,但它可以被保存。发布一些代码示例,不要使用那个有趣的图像托管,在这里发布图像。您需要在多年后使问题可用,否则应该立即关闭。
  • 抱歉,没想到回复这么快。是的,数据中总会有一个/。如何选择其中没有“/”的数据?

标签: excel vba


【解决方案1】:

选择并清除这些空白单元格以使其空白的简单方法:

  1. ctrl + a 或预先选择您的范围
  2. ctrl + f
  3. 查找内容留空,然后选择匹配整个单元格内容
  4. 点击全部查找
  5. ctrl + a 选择找到的所有空单元格
  6. 关闭查找对话框
  7. 退格删除

【讨论】:

  • 退格无效,也不能删除。但是,如果我右键单击并选择“删除...”,我可以删除单元格
  • 绝对惊人的解决方案!谢谢
【解决方案2】:

这对我有用:

  1. CTR-H 调出查找和替换
  2. 将“查找内容”留空
  3. 将“替换为”更改为一个独特的文本,即您自己的意思
    不会在另一个单元格中找到阳性(我使用了“xx”)
  4. 点击 '全部替换'
  5. 将步骤 3 中的唯一文本复制到“查找内容”中
  6. 删除“替换为”中的唯一文本
  7. 点击“全部替换”

【讨论】:

  • 工作而且非常简单!
【解决方案3】:

启示:有些空白单元格实际上并不是空白的!正如我将展示的,单元格可以有空格、换行符和真正的空:

要快速找到这些单元格,您可以做一些事情。

  1. 如果单元格确实为空,=CODE(A1) 公式将返回 #VALUE!,否则将返回一个数字。此号码是=CHAR(32) 中使用的ASCII number
  2. 如果选择单元格并单击编辑栏并使用光标全选。

删除这些:

如果单元格中只有空格,可以使用以下方法轻松删除:

  1. ctrl + h 打开查找和替换。
  2. 查找内容中输入一个空格,将替换为留空,并确保在选项中勾选了匹配整个单元格内容
  3. 全部替换

如果您有换行符,这会更加困难并且需要 VBA:

  1. 右键单击工作表选项卡 > 查看代码。
  2. 然后输入以下代码。请记住 Chr(10) 是一个换行符,仅根据需要替换它,例如" " & Char(10) 是空格和换行符:

    Sub find_newlines()
        With Me.Cells
            Set c = .Find(Chr(10), LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    c.Value = ""
                    Set c = .FindNext(c)
                    If c Is Nothing Then Exit Do
                Loop While c.Address <> firstAddress
            End If
        End With
    End Sub
    
  3. 现在按 F5 运行您的代码。


提供文件后:选择感兴趣的范围以提高性能,然后运行以下命令:

Sub find_newlines()
    With Selection
        Set c = .Find("", LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Value = ""
                Set c = .FindNext(c)
                If c Is Nothing Then Exit Do
            Loop While c.Address <> firstAddress
        End If
    End With
End Sub

【讨论】:

  • 不,当我去=CODE(NotTrulyBlankCell)它返回#VALUE!,如果我尝试光标选择方法,它不会做你图片中显示的事情,它只是做就好像有那里空无一物。然后,奇怪的是,在我用光标检查它之后,然后单击它,然后尝试用另外两个“空白”单元格(总共 3 个单元格)选择那个单元格,它显示计数:2。这意味着在我用光标检查它之后,它使单元格真正空白。但它返回#VALUE!在单元格真正空白之前和之后......哇,这真的很混乱。
  • 好的,我有一个包含数据的电子表格,这里是:LINK
  • 把上面的 vba 改成 "" 而不是 char(10),看我帖子里最后的代码!
  • 天哪,是的!太感谢了!你为我节省了很多时间! :)
  • 欢迎您,请保留我的其他答案,以备后用!我学到的另一个技巧。 ;)
【解决方案4】:

我遇到了类似的问题,从另一个应用程序导出的分散的空白单元格仍然显示在单元格计数中。

我设法通过

清除它们
  1. 选择我要清理的列/行,然后执行
  2. “查找”[无文本]和“替换”[选择词]。
  3. 然后我执行了“查找”[选择词]和“替换”[无文本]。

它消除了这些单元格中的所有隐藏/幻像字符。也许这对你有用?

【讨论】:

  • 在 Mac 上完美运行。 glh 的解决方案听起来很有希望,但 Find All... 在 Mac Excel 2011 的查找对话框中不存在。
  • 这是唯一对我有用的答案(除了VBA,我都按顺序尝试了,因为这么简单的东西不应该复杂到需要宏)
【解决方案5】:

所有,这很简单。我一直在尝试相同的方法,这就是在 VBA 中对我有用的方法

Range("A1:R50").Select    'The range you want to remove blanks
With Selection
    Selection.NumberFormat = "General"
    .Value = .Value
End With

问候, 阿南德兰卡

【讨论】:

    【解决方案6】:

    不确定这是否已经说过,但我遇到了类似的问题,单元格中没有显示任何内容,但在运行 IsBlank() 公式时不为空白。

    我选择了整个列,选择了查找和替换,找到没有任何内容的单元格并用 0 替换,然后再次运行查找和替换,找到具有 0 的单元格并用“”替换。

    这解决了我的问题,让我可以搜索空白单元格(F5、特殊、空白)并删除空白行....BOOM。

    可能不适用于每个应用程序,但这解决了我的问题。

    有时单元格中的空格显示为空白,但如果您在单元格上按 F2,您会看到空格。如果您知道单元格中的确切空格数,也可以通过这种方式搜索

    【讨论】:

      【解决方案7】:

      如果您没有要保留的格式或公式,您可以尝试将文件保存为制表符分隔的文本文件,将其关闭,然后使用 Excel 重新打开。这对我有用。

      【讨论】:

      • 但是也会丢失所有格式、公式等。
      • 确实如此,但我没有需要担心的公式。
      【解决方案8】:
      'Select non blank cells
      Selection.SpecialCells(xlCellTypeConstants, 23).Select
      ' REplace tehse blank look like cells to something uniqu
      Selection.Replace What:="", Replacement:="TOBEDELETED", LookAt:=xlWhole, _
          SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
          ReplaceFormat:=False
      'now replace this uique text to nothing and voila all will disappear
      Selection.Replace What:="TOBEDELETED", Replacement:="", LookAt:=xlWhole, _
          SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
          ReplaceFormat:=False
      

      【讨论】:

      • 提供的代码可能会有所帮助,但为了使其成为一个好的答案,您还应该描述/解释您的代码为什么/如何准确地解决问题。
      • 这非常有效。点赞这个!简单的 VBA 代码可以解决问题而不会造成附带损害。
      【解决方案9】:

      找到另一种方式。通过选择标题行 > '数据' 选项卡 > 排序和过滤器 - '过滤器',为 所有 列设置自动过滤器(很重要,否则您会错位数据)。在第一个数据列中使用下拉菜单,取消选中“全选”并仅选择“(空白)”选项> [确定]。突出显示行(现在全部在一起)> 右键单击​​>“删除行”。返回下拉菜单>“全选”。快速:)

      【讨论】:

        【解决方案10】:

        这适用于数字。

        如果您的范围是 O8:O20,则在附近的空白范围(例如 T8:T20)中输入 =O8/1 并填写。这将为您提供“空”单元格的#VALUE 结果,并且您的原始编号将保持不变。

        然后选择范围 T8:20(CTL-* 如果还没有)按 F5 并选择特殊。从特殊对话框中,选择错误并单击确定。这将取消选择您的实际数字,只选择#VALUE 单元格。删除它们,您将拥有实际的空单元格。复制 T8:T20 并粘贴回 O8:O20。

        基本上,由于空白单元格不起作用,您需要将“空”单元格转换为 Go To Special 可以锁定的内容。可以转换为 #VALUE 的任何操作都可以工作,并且还应支持其他“错误”类型。

        【讨论】:

          【解决方案11】:

          我的方法类似于 Curt 上面关于将其保存为制表符分隔的文件并重新导入的建议。 它假定您的数据只有值而没有公式。 这可能是一个很好的假设,因为“坏”空白的问题是由空白和空值之间的混淆引起的——通常是在从其他地方导入的数据中——所以不应该有任何公式。 我的方法是就地解析——非常类似于另存为文本文件并重新导入,但您可以在不关闭并重新打开文件的情况下执行此操作。 它位于数据 > 文本到列 > 分隔 > 删除所有解析字符(如果需要,也可以选择文本)> 完成。这应该会导致 Excel 从头开始​​或从文本中重新识别您的数据,并将空白识别为真正的空白。 您可以在子例程中自动执行此操作:

          Sub F2Enter_new()         
             Dim rInput As Range
             If Selection.Cells.Count > 1 Then Set rInput = Selection
             Set rInput = Application.InputBox(Title:="Select", prompt:="input range", _ 
                                               Default:=rInput.Address, Type:=8)
          '   Application.EnableEvents = False: Application.ScreenUpdating = False
             For Each c In rInput.Columns
                c.TextToColumns Destination:=Range(c.Cells(1).Address), DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
                Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
                FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
             Next c
             Application.EnableEvents = True: Application.ScreenUpdating = True
          End Sub
          

          您还可以打开该注释行以使该子例程“在后台”运行。对于这个子例程,它只会稍微提高性能(对其他人来说,它确实有很大帮助)。 之所以命名为 F2Enter,是因为修复此“空白”问题的原始手动方法是通过按 F2 和 Enter 使 Excel 识别公式。

          【讨论】:

            【解决方案12】:

            这是我在不进行任何编码的情况下解决此问题的方法。

            1. 选择我要从中删除“空白”单元格的整个列。
            2. 单击顶部的条件格式选项卡。
            3. 选择“新规则”。
            4. 点击“仅设置包含格式的单元格”。
            5. 将“介于”更改为“等于”。
            6. 点击“等于”框旁边的框。
            7. 单击有问题的“空白”单元格之一。
            8. 单击“格式”按钮。
            9. 随机选择一种颜色来填充方框。
            10. 按“确定”。
            11. 这应该会将所有有问题的“空白”单元格更改为您选择的颜色。现在右键单击一个彩色单元格,然后转到“排序”和“将选定的单元格颜色放在顶部”。
            12. 这会将所有有问题的单元格放在列的顶部,现在所有其他单元格将保持原来的顺序。您现在可以选择一组中的所有问题单元格,然后单击删除顶部的单元格按钮以摆脱它们。

            【讨论】:

              【解决方案13】:

              对我来说最简单的解决方案是:

              1)选择范围并复制(ctrl+c)

              2)新建一个文本文件(随便,很快就会删除),打开文本文件然后粘贴excel信息(ctrl+v)

              3)既然Excel中的信息在文本文件中,在文本文件中执行全选(ctrl+a),然后复制(ctrl+c)

              4) 转到第 1 步中原始范围的开头,并粘贴第 3 步中副本中的旧信息。

              完成!没有更多的错误空白! (您现在可以删除临时文本文件)

              【讨论】:

                【解决方案14】:

                Goto->Special->blanks 不喜欢合并的单元格。尝试取消合并超出您要选择空白的范围的单元格,然后重试。

                【讨论】:

                  【解决方案15】:

                  我在获取 COUNTA 公式来计算非空白单元格时遇到了类似的问题,它正在计算所有单元格(即使是空白单元格也是非空白单元格),我尝试了 =CODE() 但它们没有空格或新的线。

                  我发现当我单击单元格然后单击它时,公式会计算单元格。我有数千个单元格,因此无法手动执行此操作。我写了这个 VBA 语句来逐字检查所有单元格,如果它们是空白的,那么将它们设为空白。忽略这个宏的无意义,相信我,它实际上是通过强制 Excel 将空单元格识别为实际上是空的。

                  'This checks all the cells in a table so will need to be changed if you're using a range
                  Sub CreateBlanks()
                  
                  Dim clientTable As ListObject
                  Dim selectedCell As Range
                  
                  Set clientTable = Worksheets("Client Table").ListObjects("ClientTable")
                  
                  For Each selectedCell In clientTable.DataBodyRange.Cells
                      If selectedCell = "" Then
                          selectedCell = ""
                      End If
                  Next selectedCell
                  End Sub
                  

                  【讨论】:

                    【解决方案16】:

                    将您的数据集保存在 CSV 文件中并打开该文件并复制数据集并粘贴到 Excel 文件中。 然后 crtl + g 将对您的文件起作用,这意味着 excel 将识别空白确实是空白。

                    【讨论】:

                      最近更新 更多